User: starksm
Date: 02/04/12 14:39:48
Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc
JDBCCreateBeanClassInstanceCommand.java
JDBCQueryManager.java JDBCStoreManager.java
Log:
Replace container references with WeakReferences to allow the container
to be garbage collected after undeployment.
Revision Changes Path
1.4 +13 -10
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCCreateBeanClassInstanceCommand.java
Index: JDBCCreateBeanClassInstanceCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCCreateBeanClassInstanceCommand.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- JDBCCreateBeanClassInstanceCommand.java 28 Jan 2002 21:44:43 -0000 1.3
+++ JDBCCreateBeanClassInstanceCommand.java 12 Apr 2002 21:39:47 -0000 1.4
@@ -7,6 +7,7 @@
package org.jboss.ejb.plugins.cmp.jdbc;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import org.jboss.ejb.EntityContainer;
@@ -23,25 +24,26 @@
* <FIX-ME>should not generat a subclass for ejb 1.1</FIX-ME>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public class JDBCCreateBeanClassInstanceCommand {
- private EntityContainer container;
+ private WeakReference container;
private JDBCEntityBridge entityBridge;
private Class beanClass;
private Constructor beanProxyConstructor;
public JDBCCreateBeanClassInstanceCommand(JDBCStoreManager manager)
- throws Exception {
-
- container = manager.getContainer();
+ throws Exception
+ {
+ EntityContainer theContainer = manager.getContainer();
+ container = new WeakReference(theContainer);
entityBridge = manager.getEntityBridge();
- beanClass = container.getBeanClass();
+ beanClass = theContainer.getBeanClass();
// use proxy generator to create one implementation
EntityBridgeInvocationHandler handler = new EntityBridgeInvocationHandler(
- container,
+ theContainer,
entityBridge,
beanClass);
Class[] classes = new Class[] { beanClass };
@@ -57,13 +59,14 @@
execute();
}
- public Object execute() throws Exception {
+ public Object execute() throws Exception
+ {
+ EntityContainer theContainer = (EntityContainer) container.get();
EntityBridgeInvocationHandler handler = new EntityBridgeInvocationHandler(
- container,
+ theContainer,
entityBridge,
beanClass);
return beanProxyConstructor.newInstance(new Object[]{handler});
}
}
-
1.5 +134 -93
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCQueryManager.java
Index: JDBCQueryManager.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCQueryManager.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- JDBCQueryManager.java 26 Feb 2002 23:52:01 -0000 1.4
+++ JDBCQueryManager.java 12 Apr 2002 21:39:47 -0000 1.5
@@ -32,160 +32,187 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Joe Shevland</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Justin Forder</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
-public class JDBCQueryManager {
+public class JDBCQueryManager
+{
private final Map knownQueries = new HashMap();
private final JDBCStoreManager manager;
- public JDBCQueryManager(JDBCStoreManager manager) {
+ public JDBCQueryManager(JDBCStoreManager manager)
+ {
this.manager = manager;
}
-
- public JDBCQueryCommand getQueryCommand(Method queryMethod)
- throws FinderException {
+ public JDBCQueryCommand getQueryCommand(Method queryMethod)
+ throws FinderException
+ {
+
JDBCQueryCommand queryCommand =
- (JDBCQueryCommand)knownQueries.get(queryMethod);
-
- if(queryCommand == null) {
+ (JDBCQueryCommand)knownQueries.get(queryMethod);
+
+ if(queryCommand == null)
+ {
throw new FinderException("Unknown query: " + queryMethod);
}
return queryCommand;
}
-
- public void start() throws DeploymentException {
+
+ public void start() throws DeploymentException
+ {
Logger log = Logger.getLogger(
- this.getClass().getName() +
- "." +
- manager.getMetaData().getName());
+ this.getClass().getName() +
+ "." +
+ manager.getMetaData().getName());
- JDBCCommandFactory factory = manager.getCommandFactory();
+ JDBCCommandFactory factory = manager.getCommandFactory();
Class homeClass = manager.getContainer().getHomeClass();
Class localHomeClass = manager.getContainer().getLocalHomeClass();
-
- //
+
+ //
// findByPrimaryKey
//
JDBCEntityBridge entity = manager.getEntityBridge();
- if(homeClass != null) {
- try {
+ if(homeClass != null)
+ {
+ try
+ {
// try to get the finder method on the home interface
Method method = homeClass.getMethod(
- "findByPrimaryKey",
- new Class[] {entity.getPrimaryKeyClass()});
+ "findByPrimaryKey",
+ new Class[]
+ {entity.getPrimaryKeyClass()});
// got it add it to known finders
JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(method);
knownQueries.put(
- method,
- factory.createFindByPrimaryKeyQuery(q));
-
+ method,
+ factory.createFindByPrimaryKeyQuery(q));
+
log.debug("Added findByPrimaryKey query command for " +
- "home interface");
- } catch(NoSuchMethodException e) {
+ "home interface");
+ } catch(NoSuchMethodException e)
+ {
throw new DeploymentException("Home interface does not " +
- "have a findByPrimaryKey method");
+ "have a findByPrimaryKey method");
}
}
-
- if(localHomeClass != null) {
- try {
+
+ if(localHomeClass != null)
+ {
+ try
+ {
// try to get the finder method on the local home interface
Method method = localHomeClass.getMethod(
- "findByPrimaryKey",
- new Class[] {entity.getPrimaryKeyClass()});
+ "findByPrimaryKey",
+ new Class[]
+ {entity.getPrimaryKeyClass()});
// got it add it to known finders
JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(method);
knownQueries.put(
- method,
- factory.createFindByPrimaryKeyQuery(q));
-
+ method,
+ factory.createFindByPrimaryKeyQuery(q));
+
log.debug("Added findByPrimaryKey query command for " +
- "local home interface");
- } catch(NoSuchMethodException e) {
+ "local home interface");
+ } catch(NoSuchMethodException e)
+ {
throw new DeploymentException("Local home interface does " +
- "not have a findByPrimaryKey method");
+ "not have a findByPrimaryKey method");
}
}
-
+
//
// Custom finders - Overrides defined and automatic finders.
//
Class ejbClass = manager.getMetaData().getEntityClass();
-
- Method[] customMethods = ejbClass.getMethods();
- for (int i = 0; i < customMethods.length; i++) {
+
+ Method[] customMethods = ejbClass.getMethods();
+ for (int i = 0; i < customMethods.length; i++)
+ {
Method m = customMethods[i];
String methodName = m.getName();
- if(methodName.startsWith("ejbFind")) {
+ if(methodName.startsWith("ejbFind"))
+ {
String interfaceName = "f" + methodName.substring(4);
-
- if(homeClass != null) {
- try {
+
+ if(homeClass != null)
+ {
+ try
+ {
// try to get the finder method on the home interface
Method interfaceMethod = homeClass.getMethod(
- interfaceName,
- m.getParameterTypes());
+ interfaceName,
+ m.getParameterTypes());
// got it add it to known finders
knownQueries.put(
- interfaceMethod,
- new JDBCCustomFinderQuery(manager, m));
-
+ interfaceMethod,
+ new JDBCCustomFinderQuery(manager, m));
+
log.debug("Added custom finder " + methodName +
- " on home interface");
- } catch(NoSuchMethodException e) {
+ " on home interface");
+ } catch(NoSuchMethodException e)
+ {
// this is ok method may not be defined on this interface
}
}
-
- if(localHomeClass != null) {
- try {
+
+ if(localHomeClass != null)
+ {
+ try
+ {
// try to get the finder method on the local home interface
Method interfaceMethod = localHomeClass.getMethod(
- interfaceName,
- m.getParameterTypes());
+ interfaceName,
+ m.getParameterTypes());
// got it add it to known finders
knownQueries.put(
- interfaceMethod,
- new JDBCCustomFinderQuery(manager, m));
-
+ interfaceMethod,
+ new JDBCCustomFinderQuery(manager, m));
+
log.debug("Added custom finder " + methodName +
- " on local home interface");
- } catch(NoSuchMethodException e) {
+ " on local home interface");
+ } catch(NoSuchMethodException e)
+ {
// this is ok method may not be defined on this interface
}
}
}
}
-
+
//
// Defined finders - Overrides automatic finders.
//
Iterator definedFinders = manager.getMetaData().getQueries().iterator();
- while(definedFinders.hasNext()) {
+ while(definedFinders.hasNext())
+ {
JDBCQueryMetaData q = (JDBCQueryMetaData)definedFinders.next();
-
- if(!knownQueries.containsKey(q.getMethod()) ) {
- if(q instanceof JDBCJBossQLQueryMetaData) {
+
+ if(!knownQueries.containsKey(q.getMethod()) )
+ {
+ if(q instanceof JDBCJBossQLQueryMetaData)
+ {
knownQueries.put(
- q.getMethod(), factory.createJBossQLQuery(q));
-
- } else if(q instanceof JDBCDynamicQLQueryMetaData) {
+ q.getMethod(), factory.createJBossQLQuery(q));
+
+ } else if(q instanceof JDBCDynamicQLQueryMetaData)
+ {
knownQueries.put(
- q.getMethod(), factory.createDynamicQLQuery(q));
-
- } else if(q instanceof JDBCDeclaredQueryMetaData) {
+ q.getMethod(), factory.createDynamicQLQuery(q));
+
+ } else if(q instanceof JDBCDeclaredQueryMetaData)
+ {
knownQueries.put(
- q.getMethod(), factory.createDeclaredSQLQuery(q));
-
- } else if(q instanceof JDBCQlQueryMetaData) {
+ q.getMethod(), factory.createDeclaredSQLQuery(q));
+
+ } else if(q instanceof JDBCQlQueryMetaData)
+ {
knownQueries.put(
- q.getMethod(), factory.createEJBQLQuery(q));
+ q.getMethod(), factory.createEJBQLQuery(q));
}
}
}
@@ -193,38 +220,52 @@
//
// Automatic finders - The last resort
//
- if(homeClass != null) {
+ if(homeClass != null)
+ {
addAutomaticFinders(manager, homeClass.getMethods(), log);
}
- if(localHomeClass != null) {
+ if(localHomeClass != null)
+ {
addAutomaticFinders(manager, localHomeClass.getMethods(), log);
}
}
-
- private void addAutomaticFinders(
- JDBCStoreManager manager,
- Method[] homeMethods,
- Logger log) {
- JDBCCommandFactory factory = manager.getCommandFactory();
- for (int i = 0; i < homeMethods.length; i++) {
+ public void clear()
+ {
+ this.knownQueries.clear();
+ }
+
+ private void addAutomaticFinders(
+ JDBCStoreManager manager,
+ Method[] homeMethods,
+ Logger log)
+ {
+
+ JDBCCommandFactory factory = manager.getCommandFactory();
+ for (int i = 0; i < homeMethods.length; i++)
+ {
Method m = homeMethods[i];
- if(!knownQueries.containsKey(m)) {
+ if(!knownQueries.containsKey(m))
+ {
String name = m.getName();
- if(name.equals("findAll")) {
+ if(name.equals("findAll"))
+ {
JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(m);
knownQueries.put(m, factory.createFindAllQuery(q));
} else if(name.startsWith("findBy") &&
- !name.equals("findByPrimaryKey")) {
+ !name.equals("findByPrimaryKey"))
+ {
- try {
+ try
+ {
JDBCQueryMetaData q = new JDBCAutomaticQueryMetaData(m);
knownQueries.put(m, factory.createFindByQuery(q));
- } catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e)
+ {
log.debug("Could not create the finder " + name +
- ", because no matching CMP field was found.");
+ ", because no matching CMP field was found.");
}
}
}
1.32 +4 -2
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java
Index: JDBCStoreManager.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStoreManager.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- JDBCStoreManager.java 12 Apr 2002 19:30:44 -0000 1.31
+++ JDBCStoreManager.java 12 Apr 2002 21:39:47 -0000 1.32
@@ -60,7 +60,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
* @see org.jboss.ejb.EntityPersistenceStore
- * @version $Revision: 1.31 $
+ * @version $Revision: 1.32 $
*/
public class JDBCStoreManager implements EntityPersistenceStore
{
@@ -407,8 +407,10 @@
readAheadCache.destroy();
readAheadCache = null;
+ queryManager.clear();
+ queryManager = null;
}
-
+
//
// EJB Life Cycle Commands
//
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development