/** * Used to fire a connection closed event to all listeners. */ void fireConnectionClosed() { ConnectionEvent evt = null; // Copy the listener list so the listener can remove itself during this // method call ConnectionEventListener[] local = listeners.toArray(new ConnectionEventListener[listeners.size()]); for (ConnectionEventListener listener : local) { if (evt == null) { evt = createConnectionEvent(null); } listener.connectionClosed(evt); } }
/** * Used to fire a connection error event to all listeners. */ void fireConnectionFatalError(SQLException e) { ConnectionEvent evt = null; // Copy the listener list so the listener can remove itself during this // method call ConnectionEventListener[] local = listeners.toArray(new ConnectionEventListener[listeners.size()]); for (ConnectionEventListener listener : local) { if (evt == null) { evt = createConnectionEvent(e); } listener.connectionErrorOccurred(evt); } }
/** * Notifies all registered ConnectionEventListeners of ConnectionEvents. * Instantiates a new ConnectionEvent which wraps sqlException and invokes * either connectionClose or connectionErrorOccurred on listener as * appropriate. * * @param eventType * value indicating whether connectionClosed or * connectionErrorOccurred called * @param sqlException * the exception being thrown */ protected synchronized void callConnectionEventListeners(int eventType, SQLException sqlException) { if (this.connectionEventListeners == null) { return; } Iterator<Map.Entry<ConnectionEventListener, ConnectionEventListener>> iterator = this.connectionEventListeners.entrySet().iterator(); ConnectionEvent connectionevent = new ConnectionEvent(this, sqlException); while (iterator.hasNext()) { ConnectionEventListener connectioneventlistener = iterator.next().getValue(); if (eventType == CONNECTION_CLOSED_EVENT) { connectioneventlistener.connectionClosed(connectionevent); } else if (eventType == CONNECTION_ERROR_EVENT) { connectioneventlistener.connectionErrorOccurred(connectionevent); } } }
/** * Creates a new connection for the pool. This connection can participate in the transactions. * * @return the connection from the database as PooledConnection object. */ @Override public Object getNewPoolConnection() throws PoolException { if (m_xads != null) { PooledConnection poolConn = null; try { poolConn = m_xads.getXAConnection(configProps.getUser(), configProps.getPassword()); } catch (SQLException sqx) { throw new PoolException( LocalizedStrings.TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_EXCEPTION_IN_CREATING_NEW_TRANSACTION_POOLEDCONNECTION .toLocalizedString(), sqx); } poolConn.addConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); return poolConn; } else { if (logger.isDebugEnabled()) { logger.debug( "TranxPoolCacheImpl::getNewConnection: ConnectionPoolCache not intialized with XADatasource"); } throw new PoolException( LocalizedStrings.TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_XADATASOURCE .toLocalizedString()); } }
/** * This method destroys the connection. */ @Override void destroyPooledConnection(Object connectionObject) { try { ((PooledConnection) connectionObject) .removeConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); ((PooledConnection) connectionObject).close(); connectionObject = null; } catch (Exception ex) { if (logger.isTraceEnabled()) { logger.trace( "AbstractPoolcache::destroyPooledConnection:Exception in closing the connection.Ignoring it. The exeption is {}", ex.getMessage(), ex); } } }
/** * Creates a new connection for the pool. * * @return the connection from the database as Object. * @throws PoolException */ @Override public Object getNewPoolConnection() throws PoolException { if (m_cpds != null) { PooledConnection poolConn = null; try { poolConn = m_cpds.getPooledConnection(configProps.getUser(), configProps.getPassword()); } catch (SQLException sqx) { throw new PoolException( LocalizedStrings.ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_EXCEPTION_IN_CREATING_NEW_POOLEDCONNECTION .toLocalizedString(), sqx); } poolConn.addConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); return poolConn; } else { if (logger.isDebugEnabled()) { logger.debug( "ConnectionPoolCacheImpl::geNewConnection: ConnectionPoolCache not intialized with ConnectionPoolDatasource"); } throw new PoolException( LocalizedStrings.ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_CONNECTIONPOOLDATASOURCE .toLocalizedString()); } }
public synchronized void addConnectionEventListener( ConnectionEventListener listener) { if (logWriter_ != null) { logWriter_.traceEntry(this, "addConnectionEventListener", listener); } if (listener == null) { // Ignore the listener if it is null. Otherwise, an exception is // thrown when a connection event occurs (DERBY-3307). return; } if (eventIterators > 0) { // DERBY-3401: Someone is iterating over the ArrayList, and since // we were able to synchronize on this, that someone is us. Clone // the list of listeners in order to prevent invalidation of the // iterator. listeners_ = (ArrayList) listeners_.clone(); } listeners_.add(listener); }
/** * Fire all the {@code ConnectionEventListener}s registered. Callers must * synchronize on {@code this} to prevent others from modifying the list of * listeners. * * @param exception the exception that caused the event, or {@code null} if * it is a close event */ private void fireConnectionEventListeners(SqlException exception) { if (!listeners_.isEmpty()) { final ConnectionEvent event = (exception == null) ? new ConnectionEvent(this) : new ConnectionEvent(this, exception.getSQLException( physicalConnection_ != null ? physicalConnection_ .agent_ : null /* GemStoneAddition */)); eventIterators++; try { for (Iterator it = listeners_.iterator(); it.hasNext(); ) { final ConnectionEventListener listener = (ConnectionEventListener) it.next(); if (exception == null) { listener.connectionClosed(event); } else { listener.connectionErrorOccurred(event); } } } finally { eventIterators--; } } }
/** Add an event listener. */ public final synchronized void addConnectionEventListener(ConnectionEventListener listener) { if (!isActive) return; if (listener == null) return; if (eventListener == null) { eventListener = new ArrayList(); } else if (eventIterators > 0) { // DERBY-3401: Someone is iterating over the ArrayList, and since // we were able to synchronize on this, that someone is us. Clone // the list of listeners in order to prevent invalidation of the // iterator. eventListener = (ArrayList) eventListener.clone(); } eventListener.add(listener); }
/** * Fire all the {@code ConnectionEventListener}s registered. Callers must * synchronize on {@code this} to prevent others from modifying the list of * listeners. * * @param exception the exception that caused the event, or {@code null} if * it is a close event */ private void fireConnectionEventListeners(SQLException exception) { if (eventListener != null && !eventListener.isEmpty()) { ConnectionEvent event = new ConnectionEvent(this, exception); eventIterators++; try { for (Iterator it = eventListener.iterator(); it.hasNext();) { ConnectionEventListener l = (ConnectionEventListener) it.next(); if (exception == null) { l.connectionClosed(event); } else { l.connectionErrorOccurred(event); } } } finally { eventIterators--; } } }
/** * */ @Override void destroyPooledConnection(Object connectionObject) { try { ((PooledConnection) connectionObject) .removeConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); ((PooledConnection) connectionObject).close(); connectionObject = null; } catch (Exception ex) { LogWriterI18n writer = TransactionUtils.getLogWriterI18n(); if (writer.finerEnabled()) writer .finer( "AbstractPoolcache::destroyPooledConnection:Exception in closing the connection.Ignoring it. The exeption is " + ex.toString(), ex); } }
/** * Creates a new connection for the pool. This connection can participate in * the transactions. * * @return the connection from the database as PooledConnection object. */ @Override public Object getNewPoolConnection() throws PoolException { if (m_xads != null) { PooledConnection poolConn = null; try { poolConn = m_xads.getXAConnection(configProps.getUser(), configProps .getPassword()); } catch (SQLException sqx) { throw new PoolException(LocalizedStrings.TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_EXCEPTION_IN_CREATING_NEW_TRANSACTION_POOLEDCONNECTION.toLocalizedString(), sqx); } poolConn .addConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); return poolConn; } else { LogWriterI18n writer = TransactionUtils.getLogWriterI18n(); if (writer.fineEnabled()) writer.fine("TranxPoolCacheImpl::getNewConnection: ConnectionPoolCache not intialized with XADatasource"); throw new PoolException(LocalizedStrings.TranxPoolCacheImpl_TRANXPOOLCACHEIMPLGETNEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_XADATASOURCE.toLocalizedString()); } }
/** * This method destroys the connection. */ @Override void destroyPooledConnection(Object connectionObject) { try { ((PooledConnection) connectionObject) .removeConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); ((PooledConnection) connectionObject).close(); connectionObject = null; } catch (Exception ex) { LogWriterI18n writer = TransactionUtils.getLogWriterI18n(); if (writer.finerEnabled()) writer .finer( "AbstractPoolcache::destroyPooledConnection:Exception in closing the connection.Ignoring it. The exeption is " + ex.toString(), ex); } }
/** * Creates a new connection for the pool. * * @return the connection from the database as Object. * @throws PoolException */ @Override public Object getNewPoolConnection() throws PoolException { if (m_cpds != null) { PooledConnection poolConn = null; try { poolConn = m_cpds.getPooledConnection(configProps.getUser(), configProps.getPassword()); } catch (SQLException sqx) { throw new PoolException(LocalizedStrings.ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_EXCEPTION_IN_CREATING_NEW_POOLEDCONNECTION.toLocalizedString(), sqx); } poolConn .addConnectionEventListener((javax.sql.ConnectionEventListener) connEventListner); return poolConn; } else { LogWriterI18n writer = TransactionUtils.getLogWriterI18n(); if (writer.fineEnabled()) writer.fine("ConnectionPoolCacheImpl::geNewConnection: ConnectionPoolCache not intialized with ConnectionPoolDatasource"); throw new PoolException(LocalizedStrings.ConnectionPoolCacheImpl_CONNECTIONPOOLCACHEIMPLGENEWCONNECTION_CONNECTIONPOOLCACHE_NOT_INTIALIZED_WITH_CONNECTIONPOOLDATASOURCE.toLocalizedString()); } }
/** * Notifies all registered ConnectionEventListeners of ConnectionEvents. * Instantiates a new ConnectionEvent which wraps sqlException and invokes * either connectionClose or connectionErrorOccurred on listener as * appropriate. * * @param eventType * value indicating whether connectionClosed or * connectionErrorOccurred called * @param sqlException * the exception being thrown */ protected synchronized void callConnectionEventListeners(int eventType, SQLException sqlException) { if (this.connectionEventListeners == null) { return; } Iterator<Map.Entry<ConnectionEventListener, ConnectionEventListener>> iterator = this.connectionEventListeners.entrySet().iterator(); ConnectionEvent connectionevent = new ConnectionEvent(this, sqlException); while (iterator.hasNext()) { ConnectionEventListener connectioneventlistener = iterator.next().getValue(); if (eventType == CONNECTION_CLOSED_EVENT) { connectioneventlistener.connectionClosed(connectionevent); } else if (eventType == CONNECTION_ERROR_EVENT) { connectioneventlistener .connectionErrorOccurred(connectionevent); } } }
/** * Notify listeners, if there is any, about the connection status. * If e is null, the connection is properly closed. * @param e */ protected synchronized void notifyListener(SQLException e){ if(listeners != null && !listeners.isEmpty()){ Iterator<ConnectionEventListener> iter = listeners.iterator(); while(iter.hasNext()){ ConnectionEventListener listener = iter.next(); if(e == null){ //no exception listener.connectionClosed(new ConnectionEvent(this)); }else{ //exception occurred listener.connectionErrorOccurred(new ConnectionEvent(this, e)); } } } }