尝试在另一台服务器上调用EJB方法时出现Websphere错误



我使用的是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

希望这些信息对某些人有用。

相关内容

  • 没有找到相关文章

最新更新