You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ma...@apache.org on 2003/07/02 03:13:03 UTC

cvs commit: db-ojb/src/jca/org/apache/ojb/otm/connector OTMJCAConnection.java

mattbaird    2003/07/01 18:13:03

  Modified:    src/jca/org/apache/ojb/otm/connector OTMJCAConnection.java
  Log:
  was leaking connections in the close() call.
  
  Revision  Changes    Path
  1.2       +32 -1     db-ojb/src/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java
  
  Index: OTMJCAConnection.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- OTMJCAConnection.java	1 Jul 2003 21:04:27 -0000	1.1
  +++ OTMJCAConnection.java	2 Jul 2003 01:13:02 -0000	1.2
  @@ -72,6 +72,7 @@
   public class OTMJCAConnection implements OTMConnection
   {
   	private OTMJCAManagedConnection m_managedConnection;
  +	private boolean m_closed = false;
   
   	public OTMJCAConnection(OTMJCAManagedConnection mc)
   	{
  @@ -91,71 +92,101 @@
   
   	public void makePersistent(Object o) throws LockingException
   	{
  +		checkStatus();
   		m_managedConnection.getConnection().makePersistent(o);
   	}
   
   	public void deletePersistent(Object o) throws LockingException
   	{
  +		checkStatus();
   		m_managedConnection.getConnection().deletePersistent(o);
   	}
   
   	public void lockForWrite(Object o) throws LockingException
   	{
  +		checkStatus();
   		m_managedConnection.getConnection().lockForWrite(o);
   	}
   
   	public Object getObjectByIdentity(Identity identity) throws LockingException
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getObjectByIdentity(identity);
   	}
   
   	public Object getObjectByIdentity(Identity identity, int i) throws LockingException
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getObjectByIdentity(identity, i);
   	}
   
   	public Iterator getIteratorByQuery(Query query)
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getIteratorByQuery(query);
   	}
   
   	public Iterator getIteratorByQuery(Query query, int i)
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getIteratorByQuery(query, i);
   	}
   
   	public Identity getIdentity(Object o)
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getIdentity(o);
   	}
   
   	public ClassDescriptor getDescriptorFor(Class aClass)
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getDescriptorFor(aClass);
   	}
   
   	public EditingContext getEditingContext()
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getEditingContext();
   	}
   
   	public void invalidate(Identity identity) throws LockingException
   	{
  +		checkStatus();
   		m_managedConnection.getConnection().invalidate(identity);
   	}
   
   	public EnhancedOQLQuery newOQLQuery()
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().newOQLQuery();
   	}
   
   	public int getCount(Query query)
   	{
  +		checkStatus();
   		return m_managedConnection.getConnection().getCount(query);
   	}
   
   	public void close()
   	{
  -		//m_managedConnection.getConnection().close();
  +		m_closed = true;
  +		if (m_managedConnection != null)
  +		{
  +			m_managedConnection.closeHandle(this);
  +		}
  +		m_managedConnection = null;
  +	}
  +
  +	protected void checkStatus() throws OTMConnectionRuntimeException
  +	{
  +		if (m_closed)
  +		{
  +			throw new OTMConnectionRuntimeException("Connection handle has been closed and is unusable");
  +		}
  +		if (m_managedConnection == null)
  +		{
  +			throw new OTMConnectionRuntimeException("Connection handle is not currently associated with a ManagedConnection");
  +		}
   	}
   }