我们开发了一个培训应用程序,其中包含一个与EJB通信的独立java客户端。工作设置包括Windows 7上的JBoss AS 7.1和通过/bin/add user创建的应用程序用户。球棒
客户端是这样编码的:
Properties jndiProps = new Properties();
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProps.put("jboss.naming.client.ejb.context", true);
jndiProps.put(Context.PROVIDER_URL, "remote://localhost:4447");
jndiProps.put(Context.SECURITY_PRINCIPAL, "user");
jndiProps.put(Context.SECURITY_CREDENTIALS, "xxx");
Context ctx = new InitialContext(jndiProps);
MyBeanRemote myBean = (MyBeanRemote) ctx.lookup("ejb:/training//MyBean!mypackage.MyBeanRemote");
String result = myBean.greet("John");
客户端是用jboss客户端启动的。类路径中的jar。
现在,我们尝试改用WildFly 8.1,它已成功部署,但客户端失败
Exception in thread "main" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:syjeews, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@6e7d3146
将JNDI查找名称更改为在部署期间打印出来的内容(例如java: global/训练/MyBean!我的包。MyBeanRemote
)导致
Exception in thread "main" javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [remote://localhost:4447 (java.net.ConnectException: Connection refused: no further information)]
在google搜索了一段时间后,我们找到了一些关于SO(例如this或that)或samples或Wildfly开发人员指南的文章,但所有的备选方案,可能是最小的JNDI属性或通过ClientContext进行的扩展配置没有使其起作用。
所以我的问题是,需要做些什么来迁移上面的代码/配置以在WildFly下运行它?
注意:这不是生产代码,所以安全性不是问题-如果我可以简化整个配置,那很好-它应该只演示如何从独立Java程序使用EJB远程接口。
我正在使用:
这对我有用:
Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
jndiProperties.put("jboss.naming.client.ejb.context", true);
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); //System.getProperty(Context.PROVIDER_URL, "http-remoting://localhost:8080"));
/* jndiProperties.put(Context.SECURITY_PRINCIPAL, "user");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "xxx");*/
InitialContext context = new InitialContext(jndiProperties);
MyFirstEJBRemote ejb = (MyFirstEJBRemote) context.lookup("/EJBProjectName/MyFirstEJB!src.MyFirstEJBRemote");
希望有帮助!
提供程序URL应为http-remoting://localhost:8080而不是remote://localhost:4447
你需要做两个改变
而不是使用“remote://localhost:4447“使用”http-remoting://localhost:8080“”
jndiProps.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
在代码中配置jndi属性时,查找名称不应包含ejb
MyBeanRemote myBean = (MyBeanRemote) ctx.lookup("/training//MyBean!mypackage.MyBeanRemote");
此解决方案经过测试并正常工作
大多情况,从npm客户端迁移至Yarn客户端都是很方便的。package.json文件依然可用,你只要在已有目录执行以下命令即可: $ yarn 要添加依赖,你可以使用: $ yarn add <package> 执行以上两个命令后,yarn都会在项目根目录创建或更新yarn.lock文件。如果你要将项目发布或者共享给同事,请确保包含yarn.lock文件。 执行以上两个命令中的任一个,项
问题内容: 我目前正在将代码从Jboss7迁移到Wildfly10。 服务器本身完全可以启动。当尝试将我们的客户端与正在运行的新wildfly10服务器进行ejb-remote调用连接时,它将无法正常工作。 我唯一要使用的是以下错误: org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector setupEJBReceiver
我目前正在将我们的代码从Jboss7迁移到Wildfly10。 服务器本身启动完全正常。当尝试将我们的客户端与正在工作的新Wildfly10服务器连接以进行ejb远程调用时,它就是不起作用。 我唯一可以处理的是以下错误: 组织。jboss。ejb。客户远程处理。ConfigBasedEJBClientContextSelector setupEJBReceivers警告:无法注册EJB接收器以连接
问题内容: 根据EJB客户端应用程序上的Netbeans教程,我似乎无法调用该方法: 编译错误: 客户: ejb: 远程接口: 现在,如果接口被修改: Bean现在可以使用以下方法: 但是,有一个NPE: 如何正确调用该方法?EJB未实例化? 问题答案: 我从头开始。我能想到的唯一区别是,我没有创建EJB应用程序,而是为bean创建了EJB模块。否则,我认为是相同的。 结构体: 客户代码: 豆:
我正在尝试从瘦客户端对WebSphere Liberty20.0.0.10(JDK 8)进行远程EJB 3调用。客户端不在EJB容器中运行。我谷歌了这个页面,并尝试按照说明进行操作:https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_ejb_remote.
我试图使用JBoss7.1.1中的JNDI从远程客户端调用,但我得到了一个异常: 我使用的是jboss的安全机制,并且我已经通过add-user.bat添加了用户,还有带有用户名和密码的jboss-ejb-client.properties文件,但仍然会得到异常。我遵循了链接的示例集:使用JNDI从远程客户端进行EJB调用,当我不使用安全机制时也是如此,但是当我使用安全机制时,就会出现错误 你错过