Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RMI从服务获取数据到WEB应用程序时出错_Java_Jakarta Ee_Spring Mvc_Rmi - Fatal编程技术网

Java 使用RMI从服务获取数据到WEB应用程序时出错

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从服务中获取数据,并获得更高的权限,显然您的客户端看不到您服务

当我试图从我编写的支持hibernate 4的服务中获取任务列表并将其放入支持hibernate 3的web应用程序时,出现了以下异常

java.rmi.UnmarshalException:错误解组返回;嵌套异常是: java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag(无安全管理器:禁用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)