Java 在多个服务器上查找相同的EJB

Java 在多个服务器上查找相同的EJB,java,spring,jboss7.x,java-ee-6,ejb-3.1,Java,Spring,Jboss7.x,Java Ee 6,Ejb 3.1,我正在尝试使用相同的bean实现从一个部署查找到另一个部署。它基本上是一个消费者/生产者设置,在两台机器上的两个部署中使用相同的bean ear ejb-api com.example.bean ConsumerBean ProducerBean ejb-jar com.example.bean ConsumerBeanRemote ProducerBe

我正在尝试使用相同的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作为ejb客户端库进行手动查找,但没有成功,因为jboss在启动其容器时锁定了ejb选择器(我敢打赌规范对JavaEE环境中的手动查找有一定的说明)。接下来我尝试的是使用Spring的特性进行查找,但没有成功

我们使用的是JBoss应用服务器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);

我们知道引发此异常是因为,因此问题仍然存在:我们如何以干净且可配置的方式远程调用相同的bean?

您没有告诉我有关您的设置或遇到的任何错误的太多信息,因此我无法真正帮助您解决这些问题。我刚刚努力让远程ejb客户端也能正常工作,这些资源绝对是无价的:


祝你好运

与此处描述的问题几乎相同:


似乎不可能通过EJB在多个服务器之间建立可靠的连接,因此我们最终使用JMS进行服务器到服务器的通信。也许这也是你的一个选择。

设置是可能的。不需要使用JMS重新设计整个代码

使用您自己的EJBClient上下文自定义选择器,可以从单个POJO客户机在不同的JBOSSAS7服务器上调用远程ejb bean。使用上面提到的代码,您可以为不同的服务器注册不同的作用域

这里可以看到jboss开发者的一个例子


“它不起作用”只有在只有一个问题可谈,因此只有一个解决方案可提供时才是有效的问题描述。@Gimby我很乐意进一步详细介绍,您需要知道什么?您开始时遇到的错误!我更新了我的问题。这个问题不应该有一个被接受的答案,因为它来自亚历山大·穆勒。有一种方法可以做到这一点,而接受一个只说等同于“idk”的答案只意味着StackOverflow社区的其他人跳过了这个问题,因为他们认为这个问题已经得到了回答,而所有其他希望学习的人都因此而受苦。包括我自己在内,因为我想了解Remote在服务器间通信方面是如何工作的。我犯的错误是非常普遍的,我确实理解它们的原因。我会澄清我的问题。如果我想提供更多帮助,我需要代码、配置和错误消息。众所周知,JBoss AS 7.x上的远程ejb客户端错误消息臭名昭著。我意识到这个问题已经解决了,但这也是我们所做的。只要记住在完成EJB根命名上下文时关闭它,否则会泄漏套接字!您发布的链接都使用标准客户端,与服务器客户端的问题毫无关系。
与此处描述的问题几乎相同:
循环参考:D
java.lang.SecurityException: EJB client context selector may not be changed at org.jboss.ejb.client.EJBClientContext.setSelector(EJBClientContext.java:181)