Jakarta ee 在GlassFish 4@Resource注释上使用Wicket的JavaEE 6应用程序失败

Jakarta ee 在GlassFish 4@Resource注释上使用Wicket的JavaEE 6应用程序失败,jakarta-ee,annotations,glassfish,Jakarta Ee,Annotations,Glassfish,这个简单的Wicket页面在GlassFish 3.1.2.2服务器中工作得非常完美,但在GlassFish 4.0中部署时不起作用。 需要注意的是,其他不包含@Resource注释的页面工作得非常好 public class IndexPage extends WebPage { // this EJB injection works as expected @EJB(name = AnyManager.NAME) AnyManager anyMgr; // this JN

这个简单的Wicket页面在GlassFish 3.1.2.2服务器中工作得非常完美,但在GlassFish 4.0中部署时不起作用。 需要注意的是,其他不包含@Resource注释的页面工作得非常好

public class IndexPage extends WebPage {

  // this EJB injection works as expected
  @EJB(name = AnyManager.NAME)
  AnyManager anyMgr;

  // this JNDI Resource is defined as java.util.Properties at JNDI/Custom Resources of GlassFish admin console
  // this resource can be looked up using normal InitialContext.doLookup() method
  @Resource(name = "anyResource")
  Properties config;

  public IndexPage(final PageParameters p) {
    super(p);
  }
}
它给出了以下例外情况:


Last cause: org.apache.wicket.proxy.ILazyInitProxy not found by org.glassfish.hk2.external.cglib [27]
WicketMessage: Can't instantiate page using constructor 'public hu.app.IndexPage(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument ''. An exception has been thrown during construction!
请参阅堆栈跟踪(从IndexPage构造函数的第一行开始):

在做了大量的谷歌搜索之后,我有了一个想法,尝试在我的一个manager bean中进行注入 我为它定义了一个简单的getter。请参见以下几行,了解其外观:

@Local
public interface AnyManager extends EntityManager {
  public static final String NAME = "ejb/AnyManager";
  Properties getConfig();
}

@Stateless(name = AnyManager.NAME)
public class AnyManagerImpl extends AbstractEntityManager implements AnyManager {

  @Resource(name = "iOIRConfig")
  Properties config;

  @Override
  public Properties getConfig() {
    return config;
  }
}
我把我的Wicket页面改成这样:

public class IndexPage extends WebPage {

  @EJB(name = AnyManager.NAME)
  AnyManager anyMgr;

  // so I have commented out
  // @Resource(name = "anyResource")
  Properties config;

  public IndexPage(final PageParameters p) {
    super(p);

    // and get the value from one of my EJB manager class
    config = anyMgr.getConfig();
  }
}
这对我很有用。我不喜欢这种类型的解决方案,我仍然在寻找真正的解释和解决方案。 GlassFish 4中会发生什么变化导致这种现象?我在GlassFish 3中没有这种奇怪的效果

我对GlassFish 3和GlassFish 4都有干净的安装

我的应用程序是一个EAR应用程序,它包含一个EJB.jar、WEBAPP.war和一个带有共享jar的lib/文件夹。 也许这是因为EJB和WebApp位于不同的文件夹中而导致的类加载器问题? 但是为什么@EJB工作而@Resource不工作呢

可能是JavaEE7实现问题,或者是GlassFish4中的简单bug

任何帮助都很好

public class IndexPage extends WebPage {

  @EJB(name = AnyManager.NAME)
  AnyManager anyMgr;

  // so I have commented out
  // @Resource(name = "anyResource")
  Properties config;

  public IndexPage(final PageParameters p) {
    super(p);

    // and get the value from one of my EJB manager class
    config = anyMgr.getConfig();
  }
}