Jakarta ee 在GlassFish 4@Resource注释上使用Wicket的JavaEE 6应用程序失败
这个简单的Wicket页面在GlassFish 3.1.2.2服务器中工作得非常完美,但在GlassFish 4.0中部署时不起作用。 需要注意的是,其他不包含@Resource注释的页面工作得非常好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
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();
}
}