Jakarta ee EntityManager在ejb容器中的Pojo类内为null
我在netbeans中有一个javaweb服务模块和ejb模块(都是企业应用程序的一部分)。web服务正在使用@ejb注入使用ejb类。 在ejb模块内部,我有一个TransactionManager类,它不是企业bean。只是一堂POJO课。我正在尝试使用Jakarta ee EntityManager在ejb容器中的Pojo类内为null,jakarta-ee,jpa,ejb,entitymanager,Jakarta Ee,Jpa,Ejb,Entitymanager,我在netbeans中有一个javaweb服务模块和ejb模块(都是企业应用程序的一部分)。web服务正在使用@ejb注入使用ejb类。 在ejb模块内部,我有一个TransactionManager类,它不是企业bean。只是一堂POJO课。我正在尝试使用 @PersistanceContext(unitName = "testPU") EntityManager em; 但是em总是空的。 我通过bean从调用TransactionManager类,如果我在bean类中声明
@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);
}
}
POJO不由容器管理。而bean由容器管理&负责注入资源
您可以尝试JNDI查找来查找容器不负责的非托管自定义类的资源。原因是您的POJO不受容器管理。如果您的容器支持CDI(上下文依赖注入),则在bean存档中声明您的bean(在META-INF或WEB-INF中具有beans.xml)以便进行管理。您应该使用@Inject注释,而不是使用新操作符创建实例
\WEB-INF\beans.xml
(Netbeans中有一个向导)并设置
bean发现模式=“全部”
嗨,你能给我一个电话吗sample@vilsad我不太喜欢CDI,你可以试试
@injectentitymanager
看看它是否有效。你能发布相关的类结构吗?我发布了关于这个问题的tge相关代码,在搜索时,我得到了一个谣言,说这个问题是GlassFish特有的(一些搜索指向这个方向)。但我无法用另一台服务器测试它,因为我找不到与JEE7兼容的服务器(Tomcat/JBoss)。我试图通过在类顶部声明中添加(at)无状态,在接口顶部声明中添加(at)本地,使TransactionManager类成为bean。然后通过注入(at)PersistenceUnit获得EntityManagerFactory。但这也返回了null;请你接受这个答案好吗?只需单击答案旁边的灰色复选标记。
@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);
}
}