我有一个Java Web服务模块和ejb模块netbeans(企业应用程序的所有部分)。 Web服务使用@EJB注入消耗ejb类。 在ejb模块中,我有一个TransactionManager类,它不是企业bean。只是一个POJO课程。我正在尝试使用
注入EntityManager @PersistanceContext(unitName = "testPU")
EntityManager em;
但是em总是空的。 我正在通过bean调用TransactionManager类,如果我在bean类中声明了EntityManager声明,它会在bean类中注入。但是在POJO中它始终为空。
我是EJB的新手(使用版本JEE7)。你可以指导我吗?
回复Shailendra: 我的bean和pojo在同一个jar文件中,它有bean.xml和persistence.xml。 我尝试使用@Stateless和@Local将TransactionManager类作为bean,但是在ejb类和TransactionManager类之间有一些pojo类,当我尝试使用它的父pojo类访问TransactionManager类时 @EJB TransactionManager transactionManager; 这个对象也返回null。
亲爱的Shilendra,谢谢你的回复 下面是我的EJB类
@Stateless
@Local(IMyService.class)
public class MyService extends MyBase implements IMyService
{
MyComponent component = null;
public void doSomething(X x)
{
component = new MyComponent();
component.doSomething(x);
}
}
我有一个POJO类作为MyComponent
public class MyComponent extends MyBase implements IMyComponent
{
TransactionManager tManager = null;
public void doSomething(X x)
{
tManager = new TransactionManager();
tManager.doSomething(x);
}
}
并且TransactionManager类是我希望为PersistenceContext完成依赖注入的类
public class TransactionManager extends MyBase implements ITransactionManager
{
@PersistenceContext(unitName="TestPU")
EntityManager em;
public void doSomething(X x)
{
em.persist(x);
}
}
答案 0 :(得分:0)
POJO不受容器管理。而豆子是由容器和管理员管理的。负责注入资源。
您可以尝试JNDI查找来查找容器不负责的非托管自定义类的资源。
答案 1 :(得分:0)
原因是您的POJO不受容器管理。如果您的容器支持CDI(上下文依赖注入),那么在bean存档中声明您的bean(在META-INF或WEB-INF中使用beans.xml)以便进行管理。
答案 2 :(得分:0)
您应该使用 @Inject Annotation 而不是使用 new-operator 创建实例。
创建 \WEB-INF\beans.xml
(在 Netbeans 中有一个向导)并设置
bean-discovery-mode="all"
这是您的“MyService”的代码:您的还是我的? :-)
@Stateless
@Local(IMyService.class)
public class MyService extends MyBase implements IMyService {
@Inject
private MyComponent component;
public void doSomething(X x)
{
component = new MyComponent();
component.doSomething(x);
}
}
这是你的“我的组件”:-)
public class MyComponent extends MyBase implements IMyComponent
{
@Inject
private TransactionManager tManager;
public void doSomething(X x)
{
tManager = new TransactionManager();
tManager.doSomething(x);
}
}