[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] DB Connections stay open after Entitymanager isclosed
|
Your application uses a jta data source (jdbc/ARGUSDatabase).
In this case Eclipselink always releases connections when the jta
transaction is completed; or (with no jta transaction active) immediately
after the query is executed.
The proxy session is never opened, because Eclipselink can't get hands on
OracleConnection - an attempt to write through the em created with PROXYTYPE
would have resulted in
exception stating that: "OracleJDBC_10_1_0_2ProxyConnectionCustomizer
requires datasource producing OracleConnections."
To make it work you need to implement public java.sql.Connection
unwrapConnection(java.sql.Connection connection) method on
SunAS9ServerPlatform.
----- Original Message -----
From: <martin.berner@xxxxxxxxxxxx>
To: "EclipseLink User Discussions" <eclipselink-users@xxxxxxxxxxx>
Sent: Thursday, January 21, 2010 9:47 AM
Subject: [eclipselink-users] DB Connections stay open after Entitymanager
isclosed
Hello,
I create EntityManager with ProxyUser from EntityManagerFactory at
@PostConstruct on a Service. And close the EntityManager in @PreDestroy.
@PostConstruct
public void postConstruct() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("eclipselink.oracle.proxy-type",
oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
props.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, 'USERNAME');
entityManager = emf.createEntityManager(props);
}
@PreDestroy
public void preDestroy() {
entityManager.clear();
entityManager.close();
entityManager = null;
}
But on the Database the Sessions still exists. With a view work on the
Webserver the DB (or the Pool) are not able to open new connections because
of running out of resources.
How can I force to close a connection by closing the EntityManager?
Or do I have something missconfigured?
Persistence.xml (PersistenceUnite)
----------------------------------
<persistence-unit name="ArgusB_CorePU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/ARGUSDatabase</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.session-name" value="ArgusB_CorePU" />
<property name="eclipselink.cache.type.default" value="Weak" />
<property name="eclipselink.logging.level" value="FINEST"/>
<property name="eclipselink.target-database" value="Oracle10g"/>
<property name="eclipselink.target-server" value="SunAS9"/>
<property name="eclipselink.session.customizer"
value="ch.braunvieh.argus_core.datamgmt.logic.ArgusSessionCustomizer"/>
</properties>
</persistence-unit>
Applicationcontext (Spring configuration)
-----------------------------------------
<context:annotation-config />
<!--<context:load-time-weaver
weaver-class="org.springframework.instrument.classloading.glassfish.GlassFishLoadTimeWeaver"
/>-->
<context:load-time-weaver />
<tx:annotation-driven />
<tx:jta-transaction-manager />
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/ARGUSDatabase" />
<!--<jee:jndi-lookup id="emf" jndi-name="persistence/ArgusB_CorePU"/>-->
<jee:jndi-lookup id="entityManagerFactory"
jndi-name="persistence/ArgusB_CorePU"/>
<!--<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
/>-->
<bean id="jpaAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="databasePlatform"
value="org.eclipse.persistence.platform.database.oracle.OraclePlatform" />
<property name="showSql" value="true" />
</bean>
Service.java
------------
public abstract class SpringEntityService<E> {
protected EntityManager entityManager;
@PersistenceUnit
protected EntityManagerFactory emf;
@PostConstruct
public void postConstruct() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("eclipselink.oracle.proxy-type",
oracle.jdbc.OracleConnection.PROXYTYPE_USER_NAME);
props.put(oracle.jdbc.OracleConnection.PROXY_USER_NAME, 'USERNAME');
entityManager = emf.createEntityManager(props);
}
@PreDestroy
public void preDestroy() {
entityManager.clear();
entityManager.close();
entityManager = null;
}
@Transactional
public E refreshEntity(E entity) {
//entity = entityManager.merge(entity);
entityManager.refresh(entity);
return entity;
}
}
Thanks for any help
Berner Martin
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users