2017-08-25 90 views
0

爲了實現一個EJB模塊,但當客戶端應用程序嘗試檢索接口對象時,我正在嘗試執行錯誤。客戶端應用程序具有與EJB模塊相同的接口文件,但在其各自的本地程序包中。我認爲這個錯誤是在服務器端。我複製了this tutorial的示例,但使用了glassfish服務器;本教程中解釋的簡單EJB工作正常,但是當我嘗試應用相同的理論來實現更復雜的EJB時,它不起作用。當然,我做錯了什麼,但沒有太多關於這個錯誤的信息,我真的很失落。遠程業務接口的ejb ref分辨率錯誤 - Glassfish

這是從客戶端應用程序的錯誤

javax.naming.NamingException: Lookup failed for 'java:global/ManagementUtils/UsuarioService' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacecom.management.persistence.interfaces.service.UsuarioServiceRemote [Root exception is java.lang.ClassNotFoundException: com.management.persistence.interfaces.service.UsuarioServiceRemote]] 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491) 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) 
     at javax.naming.InitialContext.lookup(InitialContext.java:417) 
     at com.management.test.MainClass.main(MainClass.java:12) 
    Caused by: javax.naming.NamingException: ejb ref resolution error for remote business interfacecom.management.persistence.interfaces.service.UsuarioServiceRemote [Root exception is java.lang.ClassNotFoundException: com.management.persistence.interfaces.service.UsuarioServiceRemote] 
     at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:433) 
     at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:75) 
     at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) 
     at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:527) 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:487) 
     ... 3 more 
    Caused by: java.lang.ClassNotFoundException: com.management.persistence.interfaces.service.UsuarioServiceRemote 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at com.sun.ejb.EJBUtils.getBusinessIntfClassLoader(EJBUtils.java:685) 
     at com.sun.ejb.EJBUtils.loadGeneratedRemoteBusinessClasses(EJBUtils.java:462) 
     at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:413) 
     ... 7 more 

這是EJB模塊中EJB UsuarioService

package com.management.persistence.service; 

import com.management.persistence.interfaces.service.UsuarioServiceRemote; 
import com.management.persistence.dao.UsuarioDao; 
import com.management.persistence.model.Usuario; 
import com.management.persistence.facades.ServiceFacade; 
import javax.ejb.Remote; 
import javax.ejb.Stateless; 
import org.springframework.beans.factory.annotation.Autowired; 


@Stateless 
@Remote(UsuarioServiceRemote.class) 
public class UsuarioService extends ServiceFacade implements UsuarioServiceRemote { 

    @Autowired 
    private UsuarioDao usuariosDao; 

    public UsuarioService() { 
    } 

    public UsuarioService(UsuarioDao usuariosDao) { 
     super(usuariosDao); 
     this.usuariosDao = usuariosDao; 
    } 

    @Override 
    public UsuarioDao getUsuariosDao() { 
     return usuariosDao; 
    } 

    @Override 
    public Usuario findByUsuarioAndContrasena(String login, String contrasena) { 
     validateSession(); 
     Usuario usuario = usuariosDao.findByUsuarioAndContrasena(login, contrasena); 
     closeCurrentSession(); 
     return usuario; 
    } 

} 

這是EJB模塊接口UsuarioServiceRemote

package com.management.persistence.interfaces.service; 

import com.management.persistence.interfaces.ServiceFacadeRemote; 
import com.management.persistence.interfaces.dao.UsuarioDaoRemote; 
import com.management.persistence.model.Usuario; 


public interface UsuarioServiceRemote extends ServiceFacadeRemote { 

    public UsuarioDaoRemote getUsuariosDao(); 

    public Usuario findByUsuarioAndContrasena(String login, String contrasena); 

} 
+1

你是什麼意思的「客戶端應用程序具有相同的接口文件比EJB模塊,但在其各自的本地包」?客戶端使用的'UsuarioServiceRemote'接口必須與服務器使用的接口相同,包括它的包名稱。 –

回答

0

謝謝@SteveC是的,實際上,我的錯誤是程序包名稱,它在客戶端應用程序中與在服務器中不同,因此在客戶端應用程序中,我重命名了業務接口的程序包,對於實體類,之後一切運作良好。