JPA + Tomcat + JNDI数据源持久化配置
来源:互联网 发布:手机数据为啥自动打开 编辑:程序博客网 时间:2024/06/05 02:09
JPA2.1(EclipseLink 2.5.2) + Tomcat 8.0 + Java 8
一直想在Tomcat环境下配置JPA持久化框架, 配置的过程中遇到了一些问题. 总的来讲是自己基础不够扎实,如果对JAVA EE技术框架足够深入的话, 看到报错信息一般就能定位问题了, 对于新手来说可能有很长的一段路要走. 为了便于之后的工作,也顺便和大家分享下自己的经历少走一些弯路.
这是EclipseLink的官方配置
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial
参照里面的步骤基本可以实现JPA的配置, 但是总体感觉里面有冗余的配置, 其实并不需要(或许是我理解没到位, 等以后熟悉了再补充)
以下是我觉得官方文档里可以改动的地方
1. JNDI配置
1.1 configure a new global resource in conf/server.xml
1.2 configure a datasource context for the WAR in conf/server.xml
其实只需要把Resource内容加入conf/context.xml, 其它步骤暂时可以忽略不计, 配置完成后可以用JSP页面测试JNDI
Tomcat官网配置: MySQL配置连接举例
2. 项目中关联JNDI和JPA 持久化单元
2.1. persistence-context-ref in web.xml
目前在实际测试中发现并不是必须的
2.2 resource-ref in web.xml
<resource-ref> <description>DB Connection</description> <res-ref-name>JNDI_NAME</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
如果在JSP页面中用sql语句访问, 直接访问JND即可, 在java代码中必须要在web.xml做关联或者加入@Resource(name="JNDI")注解
3. JPA配置文件Persistence.xml配置
3.1 如果JDBC直连, 不使用JNDI可以忽略以上1, 2步骤, <jta-data-source>属性可以不用配置(不是很建议, 这样每个工程都需要配置数据源).
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> <property name="javax.persistence.jdbc.user" value="ttocs"/> <property name="javax.persistence.jdbc.password" value="password"/>3.2 配置JNDI数据源
标准JNDI CONTEXT是:java;/comp/env
java;/comp/env/JNDI_NAME
<non-jta-data-source>java:comp/env/playDS</non-jta-data-source>
根据以上步骤可以实现JPA EntityManager访问Persistence.xml中配置的Persistent Unit
配置实例:
1. conf/context.xml
<Resource name="playDS" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root"
password="Aa12345" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/play" />
maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root"
password="Aa12345" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/play" />
2. JPA配置文件Persistence.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="playPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/playDS</non-jta-data-source>
<!-- 类似Galssfish等支持EJB的容器, 通过persistentContext等注解可以直接使用JNDI数据源 -->
<!-- <non-jta-data-source>playDS</non-jta-data-source> -->
<class>play.entities.BasicUser</class>
</persistence-unit>
</persistence>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="playPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/playDS</non-jta-data-source>
<!-- 类似Galssfish等支持EJB的容器, 通过persistentContext等注解可以直接使用JNDI数据源 -->
<!-- <non-jta-data-source>playDS</non-jta-data-source> -->
<class>play.entities.BasicUser</class>
</persistence-unit>
</persistence>
3. JavaBean代码
@Resource(name="playDS") // 或者在web.xml中配置JNDI数据源关联, 参照上面2.2段落
public void saveBasicUser() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("playPU");
EntityManager manager = factory.createEntityManager();
EntityTransaction tran = manager.getTransaction();
tran.begin();
BasicUser ower = new BasicUser();
ower.setPassword("exigen");
ower.setUserName("wpeng_8g");
manager.persist(ower);
tran.commit();
}
public void saveBasicUser() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("playPU");
EntityManager manager = factory.createEntityManager();
EntityTransaction tran = manager.getTransaction();
tran.begin();
BasicUser ower = new BasicUser();
ower.setPassword("exigen");
ower.setUserName("wpeng_8g");
manager.persist(ower);
tran.commit();
}
0 0
- JPA + Tomcat + JNDI数据源持久化配置
- tomcat JNDI数据源配置
- Tomcat 配置JNDI 数据源
- tomcat JNDI数据源配置
- Tomcat配置JNDI数据源
- tomcat JNDI配置数据源
- Tomcat配置JNDI数据源
- Tomcat配置JNDI数据源
- tomcat配置JNDI数据源
- Tomcat配置JNDI数据源
- Tomcat配置JNDI数据源
- tomcat配置jndi数据源
- Tomcat配置JNDI数据源
- Tomcat配置JNDI数据源
- Tomcat配置JNDI数据源
- tomcat 配置JNDI 数据源
- tomcat配置JNDI数据源
- 配置Tomcat JNDI数据源
- swift 使用 AFHTTPRequestOperationManager
- 单选框 多选框取值
- SinaStockInfo
- cocos2d-x游戏开发(十五)游戏加载动画loading界面
- 面向对象的内存分配
- JPA + Tomcat + JNDI数据源持久化配置
- Windows下让Apache与IIS共用80端口使支持ASP
- LightOJ 1422 Halloween Costumes (区间DP)
- 自已实现一个UI库-UI核心绘图层管理
- cocos2d-x游戏开发(十六)帧动画
- 智能储物柜/快递柜系统解析<一>
- Java高级个人笔记(java常用集合总结)
- UVA - 1153 Keep the Customer Satisfied
- Activity栈+单例模式