我使用的是EJB 2.x。我有两台机器,它们都在WebSphere 7.0上。在每个应用程序上部署了不同的应用程序。当我尝试从一个应用程序(在机器1上(调用另一个应用软件(在机器2上(的EJB时,我会得到以下错误:
java.rmi.MarshalException:CORBA MARSHAL 0x4942f999否;嵌套的异常为:org.omg.ORBA.MARSHAL:长度为的配置文件数据读取IOR配置文件时0x3f400000 vmcid:IBM次要代码:999已完成:无
有人知道如何解决这个问题吗,因为我几乎陷入了这个问题。谢谢!
编辑:
对于EJB调用,我使用了常见的方法:
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
props.put(Context.PROVIDER_URL, "iiop://remote.host.com:2809");
props.put(Context.SECURITY_PRINCIPAL, "remote_user");
props.put(Context.SECURITY_CREDENTIALS, "remote_pwd");
Context ctx = new InitialContext(props);
Object objRef = ctx.lookup("servicemanagerJndiName");
ServiceManagerHome home = (ServiceManagerHome) PortableRemoteObject.narrow(
objRef, ServiceManagerHome.class);
manager = home.create();
manager.getMethod();...
问题是,这个服务调用在远程服务器上正确地调用了,并且发送了响应,就在客户端,我收到了以下错误:
这是我收到的错误[SoapConnectorThreadPool:5][]errorjava.rmi.MarshalException:CORBA MARSHAL 0x4942f999否;嵌套的异常为:org.omg.ORBA.MARSHAL:长度为的配置文件数据读取IOR配置文件时0x3f400000 vmcid:IBM次要代码:999已完成:不在com.ibm.CORBA.iop.UtilDelegateImpl.mapSystemException(UtilDelegateImpl.java:277(位于com.host.local.manager._ServiceManager_Stub.getMethod(_ServiceManager_Sttub.java(:
我已经成功地解决了这个问题。ServiceManager(远程接口(&ServiceManagerHome(主接口(已被保留,已被内部也包含Stub的jar文件取代。存根是使用com.ibm.websphere.ant.tasks.WsEjbDeployant任务创建的。你的蚂蚁看起来应该是这样的:
<taskdef name="wsejbdeploy" classname="com.ibm.websphere.ant.tasks.WsEjbDeploy>
<classpath refid="your.websphere.classpath"/>
</taskdef>
<target name="packEjbJar">
<jar destfile="pre-deploy-ejb.jar">
<metainf dir="src" includes="ejb-jar.xml" />
<metainf dir="src" includes="ibm-ejb-jar-bnd.xmi" />
<fileset dir="your.build.classes.location">
<include name="com/yourapp/ejb/**/*.*" />
</fileset>
</jar>
<wsejbdeploy inputJar="pre-deploy-ejb.jar"
wasHome="your.websphere.home"
workingDirectory="dist"
outputJar="ejb.jar"
codegen="false"
keepGenerated="false"
quiet="false"
noValidate="true"
noWarnings="false"
noInform="false"
failonerror="true"
trace="true"
classpathref="your.classpath" />
</target>
之后,stub将被打包在ejb.jar中。使用这个新的jar重新部署后,我的应用程序运行良好注意您需要填充ibmejb jar bnd.xmi,以便创建存根。以下是该文件的示例内容:
<ejbbnd:EJBJarBinding xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ejbbnd="ejbbnd.xmi" xmlns:ejb="ejb.xmi" xmi:id="ejb-jar_ID_Bnd">
<ejbJar href="META-INF/ejb-jar.xml#ejb-jar_ID"/>
<ejbBindings xmi:id="Session_ServiceManager_Bnd" jndiName="com.host.local.manager.ServiceManager">
<enterpriseBean xmi:type="ejb:Session" href="META-INF/ejb-jar.xml#Session_ServiceManager"/>
</ejbBindings>
</ejbbnd:EJBJarBinding>
第页。S.此外,要从机器1访问远程bean(在计算机2上(,我需要设置C: \WINDOWS\system32\drivers\etc\hosts文件,并在列表中添加IP和远程名称机器2
希望这些信息对某些人有用。