java - WildFly 上的 javax.naming.NameNotFoundException EJB HelloWorld
问题描述
我是 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();
}
}
有人可以请教这个吗?提前致谢
解决方案
您违反了 JEE 规范,因为 EJB 接口中没有继承。
您的Remote
界面扩展了Local
一个,但这种方法违反了规范。我认为这样的 EAR 永远不会正确部署,无论运行时环境如何。
如果您想以这种方式编写更少的代码,则使用该方法创建第三个接口,并public void getHello();
在两个接口中扩展它。Local
Remote
public interface Secondary {
public void getHello();
}
@Remote
public interface HelloWorldRemote extends Secondary {
}
@Local
public interface HelloWorldLocal extends Secondary{
}
推荐阅读
- php - 来自 w3schools.com 的 PHP 表单验证
- java - 在 Java 中使用带有自定义对象的 HashMap
- bash - 如何在bash中操作日期的输入?
- angular - 当我运行我的角度程序时,无法在网络浏览器上看到网页/输出
- c++ - 从cpp动态加载和卸载2个qml文件
- go - 尝试发出回显请求时出现无效连接错误
- java - 为什么我在创建文件时收到运行时错误?
- html - 无论定位或索引编号如何,z-index 都不会改变
- css - 为什么 css 规则不应用于注入 html 的 dom 清理的角度字符串?
- linkedin - Linkedin oauth2 PKCE 内部服务器错误