2013-02-24 4 views
4

Я тестирую EJB-клиент на сервере JBOSS 7.1.1. Код службы EJB также находится на той же виртуальной машине. Он выдает ошибку «java.lang.ClassNotFoundException: com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote» во время выполнения. Кажется, все правильно в настройке клиента, но я не мог понять, что проблема. Пожалуйста, дайте мне знать, где я делаю неправильно.Удаленный поиск EJB не работает с javax.naming.NameNotFoundException

стороне сервера Код

@Stateless(name = "WhiteBoardService") 
@Local(IWhiteBoardService.class) 
@Remote(IWhiteBoardServiceRemote.class) 
public class WhiteBoardService implements IWhiteBoardService { 

    private WhiteBoardPersistenceImpl whiteBoardPersistenceImpl = WhiteBoardPersistenceImpl 
      .getInstance(); 
    private CoursePersistenceImpl coursePersistenceImpl = CoursePersistenceImpl 
      .getInstance(); 

    @Override 
    public LongKeyValue[] getWhiteBoardContent(long courseSessionGuid, UserSession userSession) { 
     // returns the attachment Guid and the Attachment Title 
     return whiteBoardPersistenceImpl.getAttachmentForWhiteBoard(courseSessionGuid, userSession) ; 
    }...... 

Локальный интерфейс

@Local 
public interface IWhiteBoardService { 

    public WhiteBoardSessionVO openWhiteBoard(long courseSessionGuid, UserSession userSession); 
    public WhiteBoardSessionVO joinWhiteBoard(long courseSessionGuid,UserSession userSession); 
    public LongKeyValue[] getWhiteBoardContent(long courseSessionGuid, UserSession userSession); 
} 

Удаленный интерфейс

public interface IWhiteBoardServiceRemote extends IWhiteBoardService{ 


} 

EJB уже Развернутые

20:42:32,278 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-3) JNDI bindings for session bean named WhiteBoardService in deployment unit subdeployment "emyed-ejb-1.0.jar" of deployment "emyed-ear.ear" are as follows: 

    java:global/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 
    java:app/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 
    java:module/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 
    java:jboss/exported/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 
    java:global/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardService 
    java:app/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardService 
    java:module/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardService 

Client Class

public class WhiteboardService { 

    public static void main(String[] args){ 

     Context context=null; 
      try 
      { 
        Properties props = new Properties(); 
        props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
        props.put(Context.PROVIDER_URL, "remote://localhost:4447"); 
        props.put(Context.SECURITY_PRINCIPAL, "ejbremote"); 
        props.put(Context.SECURITY_CREDENTIALS, "remote4u"); 
        context = new InitialContext(props); 
       System.out.println("\n\tGot initial Context: "+context); 
      } 
      catch (Exception e) 
      { 
        e.printStackTrace(); 
       } 

      // Lookup Format will be 
      // <app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface> 

      IWhiteBoardServiceRemote whiteboardService = null; 
     try { 
      Object obj = context.lookup("java:jboss/exported/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote"); 
     } catch (NamingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      System.out.println("\n\t (\"MiddlewareMagic\") = "+ whiteboardService.getWhiteBoardContent(1, null)); 

    } 

Console Log

02:13:45,303 INFO xnio:63 - XNIO Version 3.0.3.GA 
02:13:45,355 INFO nio:55 - XNIO NIO Implementation Version 3.0.3.GA 
02:13:45,469 INFO remoting:70 - JBoss Remoting version 3.2.3.GA 

    Got initial Context: [email protected] 
javax.naming.NameNotFoundException: jboss/exported/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote -- service jboss.naming.context.java.jboss.exported.jboss.exported.emyed-ear."emyed-ejb-1.0"."WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote" 
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97) 
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178) 
    at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:127) 
    at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:73) 
    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:662) 
Exception in thread "main" java.lang.NoClassDefFoundError: com/zreflect/emyed/ejb/interfaces/IWhiteBoardServiceRemote 
    at com.zreflect.emyed.whiteboard.service.WhiteboardService.main(WhiteboardService.java:47) 
Caused by: java.lang.ClassNotFoundException: com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 1 more 

ответ

2

Ваш StackTrace предполагает, что исключение на стороне клиента. Это может произойти, потому что у вас нет определения класса com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote в client's classpath.

Возможно, вам придется обратиться к Class loading in AS7. Мне нужно будет увидеть, как вы упаковываете свое приложение, чтобы помочь дальше.

+0

Согласитесь, если выбрано «ClassNotFoundException: {interface}», возникает проблема при загрузке классов - jj-клиент должен быть в зависимостях клиента. Если вы используете maven: https://maven.apache.org/plugins /maven-ejb-plugin/examples/ejb-client-dependency.html – Honza

4

Вы пробовали портативное имя JNDI:

java:global/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 

вместо

java:jboss/exported/emyed-ear/emyed-ejb-1.0/WhiteBoardService!com.zreflect.emyed.ejb.interfaces.IWhiteBoardServiceRemote 

?

Смежные вопросы