我正在尝试使用Spring
创建一些bean并将它们导出到RMI ...
这是我的代码:
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="OfferService" />
<property name="service" ref="offerService" />
<property name="serviceInterface" value="ro.project.services.OfferService" />
<property name="registryPort" value="1199" />
</bean>
我在我的根文件夹中创建了一个名为“policy.all”的文件,我正在使用这些参数运行我的VM,但我仍然有这个错误:
java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationHandler (no security manager: RMI class loader disabled)
我不知道该怎么做...在linux中,完全相同的项目运行正常(使用jdk 1.7.0.4)但在Windows中没有...在java 1.5(windows)中它正在工作..但在java 1.7.0.4(windows)它不能正常工作......
编辑:
我的错误是:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.remoting.rmi.RmiServiceExporter#0' defined in class path resource [spring/services.xml]: Invocation of init method failed; nested exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: org.springframework.remoting.rmi.RmiInvocationHandler (no security manager: RMI class loader disabled)
添加以下行后:
if (System.getSecurityManager() == null)
{
RMISecurityManager manager = new RMISecurityManager();
System.setSecurityManager(manager);
}
我有这个错误:
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring/application-context.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring/application-context.xml] cannot be opened because it does not exist
提前谢谢
答案 0 :(得分:2)
这里的重点不是安装安全管理器而是查找类。您缺少部署中的某些JAR文件。
答案 1 :(得分:2)
我认为它仍然不重要,但我个人今天面对同样的问题,并且找不到答案。我在这里发布,也许它可以帮助别人。
解决方案:停止rmiregistry
程序,或使用-J选项将Spring jar传递给rmiregistry
。最简单的方法就是停止rmiregistry并允许Spring以所有必需的类启动另一个。并且不要设置RMISecurityManager
。
答案 2 :(得分:0)
您需要在代码的一部分中使用此功能:
System.setSecurityManager(new RMISecurityManager());
您也可以拥有其他安全管理器,但只需安装安全管理器即可。
实际上,我发布的专线可以很容易地在独立桌面应用程序的主类中触发,但我不确定你的情况。你应该寻找一个可能的配置选项。
答案 3 :(得分:0)
使用Spring RMIServiceExporter,正确管理RMI Registry的最佳实践是使用RMIRegistryFactoryBean。为了更好地理解,我使用RemoteBean粘贴了一个Spring配置示例:
<bean id="RemoteServices" class="remote.RMIServicesImpl"/>
<bean id="RemoteRmiRegistry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="alwaysCreate" value="true" />
<property name="port" value="1093"></property>
</bean>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="RemoteServices" />
<property name="serviceInterface" value="remote.RemoteInterface" />
<property name="serviceName" value="RemoteServices" />
<property name="replaceExistingBinding" value="true"></property>
<property name="registry" ref="RemoteRmiRegistry"></property>
</bean>
通过这种方式,RmiRegistryFactoryBean将自动管理有关RMI套接字层的所有内容,并且您不需要停止JVM,只需重新部署它。
如果有效,请评价我。