如果在Eclipse Link的persistence.xml中没有定义连接池,那么默认行为是什么?
它会为每个事务打开和关闭一个JDBC连接吗?它会创建一个具有某些默认值的连接池吗?
它会为每个事务打开和关闭一个JDBC连接吗?它会创建一个具有某些默认值的连接池吗?
当不使用数据源时,EclipseLink 的默认连接池是最小/最大为32个连接,初始连接数为1个。因此,每个事务将使用一个池化的连接,而不是连接/断开连接。
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>jdbc_my_DataSource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<properties/>
</persistence-unit>
如果您在没有应用服务器(Java SE)的情况下使用EclipseLink,并且使用应用程序管理的持久性,则如果您不配置池,则会使用内部连接池,例如:
<persistence-unit name="DemoPU" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="javax.persistence.jdbc.user" value="myuser"/>
<property name="javax.persistence.jdbc.password" value="mypassword"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
</properties>
</persistence-unit>
<property name="eclipselink.connection-pool.default.initial" value="1"/>
<property name="eclipselink.connection-pool.default.min" value="64"/>
<property name="eclipselink.connection-pool.default.max" value="64"/>
我想提供James上面回答的代码源:您可以看到在ServerSession的构造函数中创建了一个默认的连接池,使用ConnectionPool中定义的init/min/max默认值,并且开发人员可以通过EntityManagerSetupImpl中的属性进行覆盖/调整。