Java 使用RMI从服务获取数据到WEB应用程序时出错
当我试图从我编写的支持hibernate 4的服务中获取任务列表并将其放入支持hibernate 3的web应用程序时,出现了以下异常 java.rmi.UnmarshalException:错误解组返回;嵌套异常是: java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag(无安全管理器:禁用RMI类装入器)Java 使用RMI从服务获取数据到WEB应用程序时出错,java,jakarta-ee,spring-mvc,rmi,Java,Jakarta Ee,Spring Mvc,Rmi,当我试图从我编写的支持hibernate 4的服务中获取任务列表并将其放入支持hibernate 3的web应用程序时,出现了以下异常 java.rmi.UnmarshalException:错误解组返回;嵌套异常是: java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag(无安全管理器:禁用RMI类装入器) Web试图通过RMI从服务中获取数据,并获得更高的权限,显然您的客户端看不到您服务
Web试图通过RMI从服务中获取数据,并获得更高的权限,显然您的客户端看不到您服务中的类。实现这一点的方法之一是拥有一个共享的rmi代码库。考虑下面的脚本,将lib文件夹中的所有jar和DIST文件夹中的主jar添加到RMI代码库中,使它们对客户端可见:
#!/bin/bash
lib_path=lib
artefact=name-of-your.jar
for file in $(ls $lib_path); do
lib=$lib:$lib_path/$file
rmicodebase="$rmicodebase file:$PWD/$lib_path/$file"
done
lib=$lib:dist/$artefact:etc
rmicodebase="$rmicodebase file:$PWD/dist/$artefact"
CLASSPATH=classes:etc:$lib
echo CLASSPATH: $CLASSPATH
echo rmicodebase=$rmicodebase
java -Xmx64M -Xms64M -classpath $CLASSPATH -Djava.rmi.server.codebase="$rmicodebase" $*
我假设您在服务器的中央进程中有一个共享rmi注册表。实现类可见性的另一种可能性是在服务器进程中运行单独的rmi注册表:
java.rmi.registry.LocateRegistry.createRegistry(port)
并让您的客户端连接到此注册表
问候
Leon文件:只有当客户端与服务器具有相同的相关文件系统视图时,代码库才起作用。基于HTTP的代码库更为常见。
java.rmi.registry.LocateRegistry.createRegistry(port)