Author: jacopoc
Date: Mon May 14 14:45:43 2012
New Revision: 1338230
URL: http://svn.apache.org/viewvc?rev=1338230&view=rev
Log:
OFBIZ-4864
* enabled by default the DebugManagedDataSource wrapper around ManagedDataSource
* enhanced the DebugManagedDataSource wrapper to:
** print log messages only at verbose level (instead of always as it was before)
** if possible print additional information about the connection status
** added new method that returns information about the connection pool
settings/status
* added new static method to DBCPConnectionFactory to return information about
the pools
* new screen in the webtools where information about each pool/helper is shown
The information provided by the screen can be very useful to analyze the status
of the connection pools.
Added:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
(with props)
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DebugManagedDataSource.java
ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl
ofbiz/trunk/framework/webtools/widget/EntityScreens.xml
ofbiz/trunk/framework/webtools/widget/Menus.xml
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DBCPConnectionFactory.java
Mon May 14 14:45:43 2012
@@ -36,6 +36,7 @@ import javax.transaction.TransactionMana
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
+import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -165,8 +166,8 @@ public class DBCPConnectionFactory imple
}
pool.setFactory(factory);
- mds = new ManagedDataSource(pool, xacf.getTransactionRegistry());
- //mds = new DebugManagedDataSource(pool,
xacf.getTransactionRegistry()); // Useful to debug the usage of connections in
the pool
+ //mds = new ManagedDataSource(pool, xacf.getTransactionRegistry());
+ mds = new DebugManagedDataSource(pool,
xacf.getTransactionRegistry()); // Useful to debug the usage of connections in
the pool
mds.setAccessToUnderlyingConnectionAllowed(true);
// cache the pool
@@ -180,4 +181,14 @@ public class DBCPConnectionFactory imple
// no methods on the pool to shutdown; so just clearing for GC
dsCache.clear();
}
+
+ public static Map getDataSourceInfo(String helperName) {
+ Map dataSourceInfo = new HashMap();
+ ManagedDataSource mds = dsCache.get(helperName);
+ if (mds instanceof DebugManagedDataSource) {
+ dataSourceInfo = ((DebugManagedDataSource)mds).getInfo();
+ }
+ return dataSourceInfo;
+ }
+
}
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DebugManagedDataSource.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DebugManagedDataSource.java?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
---
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DebugManagedDataSource.java
(original)
+++
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/connection/DebugManagedDataSource.java
Mon May 14 14:45:43 2012
@@ -23,10 +23,13 @@ import org.apache.commons.dbcp.managed.M
import org.apache.commons.dbcp.managed.TransactionRegistry;
import org.apache.commons.pool.ObjectPool;
+import org.apache.commons.pool.impl.GenericObjectPool;
import org.ofbiz.base.util.Debug;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
public class DebugManagedDataSource extends ManagedDataSource {
@@ -41,7 +44,31 @@ public class DebugManagedDataSource exte
@Override
public Connection getConnection() throws SQLException {
- Debug.logInfo("Borrowing a connection from the pool; used/total: " +
super._pool.getNumActive() + "/" + (super._pool.getNumActive() +
super._pool.getNumIdle()), module);
+ if (Debug.verboseOn()) {
+ if (super._pool instanceof GenericObjectPool) {
+ GenericObjectPool objectPool = (GenericObjectPool)super._pool;
+ Debug.logVerbose("Borrowing a connection from the pool;
used/total: " + objectPool.getNumActive() + "/" + objectPool.getNumActive() +
objectPool.getNumIdle() + "; min idle/max idle/max total: " +
objectPool.getMinIdle() + "/" + objectPool.getMaxIdle() + "/" +
objectPool.getMaxActive(), module);
+ } else {
+ Debug.logVerbose("Borrowing a connection from the pool;
used/total: " + super._pool.getNumActive() + "/" + (super._pool.getNumActive()
+ super._pool.getNumIdle()), module);
+ }
+ }
return super.getConnection();
}
+
+ public Map getInfo() {
+ Map dataSourceInfo = new HashMap();
+ dataSourceInfo.put("poolNumActive", super._pool.getNumActive());
+ dataSourceInfo.put("poolNumIdle", super._pool.getNumIdle());
+ dataSourceInfo.put("poolNumTotal", (super._pool.getNumIdle() +
super._pool.getNumActive()));
+ if (super._pool instanceof GenericObjectPool) {
+ GenericObjectPool objectPool = (GenericObjectPool)super._pool;
+ dataSourceInfo.put("poolMaxActive", objectPool.getMaxActive());
+ dataSourceInfo.put("poolMaxIdle", objectPool.getMaxIdle());
+ dataSourceInfo.put("poolMaxWait", objectPool.getMaxWait());
+ dataSourceInfo.put("poolMinEvictableIdleTimeMillis",
objectPool.getMinEvictableIdleTimeMillis());
+ dataSourceInfo.put("poolMinIdle", objectPool.getMinIdle());
+ }
+ return dataSourceInfo;
+ }
+
}
Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original)
+++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Mon May 14
14:45:43 2012
@@ -19,6 +19,9 @@
under the License.
-->
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <property key="ConnectionPoolStatus">
+ <value xml:lang="en">Connection Pool Status</value>
+ </property>
<property key="EntityImportDeletFile">
<value xml:lang="en">Deleting ${fileName}</value>
<value xml:lang="it">Stò cancellando il file ${fileName}</value>
Modified: ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
(original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml Mon
May 14 14:45:43 2012
@@ -359,6 +359,11 @@ under the License.
<response name="success" type="view" value="EntitySQLProcessor"/>
</request-map>
+ <request-map uri="ConnectionPoolStatus">
+ <security https="true" auth="true"/>
+ <response name="success" type="view" value="ConnectionPoolStatus"/>
+ </request-map>
+
<!-- Entity Export/Import requests -->
<request-map uri="EntityExportAll"><security https="true"
auth="true"/><response name="success" type="view"
value="EntityExportAll"/><response name="error" type="view"
value="EntityExportAll"/></request-map>
<request-map uri="entityExportAll">
@@ -657,6 +662,7 @@ under the License.
<view-map name="EntitySyncStatus"
page="component://webtools/widget/EntitySyncScreens.xml#EntitySyncStatus"
type="screen"/>
<view-map name="EntitySQLProcessor"
page="component://webtools/widget/EntityScreens.xml#EntitySQLProcessor"
type="screen"/>
+ <view-map name="ConnectionPoolStatus"
page="component://webtools/widget/EntityScreens.xml#ConnectionPoolStatus"
type="screen"/>
<view-map name="EntityExportAll"
page="component://webtools/widget/EntityScreens.xml#EntityExportAll"
type="screen"/>
<view-map name="EntityImportDir"
page="component://webtools/widget/EntityScreens.xml#EntityImportDir"
type="screen"/>
<view-map name="EntityImport"
page="component://webtools/widget/EntityScreens.xml#EntityImport"
type="screen"/>
Added:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl?rev=1338230&view=auto
==============================================================================
---
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
(added)
+++
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
Mon May 14 14:45:43 2012
@@ -0,0 +1,56 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<h1>Connection Pool Status</h1>
+
+<#assign groups =
delegator.getModelGroupReader().getGroupNames(delegator.getDelegatorName())?if_exists/>
+<table class="basic-table light-grid hover-bar">
+ <tr class="header-row">
+ <td>Helper Name</td>
+ <td>Num Active</td>
+ <td>Num Idle</td>
+ <td>Num Total</td>
+ <td>Max Active</td>
+ <td>Max Idle</td>
+ <td>Min Idle</td>
+ <td>Min Evictable Idle Time</td>
+ <td>Max Wait</td>
+ </tr>
+ <#assign alt_row = false>
+ <#if (groups?has_content)>
+ <#list groups as group>
+ <#assign helper = delegator.getGroupHelperName(group)?if_exists/>
+ <#if (helper?has_content)>
+ <#assign dataSourceInfo =
Static["org.ofbiz.entity.connection.DBCPConnectionFactory"].getDataSourceInfo(helper)?if_exists/>
+ <#if (dataSourceInfo?has_content)>
+ <tr>
+ <td>${helper}</td>
+ <td>${dataSourceInfo.poolNumActive?if_exists}</td>
+ <td>${dataSourceInfo.poolNumIdle?if_exists}</td>
+ <td>${dataSourceInfo.poolNumTotal?if_exists}</td>
+ <td>${dataSourceInfo.poolMaxActive?if_exists}</td>
+ <td>${dataSourceInfo.poolMaxIdle?if_exists}</td>
+ <td>${dataSourceInfo.poolMinIdle?if_exists}</td>
+
<td>${dataSourceInfo.poolMinEvictableIdleTimeMillis?if_exists}</td>
+ <td>${dataSourceInfo.poolMaxWait?if_exists}</td>
+ </tr>
+ </#if>
+ </#if>
+ </#list>
+ </#if>
+</table>
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
------------------------------------------------------------------------------
svn:keywords = Date Rev Author URL Id
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl Mon May 14 14:45:43
2012
@@ -60,6 +60,7 @@ under the License.
<li><a href="<@ofbizUrl>view/ModelInduceFromDb</@ofbizUrl>"
target="_blank">${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}</a></li>
<li><a
href="<@ofbizUrl>EntityEoModelBundle</@ofbizUrl>">${uiLabelMap.WebtoolsExportEntityEoModelBundle}</a></li>
<li><a
href="<@ofbizUrl>view/checkdb</@ofbizUrl>">${uiLabelMap.WebtoolsCheckUpdateDatabase}</a></li>
+ <li><a
href="<@ofbizUrl>ConnectionPoolStatus</@ofbizUrl>">${uiLabelMap.ConnectionPoolStatus}</a></li>
<#-- not using Minerva by default any more <li><a
href="<@ofbizUrl>minervainfo</@ofbizUrl>">Minerva Connection Info</a></li> -->
<#-- want to leave these out because they are only working so-so,
and cause people more problems that they solve, IMHO
<li><a href="<@ofbizUrl>view/EditEntity</@ofbizUrl>"
target="_blank">Edit Entity Definitions</a></li>
Modified: ofbiz/trunk/framework/webtools/widget/EntityScreens.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/EntityScreens.xml?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/widget/EntityScreens.xml (original)
+++ ofbiz/trunk/framework/webtools/widget/EntityScreens.xml Mon May 14 14:45:43
2012
@@ -454,4 +454,22 @@ under the License.
</widgets>
</section>
</screen>
+ <screen name="ConnectionPoolStatus">
+ <section>
+ <actions>
+ <set field="titleProperty" value="ConnectionPoolStatus"/>
+ <set field="tabButtonItem" value="ConnectionPoolStatus"/>
+ <set field="labelTitleProperty" value="ConnectionPoolStatus"/>
+ </actions>
+ <widgets>
+ <decorator-screen name="CommonEntityDecorator"
location="component://webtools/widget/CommonScreens.xml">
+ <decorator-section name="body">
+ <platform-specific>
+ <html><html-template
location="component://webtools/webapp/webtools/entity/ConnectionPoolStatus.ftl"/></html>
+ </platform-specific>
+ </decorator-section>
+ </decorator-screen>
+ </widgets>
+ </section>
+ </screen>
</screens>
Modified: ofbiz/trunk/framework/webtools/widget/Menus.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/Menus.xml?rev=1338230&r1=1338229&r2=1338230&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/widget/Menus.xml (original)
+++ ofbiz/trunk/framework/webtools/widget/Menus.xml Mon May 14 14:45:43 2012
@@ -195,6 +195,9 @@ under the License.
<menu-item name="checkDb"
title="${uiLabelMap.WebtoolsCheckUpdateDatabase}">
<link target="view/checkdb"/>
</menu-item>
+ <menu-item name="ConnectionPoolStatus"
title="${uiLabelMap.ConnectionPoolStatus}">
+ <link target="ConnectionPoolStatus"/>
+ </menu-item>
<menu-item name="entityPerformanceTest"
title="${uiLabelMap.WebtoolsPerformanceTests}">
<link target="EntityPerformanceTest"/>
</menu-item>