GlassFish 4.1.1中的EJB查找失败

时间:2016-01-01 12:34:39

标签: java-ee glassfish ejb jndi

我尝试使用jndi查找本地EJB,但失败了

EssaiImpl EJB的save方法由请求范围的托管bean调用。

本地界面是:

@Local
public interface Essai {
    public void save();
}

,实施是:

@Stateless
public class EssaiImpl implements Essai {

    /**
     * Tag des logs
     */
    static private Class<EssaiImpl> logTag = EssaiImpl.class;

    public EssaiImpl() {}

    public void save() {
        try {
            InitialContext context = new InitialContext();
            Essai business = (Essai) context.lookup("java:module/EssaiImpl");
        } catch (Exception ex) {
            Logger.erreur(logTag, "Exception :" + ex.getMessage());
        }
    }
}

(Logger只是一个简单的日志记录封装)

我总是有例外:

[#|2016-01-01T13:16:00.628+0100|INFO|glassfish 4.1||_ThreadID=26;_ThreadName=Thread-8;_TimeMillis=1451650560628;_LevelValue=800;|
  Caller+1       at com.test.EssaiImpl.save(EssaiImpl.java:33)
 - Exception :com.sun.proxy.$Proxy220 cannot be cast to com.test.EssaiImpl|#]

任何帮助都会有所帮助,

2 个答案:

答案 0 :(得分:0)

它适用于GF-4.1,4.1.1和4.1.1网络配置文件 创建了一个包含3个类和1个接口的项目:
RestConfigure:

@ApplicationPath("/resources")
public class RestConfigure extends Application {}

EssaiResource:

@Path("/call")
@javax.enterprise.context.RequestScoped
public class EssaiResource {
    @Inject Essai essai;
    @GET public String callEssai() {
       essai.save();
       return "called essai";
    }
}

和你的Essai界面:

@Local
public interface Essai {
    void save();
}

和EssaiImpl:

@Stateless
public class EssaiImpl implements Essai {
    public void save() {
        try {
            InitialContext context = new InitialContext();
            Essai business = (Essai) context.lookup("java:module/EssaiImpl");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

暂时将记录器更改为ex.printStacktrace()

希望这可以帮助你...

的Ivar

答案 1 :(得分:0)

简答:始终查找界面

错:

Essai business = (Essai) context.lookup("java:module/EssaiImpl");

<强>正确:

Essai business = (Essai) context.lookup("java:module/Essai");