最初に、remoteInvocationFactory を使用するように Bean を構成していないときに、rmi が機能していることを述べたいと思います。
私の構造:私は2つのWebアプリケーションを持っています。どちらもosgiフレームワーク(equinox 3.9)が埋め込まれています.WebAppServer - そのosgiの中に、osgiサービスをrmiサービスとしてエクスポートするバンドルがあります
. rmi サービス
両方の webapps は spring dm (gemini-blueprint 2.0.0.M02) を使用しています
WebAppServer では、インスタンス化RmiServiceExporter
して prepare() を呼び出して rmi をエクスポートしています。
クライアント側(WebAppClient)では、バンドル内でrmiプロキシBeanを定義する方法です
<bean id="authorizationService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean" scope="prototype">
<property name="serviceUrl" value="rmi://localhost:1099/xxx/AuthorizationService"/>
<property name="serviceInterface" value="xxx.AuthorizationService"/>
<property name="refreshStubOnConnectFailure"><value>true</value></property>
<property name="lookupStubOnStartup"><value>false</value></property>
</bean>
前に述べたように、カスタムのリモート呼び出しファクトリを指定したい場合は、そのサービスを正常に呼び出すことができましたが、問題が始まります。
<property name="remoteInvocationFactory"><ref bean="remoteInvocationFactory"/></property>
工場提供MyCustomRemoteInvocation
今、私がサービスを呼び出しているとき、私は得る
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: xxx.MyCustomRemoteInvocation cannot be found by org.springframework.context_3.2.3.RELEASE (no security manager: RMI class loader disabled)
rmi クラス ローダーを有効にしたくありません。欠落しているクラスはサービス実装で利用できます (osgi フレームワークにインストールされたバンドルによってエクスポートされます)。他の場所にインポートしようとしましたが、うまくいきませんでした。何かアイデアはありますか?