1

我正在尝试使用创建一些beanSpring并将它们导出到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”的文件,我正在使用该参数运行我的虚拟机,但我仍然有这个错误:

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

先感谢您

4

4 回答 4

2

这里的重点不是安装安全管理器,而是查找类。您的部署中缺少一些 JAR 文件。

于 2012-05-23T21:46:28.277 回答
2

我认为它仍然不重要,但我个人今天面临同样的问题,找不到答案。我把它贴在这里,也许它对某人有帮助。

解决方案:停止rmiregistry程序,或rmiregistry使用 -J 选项将 Spring jar 传递给。最简单的方法就是停止 rmiregistry 并允许 Spring 使用所有必需的类启动另一个。并且不要设置RMISecurityManager

于 2014-02-03T11:21:54.100 回答
0

您需要在代码的一部分中包含此内容:

System.setSecurityManager(new RMISecurityManager());

您也可以安装另一个安全管理器,但只需要安装一个安全管理器。

实际上,我发布的行可以很容易地在独立桌面应用程序的主类中触发,但我不确定你的情况。您应该寻找一个可能执行此操作的配置选项。

于 2012-05-23T18:22:04.303 回答
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,只需重新部署它即可。

如果它有效,请评价我。

于 2015-06-26T19:40:23.457 回答