JavaEE-通过Glassfish资源将EJB连接到Oracle数据库
我是Java和EE的新手。我启动了一个EE项目,该项目应该提供RESTAPI,它将处理远程Oracle数据库中的2个实体。我之所以使用NetBeans,是因为它是在企业Java中完成任何事情的唯一方法(正如我现在看到的) 我所做的:JavaEE-通过Glassfish资源将EJB连接到Oracle数据库,java,oracle,jpa,glassfish,ejb,Java,Oracle,Jpa,Glassfish,Ejb,我是Java和EE的新手。我启动了一个EE项目,该项目应该提供RESTAPI,它将处理远程Oracle数据库中的2个实体。我之所以使用NetBeans,是因为它是在企业Java中完成任何事情的唯一方法(正如我现在看到的) 我所做的: 我在Glassfish中创建了JDBC池(v4.1-13)。我可以成功地ping池。然后,我为池创建了JDBC资源 我为需要处理的两个实体生成了实体类 org.eclipse.persistence.jpa.PersistenceProvider jdbc/db
org.eclipse.persistence.jpa.PersistenceProvider
jdbc/dbs
cz.ctu.bitjv.kopecj24.semestralka.entities.Food
cz.ctu.bitjv.kopecj24.semestralka.entities.User
真的
仔细检查持久化单元和glassfish服务器中的连接池名称。你也可以用实体更新你的问题 我可以看出您从rest服务调用ejb是错误的。您需要使用包路径添加远程接口名称
假设您的包路径为com.rs.www,那么您的查找字符串应如下所示:
service = (FoodServiceInterface) ic.lookup("java:global/semestralka/semestralka-ejb/FoodServiceBean!com.rs.www.FoodServiceInterface");
谢谢。最后,我找到了解决办法。问题出在我的FoodServiceBean上。我试图在EJB构造函数中实例化facade,但EntityManager是在构造函数之后注入的。下面是帮助我解决这个问题的Bean代码
@Stateless
@EJB(beanInterface=FoodServiceInterface.class, name="FoodServiceBean")
public class FoodServiceBean implements FoodServiceInterface {
@PersistenceContext(unitName="testPU")
private EntityManager em;
private FoodFacade facade;
public FoodServiceBean()
{
}
@PostConstruct
public void init() {
this.facade = new FoodFacade(Food.class);
this.facade.setEntityManager(em);
}
请注意,我更改了持久化单元的名称,只是为了确保没有输入错误
感谢您的帮助。“无法获取数据源”。因此,找不到JNDI数据源。所以这不是问题所在。Bean的查找没有问题。