Author: markt
Date: Thu Apr 26 20:20:10 2012
New Revision: 1331062
URL: http://svn.apache.org/viewvc?rev=1331062&view=rev
Log:
Start pulling the common GOP and GKOP code into a single base class.
Added:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
(with props)
Modified:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
Added:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java?rev=1331062&view=auto
==============================================================================
---
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
(added)
+++
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
Thu Apr 26 20:20:10 2012
@@ -0,0 +1,221 @@
+/*
+ * 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.
+ */
+package org.apache.commons.pool2.impl;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.management.ListenerNotFoundException;
+import javax.management.MBeanNotificationInfo;
+import javax.management.Notification;
+import javax.management.NotificationBroadcasterSupport;
+import javax.management.NotificationEmitter;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+
+/**
+ * Base class that provides common functionality for {@link GenericObjectPool}
+ * and {@link GenericKeyedObjectPool}. The primary reason this class exists is
+ * reduce code duplication between the two pool implementations.
+ */
+public abstract class BaseGenericObjectPool implements NotificationEmitter {
+
+ // Constants
+ /**
+ * Name of the JMX notification broadcast when the pool implementation
+ * swallows an {@link Exception}.
+ */
+ public static final String NOTIFICATION_SWALLOWED_EXCEPTION =
+ "SWALLOWED_EXCEPTION";
+ private static final int SWALLOWED_EXCEPTION_QUEUE_SIZE = 10;
+
+ // Configuration attributes
+ // None as yet
+
+ // Internal state attributes
+ protected volatile boolean closed = false;
+
+ // Monitoring (primarily JMX) attributes
+ private final NotificationBroadcasterSupport jmxNotificationSupport;
+ private final String creationStackTrace;
+ private final Deque<String> swallowedExceptions = new LinkedList<String>();
+ private final AtomicInteger swallowedExcpetionCount = new AtomicInteger(0);
+
+
+ public BaseGenericObjectPool(BaseObjectPoolConfig config) {
+ if (config.getJmxEnabled()) {
+ this.jmxNotificationSupport = new NotificationBroadcasterSupport();
+ } else {
+ this.jmxNotificationSupport = null;
+ }
+
+ // Populate the swallowed exceptions queue
+ for (int i = 0; i < SWALLOWED_EXCEPTION_QUEUE_SIZE; i++) {
+ swallowedExceptions.add(null);
+ }
+
+ // Populate the creation stack trace
+ this.creationStackTrace = getStackTrace(new Exception());
+ }
+
+ /**
+ * Closes the pool destroys the remaining idle objects and, if registered
in
+ * JMX, deregisters it.
+ */
+ public abstract void close();
+
+ /**
+ * Has this pool instance been closed.
+ * @return <code>true</code> when this pool has been closed.
+ */
+ public final boolean isClosed() {
+ return closed;
+ }
+
+
+ /**
+ * Throws an <code>IllegalStateException</code> if called when the pool has
+ * been closed.
+ *
+ * @throws IllegalStateException if this pool has been closed.
+ * @see #isClosed()
+ */
+ protected final void assertOpen() throws IllegalStateException {
+ if (isClosed()) {
+ throw new IllegalStateException("Pool not open");
+ }
+ }
+
+
+ // Monitoring (primarily JMX) related methods
+
+ /**
+ * Provides the name under which the pool has been registered with the
+ * platform MBean server or <code>null</code> if the pool has not been
+ * registered.
+ */
+ public abstract ObjectName getJmxName();
+
+ /**
+ * Provides the stack trace for the call that created this pool. JMX
+ * registration may trigger a memory leak so it is important that pools are
+ * deregistered when no longer used by calling the {@link #close()} method.
+ * This method is provided to assist with identifying code that creates but
+ * does not close it thereby creating a memory leak.
+ */
+ public String getCreationStackTrace() {
+ return creationStackTrace;
+ }
+
+ /**
+ * Lists the most recent exceptions that have been swallowed by the pool
+ * implementation. Exceptions are typically swallowed when a problem occurs
+ * while destroying an object.
+ */
+ public String[] getSwallowedExceptions() {
+ List<String> temp =
+ new ArrayList<String>(SWALLOWED_EXCEPTION_QUEUE_SIZE);
+ synchronized (swallowedExceptions) {
+ temp.addAll(swallowedExceptions);
+ }
+ return temp.toArray(new String[SWALLOWED_EXCEPTION_QUEUE_SIZE]);
+ }
+
+ protected final NotificationBroadcasterSupport getJmxNotificationSupport()
{
+ return jmxNotificationSupport;
+ }
+
+ protected String getStackTrace(Exception e) {
+ // Need the exception in string form to prevent the retention of
+ // references to classes in the stack trace that could trigger a memory
+ // leak in a container environment
+ Writer w = new StringWriter();
+ PrintWriter pw = new PrintWriter(w);
+ e.printStackTrace(pw);
+ return w.toString();
+ }
+
+ protected void swallowException(Exception e) {
+ String msg = getStackTrace(e);
+
+ ObjectName oname = getJmxName();
+ if (oname != null) {
+ Notification n = new Notification(NOTIFICATION_SWALLOWED_EXCEPTION,
+ oname, swallowedExcpetionCount.incrementAndGet(), msg);
+ getJmxNotificationSupport().sendNotification(n);
+ }
+
+ // Add the exception the queue, removing the oldest
+ synchronized (swallowedExceptions) {
+ swallowedExceptions.addLast(msg);
+ swallowedExceptions.pollFirst();
+ }
+ }
+
+
+ // Implement NotificationEmitter interface
+
+ @Override
+ public final void addNotificationListener(NotificationListener listener,
+ NotificationFilter filter, Object handback)
+ throws IllegalArgumentException {
+
+ if (jmxNotificationSupport == null) {
+ throw new UnsupportedOperationException("JMX is not enabled");
+ }
+ jmxNotificationSupport.addNotificationListener(
+ listener, filter, handback);
+ }
+
+ @Override
+ public final void removeNotificationListener(NotificationListener listener)
+ throws ListenerNotFoundException {
+
+ if (jmxNotificationSupport == null) {
+ throw new UnsupportedOperationException("JMX is not enabled");
+ }
+ jmxNotificationSupport.removeNotificationListener(listener);
+ }
+
+ @Override
+ public final MBeanNotificationInfo[] getNotificationInfo() {
+
+ if (jmxNotificationSupport == null) {
+ throw new UnsupportedOperationException("JMX is not enabled");
+ }
+ return jmxNotificationSupport.getNotificationInfo();
+ }
+
+ @Override
+ public final void removeNotificationListener(NotificationListener listener,
+ NotificationFilter filter, Object handback)
+ throws ListenerNotFoundException {
+
+ if (jmxNotificationSupport == null) {
+ throw new UnsupportedOperationException("JMX is not enabled");
+ }
+ jmxNotificationSupport.removeNotificationListener(
+ listener, filter, handback);
+ }
+}
Propchange:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java?rev=1331062&r1=1331061&r2=1331062&view=diff
==============================================================================
---
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
(original)
+++
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
Thu Apr 26 20:20:10 2012
@@ -14,15 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.commons.pool2.impl;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
-import java.util.Deque;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -41,17 +36,11 @@ import java.util.concurrent.locks.ReadWr
import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.management.InstanceAlreadyExistsException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanNotificationInfo;
+import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
-import javax.management.Notification;
-import javax.management.NotificationBroadcasterSupport;
-import javax.management.NotificationEmitter;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
import javax.management.ObjectName;
import org.apache.commons.pool2.KeyedObjectPool;
@@ -208,8 +197,8 @@ import org.apache.commons.pool2.PoolUtil
* @version $Revision$ $Date$
* @since Pool 1.0
*/
-public class GenericKeyedObjectPool<K,T> implements KeyedObjectPool<K,T>,
- GenericKeyedObjectPoolMBean<K>, NotificationEmitter {
+public class GenericKeyedObjectPool<K,T> extends BaseGenericObjectPool
+ implements KeyedObjectPool<K,T>, GenericKeyedObjectPoolMBean<K> {
/**
* Create a new <code>GenericKeyedObjectPool</code> using defaults.
@@ -229,6 +218,7 @@ public class GenericKeyedObjectPool<K,T>
*/
public GenericKeyedObjectPool(KeyedPoolableObjectFactory<K,T> factory,
GenericKeyedObjectPoolConfig config) {
+ super(config);
this.factory = factory;
// save the current CCL to be used later by the evictor Thread
factoryClassLoader = Thread.currentThread().getContextClassLoader();
@@ -244,7 +234,6 @@ public class GenericKeyedObjectPool<K,T>
if (config.getJmxEnabled()) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
String jmxNamePrefix = config.getJmxNamePrefix();
- this.jmxNotificationSupport = new NotificationBroadcasterSupport();
int i = 1;
boolean registered = false;
while (!registered) {
@@ -276,18 +265,8 @@ public class GenericKeyedObjectPool<K,T>
registered = true;
}
}
- } else {
- this.jmxNotificationSupport = null;
}
this.oname = onameTemp;
-
- // Populate the swallowed exceptions queue
- for (int i = 0; i < SWALLOWED_EXCEPTION_QUEUE_SIZE; i++) {
- swallowedExceptions.add(null);
- }
-
- // Populate the creation stack trace
- this.creationStackTrace = getStackTrace(new Exception());
}
/**
@@ -1049,32 +1028,6 @@ public class GenericKeyedObjectPool<K,T>
}
}
- private void swallowException(Exception e) {
- String msg = getStackTrace(e);
-
- if (oname != null) {
- Notification n = new Notification(NOTIFICATION_SWALLOWED_EXCEPTION,
- oname, swallowedExcpetionCount.incrementAndGet(), msg);
- jmxNotificationSupport.sendNotification(n);
- }
-
- // Add the exception the queue, removing the oldest
- synchronized (swallowedExceptions) {
- swallowedExceptions.addLast(msg);
- swallowedExceptions.pollFirst();
- }
- }
-
- private String getStackTrace(Exception e) {
- // Need the exception in string form to prevent the retention of
- // references to classes in the stack trace that could trigger a memory
- // leak in a container environment
- Writer w = new StringWriter();
- PrintWriter pw = new PrintWriter(w);
- e.printStackTrace(pw);
- return w.toString();
- }
-
/**
* {@inheritDoc}
@@ -1226,7 +1179,7 @@ public class GenericKeyedObjectPool<K,T>
* @throws Exception
*/
@Override
- public void close() throws Exception {
+ public void close() {
if (isClosed()) {
return;
}
@@ -1244,8 +1197,16 @@ public class GenericKeyedObjectPool<K,T>
// This clear removes any idle objects
clear();
if (oname != null) {
- ManagementFactory.getPlatformMBeanServer().unregisterMBean(
- oname);
+ try {
+ ManagementFactory.getPlatformMBeanServer().unregisterMBean(
+ oname);
+ } catch (MBeanRegistrationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InstanceNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
// Release any threads that were waiting for an object
@@ -1260,31 +1221,6 @@ public class GenericKeyedObjectPool<K,T>
}
- /**
- * Has this pool instance been closed.
- * @return <code>true</code> when this pool has been closed.
- * @since Pool 1.4
- */
- @Override
- public boolean isClosed() {
- return closed;
- }
-
- /**
- * Throws an <code>IllegalStateException</code> when this pool has been
closed.
- * @throws IllegalStateException when this pool has been closed.
- * @see #isClosed()
- * @since Pool 1.4
- */
- protected void assertOpen() throws IllegalStateException {
- if(isClosed()) {
- throw new IllegalStateException("Pool not open");
- }
- }
-
- /** Whether or not the pool is closed */
- private volatile boolean closed = false;
-
/**
* Clears oldest 15% of objects in pool. The method sorts the
@@ -2059,67 +1995,10 @@ public class GenericKeyedObjectPool<K,T>
}
@Override
- public String[] getSwallowedExceptions() {
- List<String> temp =
- new ArrayList<String>(SWALLOWED_EXCEPTION_QUEUE_SIZE);
- synchronized (swallowedExceptions) {
- temp.addAll(swallowedExceptions);
- }
- return temp.toArray(new String[SWALLOWED_EXCEPTION_QUEUE_SIZE]);
- }
-
- @Override
- public void addNotificationListener(NotificationListener listener,
- NotificationFilter filter, Object handback)
- throws IllegalArgumentException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.addNotificationListener(
- listener, filter, handback);
- }
-
- @Override
- public void removeNotificationListener(NotificationListener listener)
- throws ListenerNotFoundException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.removeNotificationListener(listener);
- }
-
- @Override
- public MBeanNotificationInfo[] getNotificationInfo() {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- return jmxNotificationSupport.getNotificationInfo();
- }
-
- @Override
- public void removeNotificationListener(NotificationListener listener,
- NotificationFilter filter, Object handback)
- throws ListenerNotFoundException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.removeNotificationListener(
- listener, filter, handback);
- }
-
public ObjectName getJmxName() {
return oname;
}
- @Override
- public String getCreationStackTrace() {
- return creationStackTrace;
- }
-
//--- inner classes ----------------------------------------------
/**
@@ -2479,15 +2358,7 @@ public class GenericKeyedObjectPool<K,T>
private final Object maxBorrowWaitTimeMillisLock = new Object();
private volatile long maxBorrowWaitTimeMillis = 0; //
@GuardedBy("maxBorrowWaitTimeMillisLock")
- public static final String NOTIFICATION_SWALLOWED_EXCEPTION =
- "SWALLOWED_EXCEPTION";
- private static final int SWALLOWED_EXCEPTION_QUEUE_SIZE = 10;
- private final Deque<String> swallowedExceptions = new LinkedList<String>();
- private final AtomicInteger swallowedExcpetionCount = new AtomicInteger(0);
-
private final ObjectName oname;
- private final NotificationBroadcasterSupport jmxNotificationSupport;
- private final String creationStackTrace;
private static final String ONAME_BASE =
"org.apache.commoms.pool2:type=GenericKeyedObjectPool,name=";
Modified:
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
URL:
http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java?rev=1331062&r1=1331061&r2=1331062&view=diff
==============================================================================
---
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
(original)
+++
commons/proper/pool/trunk/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
Thu Apr 26 20:20:10 2012
@@ -16,12 +16,8 @@
*/
package org.apache.commons.pool2.impl;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
-import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -30,24 +26,16 @@ import java.util.NoSuchElementException;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import javax.management.InstanceAlreadyExistsException;
-import javax.management.ListenerNotFoundException;
-import javax.management.MBeanNotificationInfo;
+import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
-import javax.management.Notification;
-import javax.management.NotificationBroadcasterSupport;
-import javax.management.NotificationEmitter;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
import javax.management.ObjectName;
-import org.apache.commons.pool2.BaseObjectPool;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.PoolUtils;
import org.apache.commons.pool2.PoolableObjectFactory;
@@ -174,8 +162,8 @@ import org.apache.commons.pool2.Poolable
* 2011) $
* @since Pool 1.0
*/
-public class GenericObjectPool<T> extends BaseObjectPool<T>
- implements GenericObjectPoolMBean, NotificationEmitter {
+public class GenericObjectPool<T> extends BaseGenericObjectPool
+ implements ObjectPool<T>, GenericObjectPoolMBean {
/**
* Create a new <code>GenericObjectPool</code> using default.
@@ -195,6 +183,7 @@ public class GenericObjectPool<T> extend
*/
public GenericObjectPool(PoolableObjectFactory<T> factory,
GenericObjectPoolConfig config) {
+ super(config);
this.factory = factory;
// save the current CCL to be used later by the evictor Thread
factoryClassLoader = Thread.currentThread().getContextClassLoader();
@@ -210,7 +199,6 @@ public class GenericObjectPool<T> extend
if (config.getJmxEnabled()) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
String jmxNamePrefix = config.getJmxNamePrefix();
- this.jmxNotificationSupport = new NotificationBroadcasterSupport();
int i = 1;
boolean registered = false;
while (!registered) {
@@ -242,18 +230,8 @@ public class GenericObjectPool<T> extend
registered = true;
}
}
- } else {
- this.jmxNotificationSupport = null;
}
this.oname = onameTemp;
-
- // Populate the swallowed exceptions queue
- for (int i = 0; i < SWALLOWED_EXCEPTION_QUEUE_SIZE; i++) {
- swallowedExceptions.add(null);
- }
-
- // Populate the creation stack trace
- this.creationStackTrace = getStackTrace(new Exception());
}
/**
@@ -976,32 +954,6 @@ public class GenericObjectPool<T> extend
}
}
- private void swallowException(Exception e) {
- String msg = getStackTrace(e);
-
- if (oname != null) {
- Notification n = new Notification(NOTIFICATION_SWALLOWED_EXCEPTION,
- oname, swallowedExcpetionCount.incrementAndGet(), msg);
- jmxNotificationSupport.sendNotification(n);
- }
-
- // Add the exception the queue, removing the oldest
- synchronized (swallowedExceptions) {
- swallowedExceptions.addLast(msg);
- swallowedExceptions.pollFirst();
- }
- }
-
- private String getStackTrace(Exception e) {
- // Need the exception in string form to prevent the retention of
- // references to classes in the stack trace that could trigger a memory
- // leak in a container environment
- Writer w = new StringWriter();
- PrintWriter pw = new PrintWriter(w);
- e.printStackTrace(pw);
- return w.toString();
- }
-
/**
* {@inheritDoc}
* <p>
@@ -1089,7 +1041,7 @@ public class GenericObjectPool<T> extend
* @throws Exception
*/
@Override
- public void close() throws Exception {
+ public void close() {
if (isClosed()) {
return;
}
@@ -1103,12 +1055,20 @@ public class GenericObjectPool<T> extend
// assertOpen()
startEvictor(-1L);
- super.close();
+ closed = true;
// This clear removes any idle objects
clear();
if (oname != null) {
- ManagementFactory.getPlatformMBeanServer().unregisterMBean(
- oname);
+ try {
+ ManagementFactory.getPlatformMBeanServer().unregisterMBean(
+ oname);
+ } catch (MBeanRegistrationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InstanceNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
// Release any threads that were waiting for an object
@@ -1459,67 +1419,10 @@ public class GenericObjectPool<T> extend
}
@Override
- public String[] getSwallowedExceptions() {
- List<String> temp =
- new ArrayList<String>(SWALLOWED_EXCEPTION_QUEUE_SIZE);
- synchronized (swallowedExceptions) {
- temp.addAll(swallowedExceptions);
- }
- return temp.toArray(new String[SWALLOWED_EXCEPTION_QUEUE_SIZE]);
- }
-
- @Override
- public void addNotificationListener(NotificationListener listener,
- NotificationFilter filter, Object handback)
- throws IllegalArgumentException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.addNotificationListener(
- listener, filter, handback);
- }
-
- @Override
- public void removeNotificationListener(NotificationListener listener)
- throws ListenerNotFoundException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.removeNotificationListener(listener);
- }
-
- @Override
- public MBeanNotificationInfo[] getNotificationInfo() {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- return jmxNotificationSupport.getNotificationInfo();
- }
-
- @Override
- public void removeNotificationListener(NotificationListener listener,
- NotificationFilter filter, Object handback)
- throws ListenerNotFoundException {
-
- if (jmxNotificationSupport == null) {
- throw new UnsupportedOperationException("JMX is not enabled");
- }
- jmxNotificationSupport.removeNotificationListener(
- listener, filter, handback);
- }
-
public ObjectName getJmxName() {
return oname;
}
- @Override
- public String getCreationStackTrace() {
- return creationStackTrace;
- }
-
// --- inner classes ----------------------------------------------
/**
@@ -1779,15 +1682,7 @@ public class GenericObjectPool<T> extend
private final Object maxBorrowWaitTimeMillisLock = new Object();
private volatile long maxBorrowWaitTimeMillis = 0; //
@GuardedBy("maxBorrowWaitTimeMillisLock")
- public static final String NOTIFICATION_SWALLOWED_EXCEPTION =
- "SWALLOWED_EXCEPTION";
- private static final int SWALLOWED_EXCEPTION_QUEUE_SIZE = 10;
- private final Deque<String> swallowedExceptions = new LinkedList<String>();
- private final AtomicInteger swallowedExcpetionCount = new AtomicInteger(0);
-
private final ObjectName oname;
- private final NotificationBroadcasterSupport jmxNotificationSupport;
- private final String creationStackTrace;
private static final String ONAME_BASE =
"org.apache.commoms.pool2:type=GenericObjectPool,name=";