私は2つのアプリケーションを持っています - 1つのEARにEJB3.0と他のSpringクライアントが含まれています。両方とも、同じWebsphereアプリケーションサーバー7のインスタンス、つまり同じJVMにデプロイされます。ここでSpringからのリモートEJB3アクセス
は、クライアント部分のカップルです:
applicationContext.xmlを:
<bean id="ruleService" class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
<property name="jndiName" value="com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness"/>
<property name="businessInterface" value="com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness"/>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">com.ibm.websphere.naming.WsnInitialContextFactory</prop>
<prop key="java.naming.provider.url">corbaloc:iiop:localhost:2809</prop>
</props>
</property>
</bean>
クライアントのコードスニペット:
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Customer_Management_Service_JavaBusiness ruleService
= (Customer_Management_Service_JavaBusiness)ctx.getBean("ruleService");
これが正常に動作します。同じコンテナ内の他のアプリケーションにデプロイされたEJBアクセス。
ただし、そのクライアントを同じネットワーク内の他のマシンに移動してもとし、プロバイダのURLを変更してlocalhostの代わりにリモートサーバーIPを指定すると動作しません。 JNDIルックアップの問題が発生し
正確なエラー: エラー500:org.springframework.beans.factory.BeanCreationException:名前を持つBeanを作成エラー「ruleService」クラスパスリソースに定義されている[applicationContext.xmlを]:initメソッドの呼び出しに失敗しました。ネストされた例外はjavax.naming.NameNotFoundExceptionです。コンテキスト:CFSDDVM2399Node01Cell/nodes/CFSDDVM2399Node01/servers/server1、名前:com.ecrd.ruleservice.Customer_Management_Service_JavaBusiness:名前com.ecrd.ruleservice.Customer_Management_Service_JavaBusinessの最初のコンポーネントが見つかりません。 [ルート例外はorg.omg.CosNaming.NamingContextPackage.NotFound:IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
EJBへの接続に必要な変更(および場所)がわかりません異なるサーバーJVMでホストされています。助けや提案は大歓迎です。