我特别是Java和EE的新手。我开始了一个应该提供REST API的EE项目,它将处理远程Oracle数据库中的两个实体。我使用的是NetBeans,因为它是如何在Enterprise Java中完成任何事情的唯一方法(就像我现在看到的那样)。Java EE - 通过Glassfish资源将EJB连接到Oracle数据库
我所做的:
- 我Glassfish的(v4.1-13)创建JDBC池。我可以成功地ping通池。然后我为该池创建了JDBC资源。
- 我为我需要处理的两个实体生成实体类。
<persistence version="2.1" xmlns...>
<persistence-unit name="semestralka-ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/dbs</jta-data-source>
<class>cz.ctu.bitjv.kopecj24.semestralka.entities.Food</class>
<class>cz.ctu.bitjv.kopecj24.semestralka.entities.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-database" value="Oracle"/>
</properties>
</persistence-unit>
</persistence>
- 我有一个无状态EJB它调用这样的实体管理器:
然后,有一个REST服务类应该列出数据库中的实体。
@Path( “食物”) 公共类FoodResource {
@Context private UriInfo context; private FoodServiceInterface service; /** * Creates a new instance of FoodResource */ public FoodResource() { try { InitialContext ic = new InitialContext(); service = (FoodServiceInterface) ic.lookup("java:global/semestralka/semestralka-ejb/FoodServiceBean"); } catch (NamingException ex) {...} } @GET @Produces(MediaType.TEXT_PLAIN) @Path("list") public String getAll() { List<Food> foods = service.listAllFood(); ... }
}
public FoodServiceBean()
{
this.facade = new FoodFacade(Food.class);
this.facade.setEntityManager(Persistence.createEntityManagerFactory("semestralka-ejbPU").createEntityManager());
}
不幸的是,有一次我要求GETALL操作(访问本地主机:8080/semestralka战/ WR/food/list)我得到这个例外:
Warning: StandardWrapperValve[cz.ctu.bitjv.kopecj24.semestralka.rest.ApplicationConfig]: Servlet.service() for servlet cz.ctu.bitjv.kopecj24.semestralka.rest.ApplicationConfig threw exception
javax.naming.NameNotFoundException: dbs not found
“无法获取数据源”。所以你的JNDI数据源没有找到。所以调试它 –