سؤال

وأنا أتابع الكتاب MasteringEJB4thEdition التي قمت بتنزيلها من الموقع ملقم الموقع.

وهناك مثال بسيط من HelloBean، الذي يعمل تماما مع خادم التطبيق GlassFish V3. على سبيل المثال نفسه عند نشرها على جبوس فشل بسبب اسم JNDI البحث.

هل هناك أي قاعدة كيفية قرر أسماء JNDI البحث في جبوس إذا كنا لا تقدم أي؟ لقد وجدت في حين غوغلينغ أنه "الأذن ملف اسم / فول الدرجة اسم / عن بعد" ولكنه لا يعمل بالنسبة لي.

وهنا هو الفول


   1. package com.hardik.stateless;  
   2. import javax.ejb.Stateless;  
   3. import javax.ejb.Remote  
   4.   
   5.   
   6.   
   7.   
   8. @Stateless  
   9. @Remote(Hello.class)  
  10. public class HelloBean implements Hello {  
  11.   
  12.     public String hello() {  
  13.         System.out.println("hello()");  
  14.         return "Hello, World!";  
  15.     }  
  16.   
  17. }  

وهنا هو العميل الذي أستخدمه:


   1. package com.hardik.stateless;  
   2.   
   3. import javax.naming.Context;  
   4. import javax.naming.InitialContext;  
   5.   
   6.   
   7. /** 
   8.  * This is an example of client code which invokes  
   9.  * methods on a simple, remote stateless session bean 
  10.  * @author hardik 
  11.  * 
  12.  */  
  13. public class HelloClient {  
  14.       
  15.     public static void main(String[] args) throws Exception {  
  16.           
  17.         Context ctx = new InitialContext();  
  18.         // works for Glassfish  
  19.         //Hello hello = (Hello) ctx.lookup("com.hardik.stateless.Hello");  
  20.         // doesn't  work for JBOSS  
  21.         Hello hello = (Hello) ctx.lookup("hello-bean/HelloBean/remote");  
  22.           
  23.         System.out.println(hello.hello());  
  24.     }  
  25.   
  26. }  

وهنا الخطأ أحصل أثناء تنفيذ العميل


# $ wsrunclient.sh -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=jnp://localhost:1099  -cp "lib/hello-bean.jar:dist/hello-client.jar:/home/hardik/apps/jboss/client/*"  com.hardik.stateless.HelloClient  
# log4j:WARN No appenders could be found for logger (org.jnp.interfaces.TimedSocketFactory).  
# log4j:WARN Please initialize the log4j system properly.  
# Exception in thread "main" javax.naming.NameNotFoundException: hello-bean not bound  
#         at org.jnp.server.NamingServer.getBinding(NamingServer.java:771)  
#         at org.jnp.server.NamingServer.getBinding(NamingServer.java:779)  
#         at org.jnp.server.NamingServer.getObject(NamingServer.java:785)  
#         at org.jnp.server.NamingServer.lookup(NamingServer.java:396)  
#         at sun.reflect.GeneratedMethodAccessor260.invoke(Unknown Source)  
#         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
#         at java.lang.reflect.Method.invoke(Method.java:597)  
#         at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)  
#         at sun.rmi.transport.Transport$1.run(Transport.java:159)  
#         at java.security.AccessController.doPrivileged(Native Method)  
#         at sun.rmi.transport.Transport.serviceCall(Transport.java:155)  
#         at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)  
#         at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)  
#         at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)  
#         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)  
#         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)  
#         at java.lang.Thread.run(Thread.java:619)  
#         at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)  
#         at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)  
#         at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)  
#         at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)  
#         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:722)  
#         at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)  
#         at javax.naming.InitialContext.lookup(InitialContext.java:392)  
#         at com.hardik.stateless.HelloClient.main(Unknown Source)
هل كانت مفيدة؟

المحلول

وأنا ثابت المشكلة بعد البحث. كان لي أن أضيف المعلومات مساحة الاسم إلى ملفي المنظمة بتبني-jar.xml.

ولقد غيرت من:

<ejb-jar> 
    <enterprise-beans>
    </enterprise-beans> 
</ejb-jar>

إلى:

   1. <?xml version="1.0" encoding="UTF-8"?>  
   2. <ejb-jar version="3.0"   
   3.     xmlns="http://java.sun.com/xml/ns/javaee"  
   4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
   5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
   6.     http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">  
   7. </ejb-jar>  

ولقد وجدت الجواب هنا: http://www.jboss.org/index.html؟module= ب & المرجع = viewtopic ور = 157022

نصائح أخرى

وأعتقد يجب أن تكون إضافة بعد Properties في Client/log4j.properties:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p
%c{1}:%L - %m%n
log4j.rootLogger=INFO, stdout

وأنا لست متأكدا من جبوس 5، ولكن في ظل جبوس 4، وحدة JMX ديه يسمى MBean JNDIView، التي لديها عمليات تفريغ شجرة JNDI كامل إلى وحدة التحكم. إذا كان هذا لا يزال هناك في جبوس 5، يجب أن تكون قادرة على العثور على EJB بك هناك.

وراجعت عرض JNDI مع وحدة جمك، يتم تسجيل الفول فقط داخليا، وليس في JNDI العالمية. أرى الرسالة التالية في وقت نشر ...


12:15:44,016 INFO  [JBossASKernel] Added bean(jboss.j2ee:ear=hello-bean.ear,jar=hello-bean.jar,name=HelloBean,service=EJB3) to KernelDeployment of: hello-bean.jar
12:15:44,048 INFO  [SessionSpecContainer] Starting jboss.j2ee:ear=hello-bean.ear,jar=hello-bean.jar,name=HelloBean,service=EJB3
12:15:44,048 INFO  [EJBContainer] STARTED EJB: com.hardik.mejb.HelloBean ejbName: HelloBean
12:15:44,048 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:


12:15:44,078 WARN  [WebServiceDeployerEJB] Ingore ejb deployment with null classname: org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData@bebe0782{HelloBean}

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