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 ar...@apache.org on 2006/08/15 20:46:15 UTC
svn commit: r431668 - in /db/ojb/trunk/proposals/otm/jca: ./ org/
org/apache/ org/apache/ojb/ org/apache/ojb/otm/ org/apache/ojb/otm/connector/
Author: arminw
Date: Tue Aug 15 11:46:14 2006
New Revision: 431668
URL: http://svn.apache.org/viewvc?rev=431668&view=rev
Log:
move OTM stuff to archive
Added:
db/ojb/trunk/proposals/otm/jca/
db/ojb/trunk/proposals/otm/jca/org/
db/ojb/trunk/proposals/otm/jca/org/apache/
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/JCAKit.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionEventListener.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionManager.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionMetaData.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRequestInfo.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRuntimeException.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnection.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnectionFactory.java
db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/Util.java
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/JCAKit.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/JCAKit.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/JCAKit.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/JCAKit.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,151 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import org.apache.ojb.broker.Identity;
+import org.apache.ojb.broker.PBKey;
+import org.apache.ojb.broker.PersistenceConfiguration;
+import org.apache.ojb.otm.Kit;
+import org.apache.ojb.otm.OTMConnection;
+import org.apache.ojb.otm.copy.ObjectCopyStrategy;
+import org.apache.ojb.otm.core.Transaction;
+import org.apache.ojb.otm.lock.map.LockMap;
+import org.apache.ojb.otm.lock.wait.LockWaitStrategy;
+import org.apache.ojb.otm.swizzle.Swizzling;
+
+import javax.naming.Reference;
+import javax.resource.Referenceable;
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ManagedConnectionFactory;
+import java.io.Serializable;
+
+/**
+ * represents the Kit used for JCA
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class JCAKit implements Kit, Serializable, Referenceable
+{
+ private OTMJCAManagedConnectionFactory m_managedConnectionFactory;
+ private ConnectionManager m_connectionManager;
+ private Reference m_reference;
+
+ public JCAKit(ManagedConnectionFactory mcf, ConnectionManager cm)
+ {
+ Util.log("In JCAKit");
+ m_managedConnectionFactory = (OTMJCAManagedConnectionFactory) mcf;
+
+ if (cm == null)
+ m_connectionManager = new OTMConnectionManager();
+ else
+ m_connectionManager = cm;
+ }
+
+ private Kit getKit()
+ {
+ try
+ {
+ return m_managedConnectionFactory.getKit();
+ }
+ catch (ResourceException e)
+ {
+ throw new OTMConnectionRuntimeException(e);
+ }
+ }
+
+ /**
+ * Kit implementation
+ */
+ public OTMConnection acquireConnection(PBKey pbkey)
+ {
+ Util.log("In JCAKit.getConnection,1");
+ try
+ {
+ OTMConnectionRequestInfo info = new OTMConnectionRequestInfo(pbkey);
+ return (OTMConnection) m_connectionManager.allocateConnection(m_managedConnectionFactory, info);
+ }
+ catch (ResourceException ex)
+ {
+ throw new OTMConnectionRuntimeException(ex);
+ }
+ }
+
+ public OTMConnection acquireConnection(PersistenceConfiguration persistenceConf)
+ {
+ Util.log("In JCAKit.getConnection,1");
+ try
+ {
+ OTMConnectionRequestInfo info = new OTMConnectionRequestInfo(persistenceConf.getKey());
+ return (OTMConnection) m_connectionManager.allocateConnection(m_managedConnectionFactory, info);
+ }
+ catch (ResourceException ex)
+ {
+ throw new OTMConnectionRuntimeException(ex);
+ }
+ }
+
+ public Transaction getTransaction(OTMConnection otmConnection)
+ {
+ if (otmConnection instanceof OTMJCAConnection)
+ {
+ return getKit().getTransaction(((OTMJCAConnection)otmConnection).getConnection());
+ }
+ else
+ return getKit().getTransaction(otmConnection);
+ }
+
+ public Swizzling getSwizzlingStrategy()
+ {
+ return getKit().getSwizzlingStrategy();
+ }
+
+ public LockWaitStrategy getLockWaitStrategy()
+ {
+ return getKit().getLockWaitStrategy();
+ }
+
+ public LockMap getLockMap()
+ {
+ return getKit().getLockMap();
+ }
+
+ public ObjectCopyStrategy getCopyStrategy(Identity identity)
+ {
+ return getKit().getCopyStrategy(identity);
+ }
+
+
+ public boolean isImplicitLockingUsed()
+ {
+ return getKit().isImplicitLockingUsed();
+ }
+
+ /**
+ * Referenceable implementation
+ */
+
+ public void setReference(Reference reference)
+ {
+ this.m_reference = reference;
+ }
+
+ public Reference getReference()
+ {
+ return m_reference;
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionEventListener.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionEventListener.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionEventListener.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionEventListener.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,101 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import javax.resource.spi.ConnectionEvent;
+import javax.resource.spi.ConnectionEventListener;
+import java.util.Vector;
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMConnectionEventListener implements ConnectionEventListener
+{
+ private Vector m_listeners = null;
+
+ public OTMConnectionEventListener()
+ {
+ m_listeners = new Vector();
+ }
+
+ void sendEvent(ConnectionEvent ce)
+ {
+ Vector list = (Vector) m_listeners.clone();
+ int size = list.size();
+ for (int i = 0; i < size; i++)
+ {
+ ConnectionEventListener l =
+ (ConnectionEventListener) list.elementAt(i);
+ switch (ce.getId())
+ {
+ case ConnectionEvent.CONNECTION_CLOSED:
+ l.connectionClosed(ce);
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_STARTED:
+ l.localTransactionStarted(ce);
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_COMMITTED:
+ l.localTransactionCommitted(ce);
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK:
+ l.localTransactionRolledback(ce);
+ break;
+ case ConnectionEvent.CONNECTION_ERROR_OCCURRED:
+ l.connectionErrorOccurred(ce);
+ break;
+ default:
+ throw new IllegalArgumentException("Illegal eventType: " + ce.getId());
+ }
+ }
+ }
+
+ void addConnectorListener(ConnectionEventListener l)
+ {
+ m_listeners.addElement(l);
+ }
+
+ void removeConnectorListener(ConnectionEventListener l)
+ {
+ m_listeners.removeElement(l);
+ }
+
+ public void connectionClosed(ConnectionEvent event)
+ {
+ // do nothing. The event is sent by the ConnectionImpl class
+ }
+
+ public void connectionErrorOccurred(ConnectionEvent event)
+ {
+ sendEvent(event);
+ }
+
+ public void localTransactionCommitted(ConnectionEvent event)
+ {
+ sendEvent(event);
+ }
+
+ public void localTransactionStarted(ConnectionEvent event)
+ {
+ sendEvent(event);
+ }
+
+ public void localTransactionRolledback(ConnectionEvent event)
+ {
+ sendEvent(event);
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionManager.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionManager.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionManager.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionManager.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,45 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.ManagedConnection;
+import javax.resource.spi.ManagedConnectionFactory;
+import java.io.Serializable;
+
+/**
+ * @author matthew.baird
+ *
+ */
+public class OTMConnectionManager
+ implements ConnectionManager, Serializable
+{
+
+ public OTMConnectionManager()
+ {
+ Util.log("In OTMConnectionManager");
+ }
+
+ public Object allocateConnection(ManagedConnectionFactory mcf, ConnectionRequestInfo info)
+ throws ResourceException
+ {
+ Util.log("In OTMConnectionManager.allocateConnection");
+ ManagedConnection mc = mcf.createManagedConnection(null, info);
+ return mc.getConnection(null, info);
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionMetaData.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionMetaData.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionMetaData.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionMetaData.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,66 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import javax.resource.ResourceException;
+import javax.resource.spi.ManagedConnectionMetaData;
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMConnectionMetaData implements ManagedConnectionMetaData
+{
+
+ private OTMJCAManagedConnection mc;
+
+ public OTMConnectionMetaData(OTMJCAManagedConnection mc)
+ {
+ System.out.println("In OTMConnectionMetaData.constructor");
+ this.mc = mc;
+ }
+
+ public String getEISProductName()
+ throws ResourceException
+ {
+ Util.log("In OTMConnectionMetaData.getEISProductName");
+ return "Apache OJB";
+ }
+
+ public String getEISProductVersion()
+ throws ResourceException
+ {
+ Util.log("In OTMConnectionMetaData.getEISProductVersion");
+ return "1.0";
+
+ }
+
+ public int getMaxConnections()
+ throws ResourceException
+ {
+ Util.log("In OTMConnectionMetaData.getMaxConnections");
+ return 50; //MBAIRD: Remove this hardcoding.
+ }
+
+ public String getUserName()
+ throws ResourceException
+ {
+ return mc.getUserName();
+ }
+
+
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRequestInfo.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRequestInfo.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRequestInfo.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRequestInfo.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,63 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import org.apache.ojb.broker.PBKey;
+import org.apache.ojb.broker.PersistenceBrokerFactory;
+
+import javax.resource.spi.ConnectionRequestInfo;
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMConnectionRequestInfo
+ implements ConnectionRequestInfo
+{
+ private PBKey m_pbKey;
+
+ public OTMConnectionRequestInfo(PBKey pbkey)
+ {
+ Util.log("In OTMConnectionRequestInfo");
+ m_pbKey = pbkey;
+ }
+
+ public PBKey getPbKey()
+ {
+ if (m_pbKey == null)
+ return PersistenceBrokerFactory.getDefaultKey();
+ else
+ return m_pbKey;
+ }
+
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (!(o instanceof OTMConnectionRequestInfo)) return false;
+
+ final OTMConnectionRequestInfo otmConnectionRequestInfo = (OTMConnectionRequestInfo) o;
+
+ if (m_pbKey != null ? !m_pbKey.equals(otmConnectionRequestInfo.m_pbKey) : otmConnectionRequestInfo.m_pbKey != null) return false;
+
+ return true;
+ }
+
+ public int hashCode()
+ {
+ return (m_pbKey != null ? m_pbKey.hashCode() : 0);
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRuntimeException.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRuntimeException.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRuntimeException.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMConnectionRuntimeException.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,45 @@
+package org.apache.ojb.otm.connector;
+
+import org.apache.ojb.broker.OJBRuntimeException;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMConnectionRuntimeException extends OJBRuntimeException
+{
+ public OTMConnectionRuntimeException()
+ {
+ }
+
+ public OTMConnectionRuntimeException(String message)
+ {
+ super(message);
+ }
+
+ public OTMConnectionRuntimeException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+
+ public OTMConnectionRuntimeException(Throwable cause)
+ {
+ super(cause);
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAConnection.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,228 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import org.apache.ojb.broker.Identity;
+import org.apache.ojb.broker.cache.ObjectCache;
+import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.odmg.oql.EnhancedOQLQuery;
+import org.apache.ojb.otm.EditingContext;
+import org.apache.ojb.otm.OTMConnection;
+import org.apache.ojb.otm.core.Transaction;
+import org.apache.ojb.otm.lock.LockingException;
+import org.odmg.OQLQuery;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ *
+ * Wraps the OTMConnection and associates/disassociates the connection
+ * handle.
+ *
+ * kudos to David Jencks for inspiration, and pointers.
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a>
+ */
+
+public class OTMJCAConnection implements OTMConnection
+{
+ private OTMJCAManagedConnection m_managedConnection;
+ private boolean m_closed = false;
+
+ public OTMJCAConnection(OTMJCAManagedConnection mc)
+ {
+ Util.log("In OTMJCAConnection");
+ this.m_managedConnection = mc;
+ }
+
+ void setManagedConnection(OTMJCAManagedConnection managedConnection)
+ {
+ m_managedConnection = managedConnection;
+ }
+
+ public void makePersistent(Object o) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().makePersistent(o);
+ }
+
+ public void deletePersistent(Object o) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().deletePersistent(o);
+ }
+
+ public void lockForWrite(Object o) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().lockForWrite(o);
+ }
+
+ public Object getObjectByIdentity(Identity identity) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getObjectByIdentity(identity);
+ }
+
+ public Object getObjectByIdentity(Identity identity, int i) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getObjectByIdentity(identity, i);
+ }
+
+ public Iterator getIteratorByQuery(Query query)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getIteratorByQuery(query);
+ }
+
+ public Iterator getIteratorByQuery(Query query, int i)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getIteratorByQuery(query, i);
+ }
+
+ public Iterator getIteratorByOQLQuery(OQLQuery query)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getIteratorByOQLQuery(query);
+ }
+
+ public Iterator getIteratorByOQLQuery(OQLQuery query, int lock)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getIteratorByOQLQuery(query, lock);
+ }
+
+ public Collection getCollectionByQuery(Query query, int lock)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getCollectionByQuery(query, lock);
+ }
+
+ public Collection getCollectionByQuery(Query query)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getCollectionByQuery(query);
+ }
+
+ public Identity getIdentity(Object o)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getIdentity(o);
+ }
+
+ public ClassDescriptor getDescriptorFor(Class aClass)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getDescriptorFor(aClass);
+ }
+
+ public EditingContext getEditingContext()
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getEditingContext();
+ }
+
+ public void invalidate(Identity identity) throws LockingException
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().invalidate(identity);
+ }
+
+ public void invalidateAll() throws LockingException
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().invalidateAll();
+ }
+
+ public EnhancedOQLQuery newOQLQuery()
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().newOQLQuery();
+ }
+
+ public EnhancedOQLQuery newOQLQuery(int lock)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().newOQLQuery(lock);
+ }
+
+ public int getCount(Query query)
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().getCount(query);
+ }
+
+ public void refresh(Object object)
+ {
+ isValidUnderlyingConnection();
+ m_managedConnection.getConnection().refresh(object);
+ }
+
+ public void close()
+ {
+ m_closed = true;
+ if (m_managedConnection != null)
+ {
+ m_managedConnection.closeHandle(this);
+ }
+ m_managedConnection = null;
+ }
+
+ public boolean isClosed()
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().isClosed();
+ }
+
+ public ObjectCache serviceObjectCache()
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection().serviceObjectCache();
+ }
+
+ private void isValidUnderlyingConnection() throws OTMConnectionRuntimeException
+ {
+ if (m_closed)
+ {
+ throw new OTMConnectionRuntimeException("OTMConnection handle is closed and unusable.");
+ }
+ if (m_managedConnection == null)
+ {
+ throw new OTMConnectionRuntimeException("Connection handle is not currently associated with a ManagedConnection");
+ }
+ }
+
+ OTMConnection getConnection()
+ {
+ isValidUnderlyingConnection();
+ return m_managedConnection.getConnection();
+ }
+
+ public Transaction getTransaction()
+ {
+ return this.m_managedConnection.getTransaction();
+ }
+
+ public void setTransaction(Transaction t)
+ {
+ this.m_managedConnection.setTransaction(t);
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnection.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnection.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnection.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnection.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,383 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import org.apache.ojb.broker.PBKey;
+import org.apache.ojb.otm.OTMConnection;
+import org.apache.ojb.otm.core.Transaction;
+import org.apache.ojb.otm.core.TransactionException;
+
+import javax.resource.NotSupportedException;
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionEvent;
+import javax.resource.spi.ConnectionEventListener;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.LocalTransaction;
+import javax.resource.spi.ManagedConnection;
+import javax.resource.spi.ManagedConnectionFactory;
+import javax.resource.spi.ManagedConnectionMetaData;
+import javax.security.auth.Subject;
+import javax.transaction.xa.XAResource;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMJCAManagedConnection implements ManagedConnection, LocalTransaction
+{
+ private PBKey m_pbKey;
+ private OTMJCAManagedConnectionFactory m_managedConnectionFactory;
+ private PrintWriter m_logWriter;
+ private boolean m_destroyed;
+ private final Set m_handles = new HashSet();
+ private final Collection m_connectionEventListeners = new ArrayList();
+ private boolean m_managed = false;
+ /**
+ * the wrapped connection
+ */
+ private OTMConnection m_connection;
+ private Transaction m_tx;
+
+ OTMJCAManagedConnection(ManagedConnectionFactory mcf, OTMConnection conn, PBKey pbKey)
+ {
+ Util.log("In OTMJCAManagedConnection");
+ m_managedConnectionFactory = (OTMJCAManagedConnectionFactory) mcf;
+ m_pbKey = pbKey;
+ m_connection = conn;
+ }
+
+ /**
+ * get the underlying wrapped connection
+ * @return OTMConnection raw connection to the OTM.
+ */
+ OTMConnection getConnection()
+ {
+ if (m_connection == null)
+ {
+ OTMConnectionRuntimeException ex = new OTMConnectionRuntimeException("Connection is null.");
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ }
+ return m_connection;
+ }
+
+ public Transaction getTransaction()
+ {
+ return this.m_tx;
+ }
+
+ public void setTransaction(Transaction tx)
+ {
+ if (this.m_tx != null) throw new IllegalStateException("Connection already has Transaction");
+ this.m_tx = tx;
+ }
+
+ public String getUserName()
+ {
+ return m_pbKey.getUser();
+ }
+
+ public Object getConnection(Subject subject, ConnectionRequestInfo connectionRequestInfo)
+ throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.getConnection");
+ OTMJCAConnection myCon = new OTMJCAConnection(this);
+ synchronized (m_handles)
+ {
+ m_handles.add(myCon);
+ }
+ return myCon;
+ }
+
+ public void destroy()
+ {
+ Util.log("In OTMJCAManagedConnection.destroy");
+ cleanup();
+ m_connection.close();
+ m_destroyed = true;
+ }
+
+ public void cleanup()
+ {
+ Util.log("In OTMJCAManagedConnection.cleanup");
+ synchronized (m_handles)
+ {
+ for (Iterator i = m_handles.iterator(); i.hasNext();)
+ {
+ OTMJCAConnection lc = (OTMJCAConnection) i.next();
+ lc.setManagedConnection(null);
+ }
+ m_handles.clear();
+ }
+ }
+
+ void closeHandle(OTMJCAConnection handle)
+ {
+ synchronized (m_handles)
+ {
+ m_handles.remove(handle);
+ }
+ sendEvents(ConnectionEvent.CONNECTION_CLOSED, null, handle);
+ }
+
+ public void associateConnection(Object connection)
+ {
+ Util.log("In OTMJCAManagedConnection.associateConnection");
+ if (connection == null)
+ {
+ throw new OTMConnectionRuntimeException("Cannot associate a null connection");
+ }
+ if (!(connection instanceof OTMJCAConnection))
+ {
+ throw new OTMConnectionRuntimeException("Cannot associate a connection of type: " + connection.getClass().getName() + " to a handle that manages: " + OTMJCAConnection.class.getName());
+ }
+ ((OTMJCAConnection) connection).setManagedConnection(this);
+ synchronized (m_handles)
+ {
+ m_handles.add(connection);
+ }
+ }
+
+ public void addConnectionEventListener(ConnectionEventListener cel)
+ {
+ synchronized (m_connectionEventListeners)
+ {
+ m_connectionEventListeners.add(cel);
+ }
+ }
+
+ public void removeConnectionEventListener(ConnectionEventListener cel)
+ {
+ synchronized (m_connectionEventListeners)
+ {
+ m_connectionEventListeners.remove(cel);
+ }
+ }
+
+ public XAResource getXAResource()
+ throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.getXAResource");
+ throw new NotSupportedException("public XAResource getXAResource() not supported in this release.");
+ }
+
+ /**
+ * the OTMConnection is the transaction
+ * @return
+ */
+ public LocalTransaction getLocalTransaction()
+ {
+ Util.log("In OTMJCAManagedConnection.getLocalTransaction");
+ return this;
+ }
+
+ public ManagedConnectionMetaData getMetaData()
+ throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.getMetaData");
+ return new OTMConnectionMetaData(this);
+ }
+
+ public void setLogWriter(PrintWriter out)
+ throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.setLogWriter");
+ m_logWriter = out;
+ }
+
+ public PrintWriter getLogWriter()
+ throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.getLogWriter");
+ return m_logWriter;
+ }
+
+ boolean isDestroyed()
+ {
+ Util.log("In OTMJCAManagedConnection.isDestroyed");
+ return m_destroyed;
+ }
+
+ ManagedConnectionFactory getManagedConnectionFactory()
+ {
+ Util.log("In OTMJCAManagedConnection.getManagedConnectionFactory");
+ return m_managedConnectionFactory;
+ }
+
+ public void begin() throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.begin");
+ if (!isManaged())
+ {
+ try
+ {
+ m_tx = m_managedConnectionFactory.getKit().getTransaction(m_connection);
+ m_tx.begin();
+ setManaged(true);
+ }
+ catch (TransactionException e)
+ {
+ ResourceException ex = new ResourceException(e.getMessage());
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+ else
+ {
+ ResourceException ex = new ResourceException("You probably called begin again without calling Commit or Rollback, OTM does not support nested Local Transactions.");
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+
+ public void commit() throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.commit");
+ if (isManaged())
+ {
+ try
+ {
+ setManaged(false);
+ m_tx.commit();
+ }
+ catch (TransactionException e)
+ {
+ m_tx.rollback();
+ ResourceException ex = new ResourceException(e.getMessage());
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+ else
+ {
+ ResourceException ex = new ResourceException("Cannot call commit when you are not in a Local Transaction.");
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+
+ public void rollback() throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnection.rollback");
+ if (isManaged())
+ {
+ try
+ {
+ m_tx.rollback();
+ setManaged(false);
+ }
+ catch (TransactionException e)
+ {
+ ResourceException ex = new ResourceException(e.getMessage());
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+ else
+ {
+ ResourceException ex = new ResourceException("Cannot call rollback when you are not in a Local Transaction.");
+ sendEvents(ConnectionEvent.CONNECTION_ERROR_OCCURRED, ex, null);
+ throw ex;
+ }
+ }
+
+ private boolean isManaged()
+ {
+ return m_managed;
+ }
+
+ private void setManaged(boolean flag)
+ {
+ m_managed = flag;
+ }
+
+ /**
+ * Section 6.5.6 of the JCA 1.5 spec instructs ManagedConnection instances to notify connection listeners with
+ * close/error and local transaction-related events to its registered set of listeners.
+ *
+ * The events for begin/commit/rollback are only sent if the application server did NOT
+ * initiate the actions.
+ *
+ * This method dispatchs all events to the listeners based on the eventType
+ * @param eventType as enumerated in the ConnectionEvents interface
+ * @param ex an optional exception if we are sending an error message
+ * @param connectionHandle an optional connectionHandle if we have access to it.
+ */
+ void sendEvents(int eventType, Exception ex, Object connectionHandle)
+ {
+ ConnectionEvent ce = null;
+ if (ex == null)
+ {
+ ce = new ConnectionEvent(this, eventType);
+ }
+ else
+ {
+ ce = new ConnectionEvent(this, eventType, ex);
+ }
+ ce.setConnectionHandle(connectionHandle);
+ Collection copy = null;
+ synchronized (m_connectionEventListeners)
+ {
+ copy = new ArrayList(m_connectionEventListeners);
+ }
+ switch (ce.getId())
+ {
+ case ConnectionEvent.CONNECTION_CLOSED:
+ for (Iterator i = copy.iterator(); i.hasNext();)
+ {
+ ConnectionEventListener cel = (ConnectionEventListener) i.next();
+ cel.connectionClosed(ce);
+ }
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_STARTED:
+ for (Iterator i = copy.iterator(); i.hasNext();)
+ {
+ ConnectionEventListener cel = (ConnectionEventListener) i.next();
+ cel.localTransactionStarted(ce);
+ }
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_COMMITTED:
+ for (Iterator i = copy.iterator(); i.hasNext();)
+ {
+ ConnectionEventListener cel = (ConnectionEventListener) i.next();
+ cel.localTransactionCommitted(ce);
+ }
+ break;
+ case ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK:
+ for (Iterator i = copy.iterator(); i.hasNext();)
+ {
+ ConnectionEventListener cel = (ConnectionEventListener) i.next();
+ cel.localTransactionRolledback(ce);
+ }
+ break;
+ case ConnectionEvent.CONNECTION_ERROR_OCCURRED:
+ for (Iterator i = copy.iterator(); i.hasNext();)
+ {
+ ConnectionEventListener cel = (ConnectionEventListener) i.next();
+ cel.connectionErrorOccurred(ce);
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Illegal eventType: " + ce.getId());
+ }
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnectionFactory.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnectionFactory.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnectionFactory.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/OTMJCAManagedConnectionFactory.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,153 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+import org.apache.ojb.broker.PBKey;
+import org.apache.ojb.broker.PersistenceConfiguration;
+import org.apache.ojb.otm.Kit;
+import org.apache.ojb.otm.OTMConnection;
+import org.apache.ojb.otm.kit.SimpleKit;
+
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.resource.spi.ManagedConnection;
+import javax.resource.spi.ManagedConnectionFactory;
+import javax.security.auth.Subject;
+import java.io.PrintWriter;
+import java.io.Serializable;
+import java.sql.DriverManager;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class OTMJCAManagedConnectionFactory
+ implements ManagedConnectionFactory, Serializable
+{
+ private Kit m_kit;
+
+ private synchronized void initialize()
+ {
+ if (m_kit == null)
+ {
+ m_kit = SimpleKit.getInstance();
+ }
+ }
+
+ public Kit getKit() throws ResourceException
+ {
+ initialize();
+ return m_kit;
+ }
+
+ public OTMJCAManagedConnectionFactory()
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.constructor");
+ }
+
+ public Object createConnectionFactory(ConnectionManager cxManager) throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.createConnectionFactory,1");
+ return new JCAKit(this, cxManager);
+ }
+
+ public Object createConnectionFactory() throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.createManagedFactory,2");
+ return new JCAKit(this, null);
+ }
+
+ /**
+ * return a new managed connection. This connection is wrapped around the real connection and delegates to it
+ * to get work done.
+ * @param subject
+ * @param info
+ * @return
+ */
+ public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo info)
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.createManagedConnection");
+ try
+ {
+ Kit kit = getKit();
+ PBKey key = ((OTMConnectionRequestInfo) info).getPbKey();
+ if(true)
+ {
+ // TODO: Fix this! aquireConnection needs a PC instance
+ throw new UnsupportedOperationException("TODO: Fix this! aquireConnection needs a PC instance");
+ }
+ OTMConnection connection = kit.acquireConnection(null);
+ return new OTMJCAManagedConnection(this, connection, key);
+ }
+ catch (ResourceException e)
+ {
+ throw new OTMConnectionRuntimeException(e.getMessage());
+ }
+ }
+
+ public ManagedConnection matchManagedConnections(Set connectionSet, Subject subject, ConnectionRequestInfo info)
+ throws ResourceException
+ {
+ Util.log("OTMJCAManagedConnectionFactory::matchManagedConnections called with " + connectionSet.size() + " connections.");
+ for (Iterator i = connectionSet.iterator(); i.hasNext();)
+ {
+ Object o = i.next();
+ if (o instanceof OTMJCAManagedConnection)
+ {
+ // all idle connections are identical
+ return (OTMJCAManagedConnection) o;
+ }
+ }
+ Util.log("OTMJCAManagedConnectionFactory::No matched connections");
+ return null;
+ }
+
+ public void setLogWriter(PrintWriter out) throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.setLogWriter");
+ }
+
+ public PrintWriter getLogWriter() throws ResourceException
+ {
+ Util.log("In OTMJCAManagedConnectionFactory.getLogWriter");
+ return DriverManager.getLogWriter();
+ }
+
+ public boolean equals(Object obj)
+ {
+ if (obj == null)
+ return false;
+ if (obj instanceof OTMJCAManagedConnectionFactory)
+ {
+ int hash1 = ((OTMJCAManagedConnectionFactory) obj).hashCode();
+ int hash2 = hashCode();
+ return hash1 == hash2;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public int hashCode()
+ {
+ return 1;
+ }
+}
Added: db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/Util.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/Util.java?rev=431668&view=auto
==============================================================================
--- db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/Util.java (added)
+++ db/ojb/trunk/proposals/otm/jca/org/apache/ojb/otm/connector/Util.java Tue Aug 15 11:46:14 2006
@@ -0,0 +1,32 @@
+package org.apache.ojb.otm.connector;
+
+/* Copyright 2003-2004 The Apache Software Foundation
+ *
+ * Licensed 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.
+ */
+
+/**
+ *
+ * @author <a href="mailto:mattbaird@yahoo.com">Matthew Baird<a>
+ */
+
+public class Util
+{
+ private static final boolean VERBOSE = false;
+
+ public static final void log(String toLog)
+ {
+ if (VERBOSE)
+ System.out.println(toLog);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org