मैं EJB 2.x का उपयोग कर रहा हूं। मेरे पास 2 मशीनें हैं, दोनों WebSphere 7.0 पर हैं। उनमें से प्रत्येक पर अलग-अलग आवेदन तैनात हैं। जब मैं दूसरे एप्लिकेशन (मशीन 2 पर) के ईजेबी को कॉल करने के लिए एक एप्लिकेशन (मशीन 1 पर) से प्रयास करता हूं, तो मुझे निम्न त्रुटि मिल रही है:

java.rmi.MarshalException: कोरबा मार्शल 0x4942f999 नहीं; नेस्टेड अपवाद है: org.omg.CORBA.MARSHAL: IOR प्रोफ़ाइल पढ़ते समय लंबाई 0x3f400000 का प्रोफ़ाइल डेटा vmcid: IBM लघु कोड: 999 पूर्ण: नहीं

क्या किसी के पास इस समस्या को हल करने का तरीका है, क्योंकि मैं इस मुद्दे पर काफी फंस गया हूं। थैंक्स!

संपादित करें:

ईजेबी कॉल के लिए मैंने सामान्य दृष्टिकोण का उपयोग किया:

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] [] त्रुटि java.rmi.MarshalException: CORBA MARSHAL 0x4942f999 नहीं; नेस्टेड अपवाद है: org.omg.CORBA.MARSHAL: IOR प्रोफ़ाइल पढ़ते समय लंबाई 0x3f400000 का प्रोफ़ाइल डेटा vmcid: IBM लघु कोड: 999 पूर्ण: com.ibm.CORBA.iiop.UtilDelegateImpl.mapSystemException(UtilDelegateImpl.java:277) पर नहीं javax.rmi.CORBA.Util.mapSystemException(Util.java:84) पर com.host.local.manager._ServiceManager_Stub.getMethod(_ServiceManager_Stub.java) पर:

0
Igor 9 अगस्त 2011, 09:43
आप दूसरे सर्वर पर ईजेबी कैसे लागू कर रहे हैं? क्या आप विदेशी सेल बाइंडिंग आदि का उपयोग कर रहे हैं? सेट अप के बारे में विस्तार से बताएं और विस्तृत लॉग प्रदान करें ताकि हम कोशिश कर सकें और आपकी मदद कर सकें। मंगलू
 – 
Manglu
9 अगस्त 2011, 10:35

1 उत्तर

सबसे बढ़िया उत्तर

मैंने समस्या को सफलतापूर्वक हल कर लिया है। बाहरी जार जहां ServiceManager (दूरस्थ इंटरफ़ेस) और ServiceManagerHome (होम इंटरफ़ेस) को रखा गया था, को जार फ़ाइल से बदल दिया गया है जिसमें स्टब्स भी शामिल हैं। स्टब्स com.ibm.websphere.ant.tasks.WsEjbDeploy चींटी कार्य का उपयोग करके बनाए गए थे। आपकी चींटी कुछ इस तरह दिखनी चाहिए:

    <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>

इसके बाद, स्टब्स को ejb.jar में पैक किया जाएगा। इस नए जार के साथ पुन: नियोजित करने के बाद मेरा आवेदन ठीक काम करता है। नोट स्टब्स बनाने के लिए आपको ibm-ejb-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>

पी.एस. साथ ही, मशीन1 से रिमोट बीन्स (मशीन2 पर) तक पहुंचने के लिए मुझे सेट करने की आवश्यकता है C:\WINDOWS\system32\drivers\etc\hosts फ़ाइल, और सूची में IP और रिमोट का नाम जोड़ें मशीन2

आशा है कि यह जानकारी किसी के लिए उपयोगी होने वाली है।

0
Igor 10 अगस्त 2011, 15:24