【问题标题】:EJB lookup failed in GlassFish 4.1.1GlassFish 4.1.1 中的 EJB 查找失败
【发布时间】:2016-01-01 12:34:38
【问题描述】:

我尝试使用 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|#]

任何帮助都会有所帮助,

【问题讨论】:

  • 我对stackoverflow流程没把握,但是好像我的问题被机器人拒绝了,是这样吗?
  • 一个消息收件箱提示该问题已被拒绝,但如果不是这样:没问题。
  • 我真的需要答案,我不明白为什么代码无法运行,我尝试使用 jboss 看看这是否是 Glassfish 的问题。
  • 我不确定你的建议是什么,使用 Glassfish 4.0 或 3.X 会更安全吗?
  • 我刚刚尝试了wildfy 9.0.2,它运行没有问题......

标签: jakarta-ee glassfish ejb jndi


【解决方案1】:

它适用于 GF-4.1、4.1.1 和 4.1.1 网络配置文件。
创建了一个具有 3 个类和 1 个接口的项目:
休息配置:

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

Essai 资源:

@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()。

希望这对您有所帮助...

伊瓦尔

【讨论】:

    【解决方案2】:

    简答:始终查找界面。

    错误:

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

    正确:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多