From: David J. <d_j...@us...> - 2002-05-23 18:40:08
|
User: d_jencks Date: 02/05/23 11:40:07 Modified: src/main/org/jboss/resource/connectionmanager Tag: Branch_3_0 BaseConnectionManager2.java CachedConnectionInterceptor.java CachedConnectionManager.java ConnectionCacheListener.java Log: Added Erwin Guib's support for unshared connections as per spec Revision Changes Path No revision No revision 1.2.2.9 +28 -2 jbosscx/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java Index: BaseConnectionManager2.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/connectionmanager/BaseConnectionManager2.java,v retrieving revision 1.2.2.8 retrieving revision 1.2.2.9 diff -u -r1.2.2.8 -r1.2.2.9 --- BaseConnectionManager2.java 23 May 2002 13:15:23 -0000 1.2.2.8 +++ BaseConnectionManager2.java 23 May 2002 18:40:04 -0000 1.2.2.9 @@ -69,6 +69,7 @@ * Created: Wed Jan 2 12:16:09 2002 * * @author <a href="mailto:d_j...@us...">David Jencks</a> + * @author <a href="mailto:E....@ce...">Erwin Guib</a> * @version $$ * @jmx:mbean name="jboss.jca:service=BaseConnectionManager" * extends="org.jboss.system.ServiceMBean" @@ -94,6 +95,8 @@ private ManagedConnectionFactory mcf; + protected String mcfJndiName; + //private ObjectName securityDomainName; //for the future?? private String securityDomainJndiName; private SubjectSecurityManager /*SecurityDomain*/ securityDomain; @@ -363,6 +366,12 @@ "startManagedConnectionFactory", new Object[] {this}, new String[] {ConnectionManager.class.getName()}); + + // save the JNDI Name for this connector + // we need it later to check if the connector gets called from a + // bean with shared or unshared resource-ref + mcfJndiName = (String)getServer().getAttribute(managedConnectionFactoryName, + "JndiName"); } catch (Exception e) { @@ -531,8 +540,16 @@ * @exception ResourceException if an error occurs * @todo decide if the warning situation should throw an exception */ - public void reconnect(Collection conns) throws ResourceException + public void reconnect(Collection conns, Set unsharableResources) throws ResourceException { + // if we have an unshareable connection the association was not removed + // nothing to do + if(unsharableResources.contains(mcfJndiName)) + { + log.trace("reconnect for unshareable connection: nothing to do"); + return; + } + Map criToMCMap = new HashMap(); for (Iterator i = conns.iterator(); i.hasNext(); ) { @@ -563,8 +580,17 @@ } - public void disconnect(Collection crs) throws ResourceException + public void disconnect(Collection crs, Set unsharableResources) throws ResourceException + { + // if we have an unshareable connection do not remove the association + // nothing to do + if(unsharableResources.contains(mcfJndiName)) + { + log.trace("disconnect for unshareable connection: nothing to do"); + return; + } + Set mcs = new HashSet(); for (Iterator i = crs.iterator(); i.hasNext(); ) { 1.4.2.1 +56 -17 jbosscx/src/main/org/jboss/resource/connectionmanager/CachedConnectionInterceptor.java Index: CachedConnectionInterceptor.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/connectionmanager/CachedConnectionInterceptor.java,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -u -r1.4 -r1.4.2.1 --- CachedConnectionInterceptor.java 14 Apr 2002 01:11:05 -0000 1.4 +++ CachedConnectionInterceptor.java 23 May 2002 18:40:06 -0000 1.4.2.1 @@ -9,20 +9,12 @@ package org.jboss.resource.connectionmanager; - - -/** -* CachedConnectionInterceptor.java -* -* -* Created: Sat Jan 12 01:22:06 2002 -* -* @author <a href="mailto:d_j...@us...">David Jencks</a> -* @version -*/ import java.lang.reflect.Method; import java.rmi.RemoteException; import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.HashSet; import javax.ejb.RemoveException; import javax.management.MBeanServer; import javax.resource.ResourceException; @@ -39,6 +31,22 @@ import org.jboss.system.Service; import org.jboss.util.jmx.JMXExceptionDecoder; import org.jboss.util.jmx.MBeanServerLocator; +import org.jboss.metadata.BeanMetaData; +import org.jboss.metadata.ApplicationMetaData; +import org.jboss.metadata.ResourceRefMetaData; + + + +/** + * CachedConnectionInterceptor.java + * + * + * Created: Sat Jan 12 01:22:06 2002 + * + * @author <a href="mailto:d_j...@us...">David Jencks</a> + * @author <a href="mailto:E....@ce...">Erwin Guib</a> + * @version + */ public class CachedConnectionInterceptor extends AbstractInterceptor @@ -52,6 +60,9 @@ private EntityPersistenceManager pm; + // contains the JNDI names of unshareable resources + private Set unsharableResources = new HashSet(); + public CachedConnectionInterceptor () throws Exception { @@ -100,6 +111,33 @@ pm = ec.getPersistenceManager(); ec.setPersistenceManager(this); } // end of if () + + + // get the JNDI names for all resources that are referenced "Unshareable" + BeanMetaData bmd = container.getBeanMetaData(); + ApplicationMetaData appMetaData = bmd.getApplicationMetaData(); + ResourceRefMetaData resRefMetaData; + String jndiName; + + for (Iterator iter = bmd.getResourceReferences(); iter.hasNext(); ) + { + resRefMetaData = (ResourceRefMetaData)iter.next(); + jndiName = resRefMetaData.getJndiName(); + if(jndiName == null) + { + jndiName = appMetaData.getResourceByName(resRefMetaData.getResourceName()); + } + if(jndiName != null && resRefMetaData.isShareable() == false) + { + int i = jndiName.indexOf(':'); + if(jndiName.charAt(i + 1) == '/') + { + i++; + } + unsharableResources.add(jndiName.substring(i + 1)); + } + } + } /** @@ -112,6 +150,7 @@ ((EntityContainer)container).setPersistenceManager(pm); pm = null; } // end of if () + unsharableResources.clear(); } /** @@ -141,14 +180,14 @@ public Object invoke(Invocation mi) throws Exception { Object key = ((EnterpriseContext) mi.getEnterpriseContext()).getInstance(); - ccm.pushMetaAwareObject(key); + ccm.pushMetaAwareObject(key, unsharableResources); try { return getNext().invoke(mi); } finally { - ccm.popMetaAwareObject(); + ccm.popMetaAwareObject(unsharableResources); } // end of try-catch } @@ -170,14 +209,14 @@ { Object key = ctx.getInstance(); - ccm.pushMetaAwareObject(key); + ccm.pushMetaAwareObject(key, unsharableResources); try { return getNext().invokeHome(mi); } finally { - ccm.popMetaAwareObject(); + ccm.popMetaAwareObject(unsharableResources); } // end of try-catch @@ -343,14 +382,14 @@ Object key = ctx.getInstance(); try { - ccm.pushMetaAwareObject(key); + ccm.pushMetaAwareObject(key, unsharableResources); try { pm.storeEntity(ctx); } finally { - ccm.popMetaAwareObject(); + ccm.popMetaAwareObject(unsharableResources); } // end of try-catch } catch (ResourceException e) 1.2.2.1 +20 -20 jbosscx/src/main/org/jboss/resource/connectionmanager/CachedConnectionManager.java Index: CachedConnectionManager.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/connectionmanager/CachedConnectionManager.java,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -u -r1.2 -r1.2.2.1 --- CachedConnectionManager.java 6 Apr 2002 04:34:28 -0000 1.2 +++ CachedConnectionManager.java 23 May 2002 18:40:06 -0000 1.2.2.1 @@ -17,6 +17,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Map; +import java.util.Set; import javax.resource.ResourceException; import javax.transaction.SystemException; import javax.transaction.Transaction; @@ -38,6 +39,7 @@ * Created: Sat Jan 5 18:50:27 2002 * * @author <a href="mailto:d_j...@us...">David Jencks</a> + * @author <a href="mailto:E....@ce...">Erwin Guib</a> * @version * @jmx:mbean name="jboss.jca:service=CachedConnectionManager" * extends="org.jboss.system.Service" @@ -80,23 +82,16 @@ return this; } - //ServiceMBeanSupport - public String getName() - { - return "Cached Connection Manager"; - } - public void startService() throws Exception + protected void startService() throws Exception { - super.startService(); ServerVMClientUserTransaction.getSingleton().registerTxStartedListener(this); } - public void stopService() + protected void stopService() throws Exception { ServerVMClientUserTransaction.getSingleton().unregisterTxStartedListener(this); - super.stopService(); } //Object registration for meta-aware objects (i.e. this is called by interceptors) @@ -106,7 +101,8 @@ * @param key an <code>Object</code> value * @exception ResourceException if an error occurs */ - public void pushMetaAwareObject(final Object key) throws ResourceException + public void pushMetaAwareObject(final Object key, Set unsharableResources) + throws ResourceException { LinkedList stack = (LinkedList)currentObjects.get(); if (stack == null) @@ -127,12 +123,12 @@ if (!stack.isEmpty()) { Object oldKey = stack.getLast(); - disconnect(oldKey); + disconnect(oldKey, unsharableResources); } // end of if () } // end of else stack.addLast(key); - reconnect(key); + reconnect(key, unsharableResources); } /** @@ -141,7 +137,8 @@ * * @exception ResourceException if an error occurs */ - public void popMetaAwareObject() throws ResourceException + public void popMetaAwareObject(Set unsharableResources) + throws ResourceException { LinkedList stack = (LinkedList)currentObjects.get(); Object oldKey = stack.removeLast(); @@ -149,11 +146,11 @@ { log.trace("popped object: " + oldKey); } - disconnect(oldKey); + disconnect(oldKey, unsharableResources); if (!stack.isEmpty()) { Object key = stack.getLast(); - reconnect(key); + reconnect(key, unsharableResources); } // end of if () //Should we remove it if empty?? } @@ -273,7 +270,8 @@ } //called by UserTransaction after starting a transaction - public void userTransactionStarted() throws SystemException + public void userTransactionStarted() + throws SystemException { Object key = peekMetaAwareObject(); if (log.isTraceEnabled()) @@ -309,7 +307,8 @@ } - private void reconnect(Object key) throws ResourceException + private void reconnect(Object key, Set unsharableResources) + throws ResourceException //TODOappropriate cleanup??? { Map cmToConnectionsMap = null; @@ -329,13 +328,14 @@ { ConnectionCacheListener cm = (ConnectionCacheListener)i.next(); Collection conns = (Collection)cmToConnectionsMap.get(cm); - cm.reconnect(conns); + cm.reconnect(conns, unsharableResources); } // end of for () } } - private void disconnect(Object key) throws ResourceException + private void disconnect(Object key, Set unsharableResources) + throws ResourceException //TODOappropriate cleanup??? { Map cmToConnectionsMap = null; @@ -355,7 +355,7 @@ { ConnectionCacheListener cm = (ConnectionCacheListener)i.next(); Collection conns = (Collection)cmToConnectionsMap.get(cm); - cm.disconnect(conns); + cm.disconnect(conns, unsharableResources); } // end of for () } 1.1.2.1 +4 -2 jbosscx/src/main/org/jboss/resource/connectionmanager/ConnectionCacheListener.java Index: ConnectionCacheListener.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/connectionmanager/ConnectionCacheListener.java,v retrieving revision 1.1 retrieving revision 1.1.2.1 diff -u -r1.1 -r1.1.2.1 --- ConnectionCacheListener.java 24 Mar 2002 21:44:31 -0000 1.1 +++ ConnectionCacheListener.java 23 May 2002 18:40:06 -0000 1.1.2.1 @@ -10,6 +10,7 @@ package org.jboss.resource.connectionmanager; import java.util.Collection; +import java.util.Set; import javax.resource.ResourceException; import javax.transaction.SystemException; import javax.transaction.Transaction; @@ -23,6 +24,7 @@ * Created: Sat Jan 5 19:47:35 2002 * * @author <a href="mailto:d_j...@us...">David Jencks</a> + * @author <a href="mailto:E....@ce...">Erwin Guib</a> * @version */ @@ -31,8 +33,8 @@ void transactionStarted(Collection conns) throws SystemException; - void reconnect(Collection conns) throws ResourceException; + void reconnect(Collection conns, Set unsharableResources) throws ResourceException; - void disconnect(Collection conns) throws ResourceException; + void disconnect(Collection conns, Set unsharableResources) throws ResourceException; }// ConnectionCacheListener |