我正在尝试从一个部署到另一个部署进行查找,使用相同的bean实现。它基本上是一个消费者/生产者设置,在两台机器上的两个部署中都有相同的bean。
ear
ejb-api
com.example.bean
ConsumerBean
ProducerBean
ejb-jar
com.example.bean
ConsumerBeanRemote
ProducerBeanRemote
ProducerBeanRemote应该查找ConsumerBeanRemote并调用其公共方法。
我们的机器正在这样沟通:
(Machine A) ProducerBeanRemote --> (Machine B) ConsumerBeanRemote
(Machine A) ProducerBeanRemote --> (Machine C) ConsumerBeanRemote
(Machine A) ProducerBeanRemote --> (Machine D) ConsumerBeanRemote
你明白了......
所以问题是,它不起作用。我尝试使用jboss-as-ejb-client库进行手动查找,因为JBoss在启动其容器时锁定了EJB选择器,因此无法正常工作(我打赌规范在Java EE中有关于手动查找的说法环境)。我尝试的下一件事是使用Spring的功能进行查找,但无济于事。
我们正在使用JBoss Application Server 7.1.1.Final。
我打赌必须有办法完成我的设置,我非常感谢社区提供的任何帮助。
更新
要从ProducerBeanRemote连接到ConsumerBeanRemote,我们需要通过配置在运行时指定远程InitialContext。
Properties properties = new Properties();
properties.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false");
properties.put("remote.connections", "default");
properties.put("remote.connection.default.host", "remote-host");
properties.put("remote.connection.default.port", "4447");
properties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", "false");
EJBClientConfiguration ejbClientConfiguration = new PropertiesBasedEJBClientConfiguration(properties);
ContextSelector<EJBClientContext> ejbClientContextSelector = new ConfigBasedEJBClientContextSelector(ejbClientConfiguration);
EJBClientContext.setSelector(ejbClientContextSelector);
StatelessEJBLocator<T> locator = new StatelessEJBLocator<>(viewType, appName, moduleName, beanName, distinctName);
return EJBClient.createProxy(locator);
产生的异常是
java.lang.SecurityException: EJB client context selector may not be changed at org.jboss.ejb.client.EJBClientContext.setSelector(EJBClientContext.java:181)
我们知道由于https://issues.jboss.org/browse/AS7-2998引发了这个异常,所以问题仍然存在:我们如何以干净和可配置的方式远程调用相同的bean?
答案 0 :(得分:1)
你没有告诉我很多关于你的设置或你得到的任何错误,所以我无法真正帮助你排除故障。我只是努力让远程ejb客户端工作,这些资源绝对无价:
https://docs.jboss.org/author/display/AS72/EJB+invocations+from+a+remote+client+using+JNDI https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project http://blog.jonasbandi.net/2013/08/jboss-remote-ejb-invocation-unexpected.html#comment-form http://www.mastertheboss.com/jboss-as-7/jboss-as-7-remote-ejb-client-tutorial/page-2
祝你好运!答案 1 :(得分:1)
几乎与此处描述的问题相同:JNDI lookup from one server to many configurable servers
似乎不可能通过EJB获得多个服务器之间的依赖连接,因此我们最终使用JMS进行服务器到服务器的通信。也许这也是你的选择。
答案 2 :(得分:0)
可以进行设置。没有必要使用JMS重新设计整个代码。
可以使用您自己的EJBClientContext自定义选择器从单个POJO客户端调用不同JBOSSAS7服务器上的远程ejb bean。使用上面提到的代码,您可以为不同的服务器注册不同的范围
请参阅jboss开发人员的示例