2013-04-08 44 views
0

当我试图从支持休眠4的服务中读取支持休眠3的Web应用程序时,出现以下例外情况:获取数据时出错将服务中的RMI用于WEB应用程序

java.rmi.UnmarshalException:error unmarshalling return;嵌套的例外是: 抛出java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag(无安全管理器:RMI类加载器禁用)

   Services  ------------------>  WEB 
      (Hibernate 4)       (Hibernate 3) 

网站试图通过RMI获得来自服务的数据和得到上述错误时抛出

回答

0

显然你的客户端没有看到你的服务中的类。实现这一目标的方法之一是拥有共享的rmi代码库。考虑以下脚本,将lib文件夹中的所有罐和主罐中,dist文件夹到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) 

,让您的客户端连接到该注册表。

认为 莱昂

+0

文件:如果客户有服务器做相关的文件系统的相同观点的代码库才能正常工作。基于HTTP的代码库更为常见。 – EJP 2013-04-08 09:43:05

+0

@EJP当然,thanx。 – Leon 2013-04-08 20:17:26

相关问题