簡體   English   中英

遠程業務接口的ejb ref解析錯誤-Glassfish

[英]ejb ref resolution error for remote business interface - Glassfish

我正在嘗試實現EJB模塊,但是當客戶端應用程序嘗試檢索接口對象時,出現錯誤。 客戶端應用程序具有與EJB模塊相同的接口文件,但位於其各自的本地包中。 我認為錯誤是在服務器端。 我復制了本教程中的示例,但使用的是glassfish服務器。 本教程中介紹的簡單EJB可以很好地工作,但是當我嘗試應用相同的理論來實現更復雜的EJB時,它將無法工作。 當然,我做錯了什么,但是關於此錯誤的信息不多,我真的迷路了。

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

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

}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM