我特別是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數據源沒有找到。所以調試它 –