You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by rw...@apache.org on 2009/02/26 18:54:14 UTC

svn commit: r748234 - in /portals/jetspeed-2/portal/branches/JPA_BRANCH: ./ components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/ components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/ components/jetsp...

Author: rwatler
Date: Thu Feb 26 17:54:14 2009
New Revision: 748234

URL: http://svn.apache.org/viewvc?rev=748234&view=rev
Log:
- fixed DB connection pool leak with Atomikos upgrade to 3.5.2
- added simple connection pool diagnostic access to datasource components
- returned mutable lists of names from JPA persistence managers, (JPA query results lists are immutable)
- cleaned up JPA persistence context entity manager management to explicitly close entity managers on terminate


Modified:
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/CapabilitiesManagerContext.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/DatabasePageManagerContext.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/profiler/jpa/ProfilerManagerContext.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/AtomikosXADatasourceComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DBCPDatasourceComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DatasourceComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/jndi/JetspeedTestJNDIComponent.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/jpa/RegistryManagerContext.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/SecurityManagerContext.java
    portals/jetspeed-2/portal/branches/JPA_BRANCH/pom.xml

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/CapabilitiesManagerContext.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/CapabilitiesManagerContext.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/CapabilitiesManagerContext.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-capability/src/main/java/org/apache/jetspeed/capabilities/jpa/CapabilitiesManagerContext.java Thu Feb 26 17:54:14 2009
@@ -20,6 +20,8 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContextType;
 
+import org.springframework.orm.jpa.EntityManagerProxy;
+
 /**
  * CapabilitiesManagerContext
  * 
@@ -78,5 +80,12 @@
     public void terminate()
     {
         capabilitiesManager.unregisterContext(this);
+        // explicitly close Spring container managed extended entity
+        // managers which are not closed on bean destruction
+        if (extendedEntityManager instanceof EntityManagerProxy)
+        {
+            ((EntityManagerProxy)extendedEntityManager).getTargetEntityManager().close();
+        }
+        extendedEntityManager = null;
     }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/DatabasePageManagerContext.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/DatabasePageManagerContext.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/DatabasePageManagerContext.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/jpa/DatabasePageManagerContext.java Thu Feb 26 17:54:14 2009
@@ -20,6 +20,8 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContextType;
 
+import org.springframework.orm.jpa.EntityManagerProxy;
+
 /**
  * DatabasePageManagerContext
  * 
@@ -78,5 +80,12 @@
     public void terminate()
     {
         databasePageManager.unregisterContext(this);
+        // explicitly close Spring container managed extended entity
+        // managers which are not closed on bean destruction
+        if (extendedEntityManager instanceof EntityManagerProxy)
+        {
+            ((EntityManagerProxy)extendedEntityManager).getTargetEntityManager().close();
+        }
+        extendedEntityManager = null;
     }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/profiler/jpa/ProfilerManagerContext.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/profiler/jpa/ProfilerManagerContext.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/profiler/jpa/ProfilerManagerContext.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-profiler/src/main/java/org/apache/jetspeed/profiler/jpa/ProfilerManagerContext.java Thu Feb 26 17:54:14 2009
@@ -20,6 +20,8 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContextType;
 
+import org.springframework.orm.jpa.EntityManagerProxy;
+
 /**
  * ProfilerManagerContext
  * 
@@ -78,5 +80,12 @@
     public void terminate()
     {
         profilerManager.unregisterContext(this);
+        // explicitly close Spring container managed extended entity
+        // managers which are not closed on bean destruction
+        if (extendedEntityManager instanceof EntityManagerProxy)
+        {
+            ((EntityManagerProxy)extendedEntityManager).getTargetEntityManager().close();
+        }
+        extendedEntityManager = null;
     }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/AtomikosXADatasourceComponent.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/AtomikosXADatasourceComponent.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/AtomikosXADatasourceComponent.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/AtomikosXADatasourceComponent.java Thu Feb 26 17:54:14 2009
@@ -214,4 +214,13 @@
         {                
         }
     }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.components.datasource.DatasourceComponent#active()
+     */
+    public int active()
+    {
+        AbstractDataSourceBean datasourceBean = (AbstractDataSourceBean)dataSource;
+        return datasourceBean.poolTotalSize()-datasourceBean.poolAvailableSize();
+    }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DBCPDatasourceComponent.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DBCPDatasourceComponent.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DBCPDatasourceComponent.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DBCPDatasourceComponent.java Thu Feb 26 17:54:14 2009
@@ -51,8 +51,7 @@
 
     private static final Log log = LogFactory.getLog(DBCPDatasourceComponent.class);
 
-    protected PoolingDataSource dataSource;
-    //protected DataSource dataSource;
+    protected DataSource dataSource;
     
     private String user;
     
@@ -69,6 +68,7 @@
     private byte whenExhausted;
     
     private PoolableConnectionFactory dsConnectionFactory;
+
     /**
      * 
      * Creates a simple commons DBCP connection pool using the following
@@ -221,4 +221,12 @@
             }
         }
     }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.components.datasource.DatasourceComponent#active()
+     */
+    public int active()
+    {
+        return dsConnectionFactory.getPool().getNumActive();
+    }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DatasourceComponent.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DatasourceComponent.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DatasourceComponent.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/datasource/DatasourceComponent.java Thu Feb 26 17:54:14 2009
@@ -42,4 +42,11 @@
      * Stop and terminate component.
      */
     public abstract void stop();
+    
+    /**
+     * Return number of current active connections in datasource pool.
+     * 
+     * @return number of active connections.
+     */
+    public abstract int active();
 }
\ No newline at end of file

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/jndi/JetspeedTestJNDIComponent.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/jndi/JetspeedTestJNDIComponent.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/jndi/JetspeedTestJNDIComponent.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-rdbms/src/main/java/org/apache/jetspeed/components/jndi/JetspeedTestJNDIComponent.java Thu Feb 26 17:54:14 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.jetspeed.components.jndi;
 
+import org.apache.commons.dbcp.PoolingDataSource;
 import org.apache.commons.pool.impl.GenericObjectPool;
 import org.apache.jetspeed.components.datasource.DatasourceComponent;
 import org.apache.jetspeed.components.datasource.BoundDBCPDatasourceComponent;

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/jpa/RegistryManagerContext.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/jpa/RegistryManagerContext.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/jpa/RegistryManagerContext.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-registry/src/main/java/org/apache/jetspeed/components/portletregistry/jpa/RegistryManagerContext.java Thu Feb 26 17:54:14 2009
@@ -20,6 +20,8 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContextType;
 
+import org.springframework.orm.jpa.EntityManagerProxy;
+
 /**
  * RegistryManagerContext
  * 
@@ -78,5 +80,12 @@
     public void terminate()
     {
         registryManager.unregisterContext(this);
+        // explicitly close Spring container managed extended entity
+        // managers which are not closed on bean destruction
+        if (extendedEntityManager instanceof EntityManagerProxy)
+        {
+            ((EntityManagerProxy)extendedEntityManager).getTargetEntityManager().close();
+        }
+        extendedEntityManager = null;
     }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/JetspeedSecurityPersistenceManager.java Thu Feb 26 17:54:14 2009
@@ -280,7 +280,9 @@
         principalNamesAssociatedFromQuery.setParameter("type", to.getName());
         principalNamesAssociatedFromQuery.setParameter("fromSecurityDomain", fromSecurityDomain);
         principalNamesAssociatedFromQuery.setParameter("toSecurityDomain", toSecurityDomain);
-        return principalNamesAssociatedFromQuery.getResultList();
+        List<String> names = principalNamesAssociatedFromQuery.getResultList();
+        // return mutable names list to allow sorting
+        return new ArrayList<String>(names);
     }
 
     @Transactional (readOnly=true)
@@ -302,7 +304,9 @@
         principalNamesAssociatedFromQuery.setParameter("type", to.getName());
         principalNamesAssociatedFromQuery.setParameter("fromSecurityDomain", fromSecurityDomain);
         principalNamesAssociatedFromQuery.setParameter("toSecurityDomain", toSecurityDomain);
-        return principalNamesAssociatedFromQuery.getResultList();
+        List<String> names = principalNamesAssociatedFromQuery.getResultList();
+        // return mutable names list to allow sorting
+        return new ArrayList<String>(names);
     }
 
     @Transactional (readOnly=true)
@@ -324,7 +328,9 @@
         principalNamesAssociatedToQuery.setParameter("type", from.getName());
         principalNamesAssociatedToQuery.setParameter("fromSecurityDomain", fromSecurityDomain);
         principalNamesAssociatedToQuery.setParameter("toSecurityDomain", toSecurityDomain);
-        return principalNamesAssociatedToQuery.getResultList();
+        List<String> names = principalNamesAssociatedToQuery.getResultList();
+        // return mutable names list to allow sorting
+        return new ArrayList<String>(names);
     }
 
     @Transactional (readOnly=true)
@@ -346,7 +352,9 @@
         principalNamesAssociatedToQuery.setParameter("type", from.getName());
         principalNamesAssociatedToQuery.setParameter("fromSecurityDomain", fromSecurityDomain);
         principalNamesAssociatedToQuery.setParameter("toSecurityDomain", toSecurityDomain);
-        return principalNamesAssociatedToQuery.getResultList();
+        List<String> names = principalNamesAssociatedToQuery.getResultList();
+        // return mutable names list to allow sorting
+        return new ArrayList<String>(names);
     }
 
     @Transactional (readOnly=true)
@@ -407,7 +415,9 @@
         principalNamesQuery.setParameter("nameFilter", ((nameFilter != null) ? nameFilter : "")+"%");
         principalNamesQuery.setParameter("type", type.getName());
         principalNamesQuery.setParameter("domainId", securityDomain);
-        return principalNamesQuery.getResultList();
+        List<String> names = principalNamesQuery.getResultList();
+        // return mutable names list to allow sorting
+        return new ArrayList<String>(names);
     }
 
     @Transactional (readOnly=true)

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/SecurityManagerContext.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/SecurityManagerContext.java?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/SecurityManagerContext.java (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/spi/jpa/SecurityManagerContext.java Thu Feb 26 17:54:14 2009
@@ -20,6 +20,8 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContextType;
 
+import org.springframework.orm.jpa.EntityManagerProxy;
+
 /**
  * SecurityManagerContext
  * 
@@ -78,5 +80,12 @@
     public void terminate()
     {
         securityManager.unregisterContext(this);
+        // explicitly close Spring container managed extended entity
+        // managers which are not closed on bean destruction
+        if (extendedEntityManager instanceof EntityManagerProxy)
+        {
+            ((EntityManagerProxy)extendedEntityManager).getTargetEntityManager().close();
+        }
+        extendedEntityManager = null;
     }
 }

Modified: portals/jetspeed-2/portal/branches/JPA_BRANCH/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/branches/JPA_BRANCH/pom.xml?rev=748234&r1=748233&r2=748234&view=diff
==============================================================================
--- portals/jetspeed-2/portal/branches/JPA_BRANCH/pom.xml (original)
+++ portals/jetspeed-2/portal/branches/JPA_BRANCH/pom.xml Thu Feb 26 17:54:14 2009
@@ -269,7 +269,7 @@
 
     <!-- Project Dependency Version Properties -->
     <aopalliance.version>1.0</aopalliance.version>
-    <atomikos.version>3.5.0</atomikos.version>
+    <atomikos.version>3.5.2</atomikos.version>
     <castor.version>1.1.1-xml</castor.version>
     <cglib.version>2.1_3</cglib.version>
     <commons-beanutils.version>1.7.0</commons-beanutils.version>



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org