【发布时间】:2019-01-04 14:46:21
【问题描述】:
我是 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();
}
}
任何人都可以就此提出建议吗? 提前致谢
【问题讨论】:
-
我从未使用过 WildFly,但看起来您实际上并没有在任何地方注册 bean。
con.lookup寻找已注册的 bean,但没有告诉 WildFly 创建HelloWorldBean的实例。 -
从本地扩展远程接口的原因是什么?
-
您在编写的无状态注释中的实现有错字:HelloWroldBean。请更正并重试。 ??????
-
@Pulszar 我想在这种情况下没有任何意义。
-
您的部署单元是什么 - JAR 或 EAR?