我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。
应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中:
webframework-demo.ear
|__ webframework-war.war -> concrete JSF CDI bean
|__ webframework-ejb-lib.jar -> abstract class with EJB injection
|__ lib\
|__ shared libs
我的抽象类:
public abstract class AbstractListPageAction<T extends AbstractViewBean<K>, K extends Serializable> {
...
@EJB
private CriteriaFacadeLocal<K> facade;
@PostConstruct
public void create() {
...
facade.setEntityClass(getEntityClass());
...
}
...
public abstract Class<K> getEntityClass();
}
我的CDIBean:
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;
@Named
@ViewAccessScoped
public class UserListAction extends AbstractListPageAction<UserViewBean, UserEntity>
implements Serializable {
private static final long serialVersionUID = -1178878323047991855L;
...
@Override
public Class<UserEntity> getEntityClass() {
return UserEntity.class;
}
...
}
当我部署应用程序并访问JSF页面时,会创建UserListAction,但不会注入CriteriaFacadeLocal,并且在@PostConstruct方法中以NullPointerException结束。
当我更改UserListAction并添加一个空的@PostConstruct方法时,CriteriaFacade被注入,一切正常:
@Named
@ViewAccessScoped
public class UserListAction extends AbstractListPageAction<UserViewBean, UserEntity>
implements Serializable {
private static final long serialVersionUID = -1178878323047991855L;
...
@PostConstruct
public void init() {
}
@Override
public Class<UserEntity> getEntityClass() {
return UserEntity.class;
}
...
}
我在每个模块都beans.xml。但是为什么我的CDI bean中必须有一个空的@PostConstruct方法呢?在EJB模块中放置抽象类有问题吗?
我从编辑过的问题中创建了答案:
我认为这可能是EAR/EAR模块类加载器的问题。我将webframework-ejb-lib.jar移到webframework-war.warWEB-INF/lib文件夹:
webframework-demo.ear
|__ webframework-war.war -> concrete JSF CDI bean
| |__ WEB-INF
| |__lib
| |__ webframework-ejb-lib.jar -> abstract class with EJB injection
|__ ... (other ejb modules)
|__ lib\
|__ shared libs
突然间一切都好了。
CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses
问题内容: 我可以将自己的POJO注入到托管对象中,如下所示: 我有这个POJO: 这很好。如果将EJB注入到JSF支持bean中,则可以看到,按预期,该值是非null值。 但是,如果我尝试注入到,我得到部署以下异常: SomeEjb现在: Date有一个公开的,无参数的构造函数,我认为CDI只需“满足依赖性”即可。我确信这种行为是“符合规格”的,但是显然我对CDI的理解还存在很大的漏洞。 有人可
我想让CDI“选择”一个替代类作为接口的实现。 虽然一切都捆绑在EAR中,但是替代实现将在war文件中,其余的(注入接口的类、接口、接口的“默认”实现)将在ejb jar中。 下面是一些代码来说明: EJB 模块: 战争模块: 在战争文件中设置豆子.xml没有帮助。
将遗留项目迁移到雅加达 EE 8(在 Wildly 26 上构建 Maven EAR)我正在努力使依赖项注入从我的实体模块(EJB 打包)工作到 WAR 模块,maven 项目结构是: 该结构是基于Wildfly-jakartaee8-with-tools原型创建的 我要注入的DAO是一个@Stateless豆,它使用@LocalBean无接口例如。 我的 CDI 代码是 WAR 模块中的标准@R
总结一下我失败的项目:我的类与bean一起打包在一个WAR中。xml文件。我的WAR反过来被打包在一个EAR中,这个EAR文件被部署到内部使用Tyrus的GlassFish 4服务器上。 WebSocket规范说: 在JavaEE平台中运行的WebSocketendpoint必须具有CDI规范中描述的完全依赖注入支持。WebSocket实现JavaEE平台的一部分需要支持字段、方法和构造函数注入,
我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!