当前位置: 首页 > 知识库问答 >
问题:

javax。命名。WildFly上的NameNotFoundException EJB HelloWorld

昝欣可
2023-03-14

我是EJB 3.1的初学者,并试图运行我的第一个Hello World程序并获得NameNotFoundException。

Exception in thread "main" javax.naming.NameNotFoundException: WFNAM00004: Name "global/HelloWorld/HelloWorldBean!api.HelloWorldRemote" is not found
at org.wildfly.naming.client.util.NamingUtils$1.lookupNative(NamingUtils.java:95)
at org.wildfly.naming.client.AbstractContext.lookup(AbstractContext.java:84)
at org.wildfly.naming.client.WildFlyRootContext.lookup(WildFlyRootContext.java:150)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at driver.HelloWorld.main(HelloWorld.java:27)

这是我的课

本地接口:

@Local
 public interface HelloWorldLocal {
public void getHello();
 }

远程接口:

@Remote
public interface HelloWorldRemote extends HelloWorldLocal {

 }

豆类:

@Stateless(name="HelloWroldBean")
public class HelloWorldBean implements HelloWorldLocal, HelloWorldRemote{

@Override
public void getHello() {
    System.out.println("Hello Cheppura");
}

  }

客户:

public class HelloWorld {

public static void main(String[] args) throws NamingException {
    final Hashtable<String, String> jndiProperties = new Hashtable<>();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,         
            "org.wildfly.naming.client.WildFlyInitialContextFactory");
    Context con = new InitialContext(jndiProperties);

    final String appName = "";
    final String moduleName = "HelloWorld";
    final String beanName = HelloWorldBean.class.getSimpleName();
    final String viewClassName = HelloWorldRemote.class.getName();

    Object ob = con.lookup("java:global" + appName + "/" + moduleName  + "/" + beanName + "!" + viewClassName);

    HelloWorldRemote hw = (HelloWorldRemote) PortableRemoteObject.narrow(ob, HelloWorldRemote.class);

    hw.getHello();
}

}

有人能对此提出建议吗?提前谢谢

共有1个答案

酆景辉
2023-03-14

您违反了JEE规范,因为EJB接口中没有继承。

您的Remote接口扩展了local接口,但这种方法违反了规范。我认为这样的EAR永远不会正确部署,无论运行时环境如何。

如果您想以这种方式编写更少的代码,那么使用public void getHello()创建第三个接口

public interface Secondary {
    public void getHello();
}

@Remote
public interface HelloWorldRemote extends Secondary {
 }

@Local
 public interface HelloWorldLocal extends Secondary{
 }
 类似资料:
  • 迁移到Java8和WildFly 8.2.0后,我在每个事务中都收到此错误 用户事务:javax。命名。NameNotFoundException:UserTransaction[根异常为java.lang.IllegalStateException:JBAS014237:仅允许具有bean管理事务划分的会话和消息驱动bean访问UserTransaction]。jboss。像命名。基于服务的名称

  • 我尝试在远程环境中调用EJB,并使用Wildfly作为容器。 很抱歉,但这是我第一次尝试以远程方式调用EJB。 我使用下面的说明在Wildfly中调用EJB。使用JNDI从远程客户端https://docs.jboss.org/author/display/WFLY8/EJB调用 但是,我调用这些EJB时出错,我不知道我的配置出了什么问题。 请参阅下面的错误堆栈跟踪: 远程服务器和客户端中的我的界

  • 我正在开发一个使用tomcat服务器管理的连接池的spring应用程序。 我在上下文中的标记中定义了数据源。tomcat的xml:(我在上下文中使用Spring2.0.7)。xml: 在我的应用程序上下文中。xml(即在spring配置文件中),代码为: 当应用程序启动时,出现以下错误: 请帮我解决这个问题。

  • 我试图在DAO类中注入EntityManager。 但我在服务器初始化(WildFly 10.0.0)期间收到此错误。 18: 35:57318错误[org.springframework.web.context.ContextLoader](ServerService线程池--60)上下文初始化失败:org。springframework。豆。工厂BeanCreationException:创建

  • 线程“main”中的异常javax.naming.NoFirst alContextException:需要在环境或系统属性中指定类名,或者作为小程序参数,或者在应用程序资源文件中指定类名:java.naming.factory.initialjavax.naming.spi.NamingManager.getjavax.naming.的初始上下文(未知源)ontext.getjavax.nami

  • 我有这个例外,请我需要你的支持。 一个wildfly20实例到服务,另一个wildfly20实例到分层web。 Web层在远程环境中使用jdni作为服务。它正在测试,并与一些方法配合使用。 现在,箱子来了。jndi层中的一些方法工作正常,web调用它,并很好地获取资源,但是,其他一些方法在web层调用jndi调用时收到此异常(javax.ejb.EJBException:读取响应失败)。 拜托,让