JavaEE-通过Glassfish资源将EJB连接到Oracle数据库

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

我是Java和EE的新手。我启动了一个EE项目,该项目应该提供RESTAPI,它将处理远程Oracle数据库中的2个实体。我之所以使用NetBeans,是因为它是在企业Java中完成任何事情的唯一方法(正如我现在看到的)

我所做的:

  • 我在Glassfish中创建了JDBC池(v4.1-13)。我可以成功地ping池。然后,我为池创建了JDBC资源
  • 我为需要处理的两个实体生成了实体类
  • 
    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的查找没有问题。