تصادم حبة مؤسسة عن بُعد داخل فئة جافا بسيطة

StackOverflow https://stackoverflow.com/questions/1620803

  •  06-07-2019
  •  | 
  •  

سؤال

ها هو صف جافا الخاص بي

import endpoint.NewSessionRemote;
import javax.naming.Context;
import javax.naming.InitialContext;

public class HelloClient {

    public static void main(String[] args) {
        try {
            Context ctx = new InitialContext();
            NewSessionRemote hello = (NewSessionRemote) ctx.lookup("endpoint.NewSessionRemote");
            System.out.println(hello.stringChange(4));
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

عندما أقوم بتشغيل هذا الفصل ، أحصل على استثناء.

    javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found
        at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
        at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
        at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
        at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
java.lang.NullPointerException

تتم كتابة جميع فئات الفاصوليا الأخرى وفقًا لمعايير EJB 3.0. من المتوقع مساهمتك القيمة.

المحلول

كان الاستثناء

javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found

يحدث ذلك لأن اسم JNDI الذي أعطى من جانب التطبيق لا يتطابق مع اسم JNDI الفعلي لـ Servser (Glassfish) ، لذلك فعلت ذلك Jndi ل NewsessionRemote الواجهة (وهي واجهة أعمال حبة الجلسة NewsessionBean) يختلف عن الاسم الذي أعطيته في جانب التطبيق. فكيف حدث هذا ، فجأة ظهر شيء ما في ذهني هذا هو EJB-Jar.xml هناك اسم آخر اسم Jndi مخصص لنفسه NewsessionRemote باستخدام العلامة. لذلك أنا ببساطة إزالته وإعادة النمط EJB. هذا هو.

هل كانت مفيدة؟

المحلول

عند استخدام JNDI ، فأنت تستخدم واجهة برمجة تطبيقات تتطلب تكوينًا محددًا من أجل الاتصال بالخادم (انظر جافادوك للحصول على تفاصيل حول ماهية هذا التكوين). فمثلا، java.naming.factory.initial هو الخاصية التي تشير إلى تنفيذ JNDI الذي تريد استخدامه.

الآن ، عند تشغيل التعليمات البرمجية داخل خادم Javaee ، يتوفر هذا التكوين ضمنيًا ، وكل ما عليك فعله هو ما قمت به في الكود - InitialContext, ، وأداء بحث. ومع ذلك ، عند التشغيل خارج الخادم ، فإن هذا التكوين الضمني غير موجود ، وبالتالي تحتاج إلى تكوين الخاص بك InitialContext صراحة.

يستخدم رمز العينة الخاص بك main() الطريقة ، التي تشير إلى أنك تعمل خارج الحاوية. سيعتمد التكوين الذي تحتاجه على خادم التطبيق المحدد ، ستحتاج إلى البحث عن هذه الوثائق لمعرفة ما الذي سيتم توفيره.

نصائح أخرى

يبدو أنه ليس لديك سجل RMI (أي خادم نشط) أنت lookingUp() ضد.

لقد قدمت لا Context.INITIAL_CONTEXT_FACTORY متغير ، لذلك يجب أن يكون البحث عن عنوان URL صالح ، وهو ليس كذلك.

وبالتالي ، يجب أن تضع شيئًا كهذا على env (على ال iCtx):

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");

أقترح عليك قراءة الأمثلة البسيطة في http://java.sun.com/j2se/1.5.0/docs/guide/jndi/jndi-rmi.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top