Пружина RMI-IIOP(CORBA) с пружинным креплением

Я пытаюсь реализовать RMI-IIOP с помощью весны. Я много искал, но не нашел ни одного последнего примера. Итак, я начал с раздела "Предоставление услуг Corba" в этой книге. Несмотря на то, что он написан на основе более старой весенней версии, похоже, он работает.

Это мои конфигурации

сервер

public interface IRemote extends Remote{
    String getMsg() throws RemoteException;
} 
public class RemoteImpl implements IRemote {
    @Override
    public String getMsg() throws RemoteException {
            return "Hello";
    }
}

Фасоль

<bean id="helloWorldService"
            class="com.sample.remote.RemoteImpl" />

<bean class="org.springframework.remoting.rmi.JndiRmiServiceExporter">
            <property name="jndiName" value="HelloWorld"/>
            <property name="serviceInterface"
                    value="com.sample.remote.IRemote" />
            <property name="service" ref="helloWorldService"/>
            <property name="jndiEnvironment">
                    <props>
                            <prop key="java.naming.factory.initial">
                                    com.sun.jndi.cosnaming.CNCtxFactory
                            </prop>
                            <prop key="java.naming.provider.url">iiop://localhost:1050</prop>
                    </props>
            </property>
</bean>

клиент

<bean id="helloWorldService" class="org.springframework.remoting.rmi.JndiRmiProxyFactoryBean">
            <property name="jndiName">
                    <value>HelloWorld</value>
            </property>

            <property name="serviceInterface">
                    <value>com.sample.remote.IRemote</value>
            </property>
            <property name="jndiEnvironment">
                    <props>
                            <prop key="java.naming.factory.initial">
                                    com.sun.jndi.cosnaming.CNCtxFactory
                            </prop>
                            <prop key="java.naming.provider.url">iiop://localhost:1050</prop>
                    </props>
            </property>
</bean>

Класс клиента

public class Client {
    @Autowired
    IRemote remote;

    public void clientMethod() {
            try {
                    System.out.println(remote.getMsg());
            } catch (RemoteException e) {
                    e.printStackTrace();
            }
    }
}

Это прекрасно работает как таковой.

Но проблема заключается в использовании пружины AOP. Когда aop создает прокси-компонент, поиск на заглушке / связке завершается неудачно на сервере с

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.remoting.rmi.JndiRmiServiceExporter#0' defined in URL [jar:file:/D:/Code-base/Workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sample-web/WEB-INF/lib/tech-ri-remote-1.0.0-M1.jar!/config/test_SpringContext.xml]: Invocation of init method failed; nested exception is java.rmi.StubNotFoundException: Stub class not found: $Proxy203_Stub; nested exception is:
        java.lang.ClassNotFoundException: $Proxy203_Stub
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.rmi.StubNotFoundException: Stub class not found: $Proxy203_Stub; nested exception is:
        java.lang.ClassNotFoundException: $Proxy203_Stub
        at sun.rmi.server.Util.createStub(Util.java:292)
        at sun.rmi.server.Util.createProxy(Util.java:140)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:196)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:310)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:237)
        at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.exportObject(PortableRemoteObject.java:119)
        at javax.rmi.PortableRemoteObject.exportObject(PortableRemoteObject.java:103)
        at org.springframework.remoting.rmi.JndiRmiServiceExporter.prepare(JndiRmiServiceExporter.java:121)
        at org.springframework.remoting.rmi.JndiRmiServiceExporter.afterPropertiesSet(JndiRmiServiceExporter.java:106)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
        ... 22 more
Caused by: java.lang.ClassNotFoundException: $Proxy203_Stub
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at sun.rmi.server.Util.createStub(Util.java:286)
        ... 32 more

Несмотря на то, что исключение говорит, что $Proxy203_Stub не найден, при отладке я обнаружил, что фактическое исключение возникает при сбое поиска Tie.

Поэтому, как еще один вариант, упомянутый в javadoc JndiRmiServiceExporter, я попытался без интерфейса java.rmi.Remote и RemoteException. Но тогда создание bean-компонента завершается неудачно, а RmiInvocationWrapper_Stub не найден.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.remoting.rmi.JndiRmiServiceExporter#0' defined in URL [jar:file:/D:/Code-base/Workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/sample-web/WEB-INF/lib/tech-ri-remote-1.0.0-M1.jar!/config/test_SpringContext.xml]: Invocation of init method failed; nested exception is java.rmi.StubNotFoundException: Stub class not found: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub; nested exception is:
        java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:725)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.rmi.StubNotFoundException: Stub class not found: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub; nested exception is:
        java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub
        at sun.rmi.server.Util.createStub(Util.java:292)
        at sun.rmi.server.Util.createProxy(Util.java:140)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:196)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:310)
        at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:237)
        at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.exportObject(PortableRemoteObject.java:119)
        at javax.rmi.PortableRemoteObject.exportObject(PortableRemoteObject.java:103)
        at org.springframework.remoting.rmi.JndiRmiServiceExporter.prepare(JndiRmiServiceExporter.java:121)
        at org.springframework.remoting.rmi.JndiRmiServiceExporter.afterPropertiesSet(JndiRmiServiceExporter.java:106)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
        ... 22 more
Caused by: java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationWrapper_Stub
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at sun.rmi.server.Util.createStub(Util.java:286)
        ... 32 more

Здесь также, фактическое исключение происходит при сбое поиска связи.

Я видел, что заглушка и связка RmiInvocationWrapper не являются частью spring-context.jar в последних выпусках и больше не нужны для rmi. Но я не видел ничего похожего на rmi-iiop. Поэтому, предполагая, что нужны заглушка и галстук, я создал _RmiInvocationWrapper_Tie.class и _RmiInvocationHandler_Stub.class и добавил их в банку. Затем сервер начал работать.

Но при запуске клиента происходит сбой с

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloWorldService' defined in URL [jar:file:/D:/Code-base/Workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/sample-web/WEB-INF/lib/tech-ri-1.0.0-M1.jar!/config/techri_SpringContext.xml]: Invocation of init method failed; nested exception is org.springframework.remoting.RemoteLookupFailureException: Could not narrow RMI stub to service interface [com.sample.remote.IRemote]; nested exception is java.lang.ClassCastException
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:706)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.remoting.RemoteLookupFailureException: Could not narrow RMI stub to service interface [com.sample.remote.IRemote]; nested exception is java.lang.ClassCastException
        at org.springframework.remoting.rmi.JndiRmiClientInterceptor.lookupStub(JndiRmiClientInterceptor.java:237)
        at org.springframework.remoting.rmi.JndiRmiClientInterceptor.prepare(JndiRmiClientInterceptor.java:199)
        at org.springframework.remoting.rmi.JndiRmiClientInterceptor.afterPropertiesSet(JndiRmiClientInterceptor.java:187)
        at org.springframework.remoting.rmi.JndiRmiProxyFactoryBean.afterPropertiesSet(JndiRmiProxyFactoryBean.java:79)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
        ... 22 more
Caused by: java.lang.ClassCastException
        at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:245)
        at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:153)
        at org.springframework.remoting.rmi.JndiRmiClientInterceptor.lookupStub(JndiRmiClientInterceptor.java:233)
        ... 27 more
Caused by: java.lang.ClassCastException: Object is not of remote type com.sample.remote.IRemote
        at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:237)
        ... 29 more

Так что я сейчас застрял и не знаю, что делать дальше. Пожалуйста, порекомендуйте. Также было бы лучше, если бы кто-то мог предоставить какие-либо последние примеры конфигураций, основанные на этом.

0 ответов

Другие вопросы по тегам