我在TomEE1.7.2上创建了一个JSF Web应用程序(通过tomcat7,javaEE6)。 我有JDBC到mysql5.6.23连接设置,如下所示, 它工作得很好,只有几个小时。
我的数据访问超类:
public class BaseDao {
@javax.ejb.EJB
MyEnvironmentService env;
@javax.persistence.PersistenceContext(unitName = "persistence-unit-stg")
protected javax.persistence.EntityManager em_stg;
@javax.persistence.PersistenceContext(unitName = "persistence-unit-prd")
protected javax.persistence.EntityManager em_prd;
protected javax.persistence.EntityManager em;
@javax.annotation.PostConstruct
private void init(){
switch (env.getName()){
case "stg":
em = em_stg;
break;
case "prd":
em = em_prd;
break;
default:
throw new RuntimeException("Oh no!");
}
}
}
我的数据访问类:
@javax.ejb.Stateless
public class MyDao extends BaseDao{
public MyEntity find(Object id) {
return em.find(MyEntity.class, id);
}
}
我的META-INF / persistence.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistence-unit-stg" transaction-type="JTA">
<jta-data-source>mysql-jdbc-jta-resource-stg</jta-data-source>
</persistence-unit>
<!-- almost same persistence-unit for prd -->
</persistence>
我的WEB-INF / resource.xml:
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<Resource id="mysql-jdbc-jta-resource-stg" type="javax.sql.DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://db-stg.bar.someRegion.rds.amazonaws.com/someDBname
UserName username
password password
jtaManaged true
</Resource>
<!-- almost same Resource for prd -->
</resources>
我有两个问题需要解决:
1。 当我在暂存环境中启动我的Web应用程序时,请保留它,并使用mysql&#34; wait_timeout&#34;来了,我的网络应用程序
javax.transaction.RollbackException: Transaction is marked for rollback
并且永远不能再次重新连接到mysql。 我已经尝试了一些JDBC autoreconnect = true或autoreconnectForPool = true 事情,也没有用,我觉得这不是最好的事情,首先(功能已被弃用?)。
2。 当我启动我的网络应用程序时,我看到3个连接到mysql, 每次,似乎只使用1个连接并延长其超时, 但其他2个从未在&#34; wait_timeout&#34;中使用和杀死。 我试过&#34; initialSize 10&#34;,它有15个连接, 而且,只使用了1个连接。
我猜他们有一个非常简单的解决方案, 因为它说:
Internally, from TomEE 1.5.0, JDBC pools are managed via Tomcat-pool.
在此页面http://tomee.apache.org/common-datasource-configurations.html
是的,我确实想要使用这个Tomcat JDBC池(或者替代方案很好。),它似乎没有启用。 可能是我错过了一些xml设置或jar或者其他什么,但我不知道。 请帮帮我。