Author: andygumbrecht
Date: Wed Aug 1 12:58:42 2012
New Revision: 1367971
URL: http://svn.apache.org/viewvc?rev=1367971&view=rev
Log:
Synchronize Assembler#installNaming
Warn rather than crash in Assembler#destroyApplication
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1367971&r1=1367970&r2=1367971&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Wed Aug 1 12:58:42 2012
@@ -16,56 +16,6 @@
*/
package org.apache.openejb.assembler.classic;
-import java.io.File;
-import java.io.IOException;
-import java.lang.instrument.ClassFileTransformer;
-import java.lang.instrument.Instrumentation;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-import javax.naming.Binding;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NameAlreadyBoundException;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.XATerminator;
-import javax.resource.spi.work.WorkManager;
-import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.validation.ValidationException;
-import javax.validation.ValidatorFactory;
-
import org.apache.geronimo.connector.GeronimoBootstrapContext;
import org.apache.geronimo.connector.work.GeronimoWorkManager;
import org.apache.geronimo.connector.work.HintsContextHandler;
@@ -90,6 +40,7 @@ import org.apache.openejb.assembler.clas
import
org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
import org.apache.openejb.assembler.classic.event.AssemblerCreated;
import org.apache.openejb.assembler.classic.event.AssemblerDestroyed;
+import org.apache.openejb.assembler.monitoring.JMXContainer;
import org.apache.openejb.cdi.CdiAppContextsService;
import org.apache.openejb.cdi.CdiBuilder;
import org.apache.openejb.cdi.CdiResourceInjectionService;
@@ -120,13 +71,11 @@ import org.apache.openejb.core.transacti
import org.apache.openejb.core.transaction.TransactionType;
import org.apache.openejb.javaagent.Agent;
import org.apache.openejb.jpa.integration.MakeTxLookup;
-import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.JarLocation;
import org.apache.openejb.loader.Options;
import org.apache.openejb.loader.ProvisioningUtil;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.monitoring.DynamicMBeanWrapper;
-import org.apache.openejb.assembler.monitoring.JMXContainer;
import org.apache.openejb.monitoring.LocalMBeanServer;
import org.apache.openejb.monitoring.ObjectNameBuilder;
import org.apache.openejb.observer.Observes;
@@ -162,6 +111,58 @@ import org.apache.xbean.recipe.ObjectRec
import org.apache.xbean.recipe.Option;
import org.apache.xbean.recipe.UnsetPropertiesRecipe;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameAlreadyBoundException;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.resource.spi.BootstrapContext;
+import javax.resource.spi.ConnectionManager;
+import javax.resource.spi.ManagedConnectionFactory;
+import javax.resource.spi.ResourceAdapter;
+import javax.resource.spi.ResourceAdapterInternalException;
+import javax.resource.spi.XATerminator;
+import javax.resource.spi.work.WorkManager;
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.validation.ValidationException;
+import javax.validation.ValidatorFactory;
+import java.io.File;
+import java.io.IOException;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.Instrumentation;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@SuppressWarnings("UnusedDeclaration")
public class Assembler extends AssemblerTool implements
org.apache.openejb.spi.Assembler, JndiConstants {
static {
@@ -184,19 +185,22 @@ public class Assembler extends Assembler
private TransactionManager transactionManager;
private SecurityService securityService;
protected OpenEjbConfigurationFactory configFactory;
- private final Map<String, AppInfo> deployedApplications = new
HashMap<String, AppInfo> ();
+ private final Map<String, AppInfo> deployedApplications = new
HashMap<String, AppInfo>();
private final Set<String> moduleIds = new HashSet<String>();
private final Set<ObjectName> containersObjectNames = new
HashSet<ObjectName>();
+ @Override
public org.apache.openejb.spi.ContainerSystem getContainerSystem() {
return containerSystem;
}
+ @Override
public TransactionManager getTransactionManager() {
return transactionManager;
}
+ @Override
public SecurityService getSecurityService() {
return securityService;
}
@@ -264,6 +268,7 @@ public class Assembler extends Assembler
SystemInstance.get().setComponent(OpenEjbConfiguration.class,
this.config);
}
+ @Override
public void init(Properties props) throws OpenEJBException {
this.props = new Properties(props);
Options options = new Options(props,
SystemInstance.get().getOptions());
@@ -285,18 +290,16 @@ public class Assembler extends Assembler
installNaming(prefix, false);
}
- public static void installNaming(String prefix, boolean clean) {
+ public static synchronized void installNaming(String prefix, boolean
clean) {
Properties systemProperties = System.getProperties();
- synchronized (systemProperties) {
- String str =
systemProperties.getProperty(Context.URL_PKG_PREFIXES);
- String naming = prefix;
- if (str == null || clean) {
- str = naming;
- } else if (str.indexOf(naming) == -1) {
- str = str + ":" + naming;
- }
- systemProperties.setProperty(Context.URL_PKG_PREFIXES, str);
+
+ String str = systemProperties.getProperty(Context.URL_PKG_PREFIXES);
+ if (str == null || clean) {
+ str = prefix;
+ } else if (!str.contains(prefix)) {
+ str = str + ":" + prefix;
}
+ systemProperties.setProperty(Context.URL_PKG_PREFIXES, str);
}
private static ThreadLocal<Map<String, Object>> context = new
ThreadLocal<Map<String, Object>>();
@@ -314,6 +317,7 @@ public class Assembler extends Assembler
return map;
}
+ @Override
public void build() throws OpenEJBException {
setContext(new HashMap<String, Object>());
try {
@@ -338,8 +342,7 @@ public class Assembler extends Assembler
}
protected OpenEjbConfiguration getOpenEjbConfiguration() throws
OpenEJBException {
- OpenEjbConfiguration config = configFactory.getOpenEjbConfiguration();
- return config;
+ return configFactory.getOpenEjbConfiguration();
}
/////////////////////////////////////////////////////////////////////
@@ -360,7 +363,7 @@ public class Assembler extends Assembler
* information from the {@link OpenEjbConfiguration} object passed in.
* <pre>
* This method performs the following actions(in order):
- * <p/>
+ *
* 1 Assembles ProxyFactory
* 2 Assembles External JNDI Contexts
* 3 Assembles TransactionService
@@ -371,11 +374,11 @@ public class Assembler extends Assembler
* 8 Assembles Applications
* </pre>
*
- * @param configInfo
+ * @param configInfo OpenEjbConfiguration
* @throws Exception if there was a problem constructing the
ContainerSystem.
- * @throws Exception
* @see OpenEjbConfiguration
*/
+ @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void buildContainerSystem(final OpenEjbConfiguration configInfo)
throws Exception {
if
(SystemInstance.get().getOptions().get(OPENEJB_JPA_DEPLOY_TIME_ENHANCEMENT_PROP,
false)) {
SystemInstance.get().addObserver(new DeployTimeEnhancer());
@@ -542,7 +545,7 @@ public class Assembler extends Assembler
String message =
logger.error("createApplication.appFailedDuplicateIds", appInfo.path);
for (String id : used) {
logger.debug("createApplication.deploymentIdInUse", id);
- message += "\n "+id;
+ message += "\n " + id;
}
throw new DuplicateDeploymentIdException(message);
}
@@ -567,7 +570,7 @@ public class Assembler extends Assembler
CmpJarBuilder cmpJarBuilder = new CmpJarBuilder(appInfo,
classLoader);
File generatedJar = cmpJarBuilder.getJarFile();
if (generatedJar != null) {
- classLoader = ClassLoaderUtil.createClassLoader(appInfo.path,
new URL []{generatedJar.toURI().toURL()}, classLoader);
+ classLoader = ClassLoaderUtil.createClassLoader(appInfo.path,
new URL[]{generatedJar.toURI().toURL()}, classLoader);
}
final AppContext appContext = new AppContext(appInfo.appId,
SystemInstance.get(), classLoader, globalJndiContext, appJndiContext,
appInfo.standaloneModule);
@@ -578,7 +581,7 @@ public class Assembler extends Assembler
containerSystem.addAppContext(appContext);
final Context containerSystemContext =
containerSystem.getJNDIContext();
-
+
if (!SystemInstance.get().hasProperty("openejb.geronimo")) {
// Bean Validation
// ValidatorFactory needs to be put in the map sent to the
entity manager factory
@@ -625,7 +628,7 @@ public class Assembler extends Assembler
}
}
}
-
+
// JPA - Persistence Units MUST be processed first since they will
add ClassFileTransformers
// to the class loader which must be added before any classes are
loaded
Map<String, String> units = new HashMap<String, String>();
@@ -645,6 +648,8 @@ public class Assembler extends Assembler
factory.register();
}
+ logger.debug("Loaded peristence units: " + units);
+
// Connectors
for (ConnectorInfo connector : appInfo.connectors) {
ClassLoader oldClassLoader =
Thread.currentThread().getContextClassLoader();
@@ -710,7 +715,7 @@ public class Assembler extends Assembler
}
timerServiceRequired = true;
}
- for (Iterator<Map.Entry<Method, MethodContext>> it =
beanContext.iteratorMethodContext(); it.hasNext();) {
+ for (Iterator<Map.Entry<Method, MethodContext>> it =
beanContext.iteratorMethodContext(); it.hasNext(); ) {
Map.Entry<Method, MethodContext> entry = it.next();
MethodContext methodContext = entry.getValue();
if (methodContext.getSchedules().size() > 0) {
@@ -727,10 +732,10 @@ public class Assembler extends Assembler
EjbTimerServiceImpl timerService = new
EjbTimerServiceImpl(beanContext);
//Load auto-start timers
TimerStore timerStore =
timerService.getTimerStore();
- for (Iterator<Map.Entry<Method, MethodContext>> it
= beanContext.iteratorMethodContext(); it.hasNext();) {
+ for (Iterator<Map.Entry<Method, MethodContext>> it
= beanContext.iteratorMethodContext(); it.hasNext(); ) {
Map.Entry<Method, MethodContext> entry =
it.next();
MethodContext methodContext = entry.getValue();
- for(ScheduleData scheduleData :
methodContext.getSchedules()) {
+ for (ScheduleData scheduleData :
methodContext.getSchedules()) {
timerStore.createCalendarTimer(timerService, (String)
beanContext.getDeploymentID(), null, entry.getKey(),
scheduleData.getExpression(), scheduleData.getConfig());
}
}
@@ -741,7 +746,7 @@ public class Assembler extends Assembler
}
//set asynchronous methods transaction
//TODO ???
- for (Iterator<Entry<Method, MethodContext>> it =
beanContext.iteratorMethodContext(); it.hasNext();) {
+ for (Iterator<Entry<Method, MethodContext>> it =
beanContext.iteratorMethodContext(); it.hasNext(); ) {
Entry<Method, MethodContext> entry = it.next();
if (entry.getValue().isAsynchronous() &&
beanContext.getTransactionType(entry.getKey()) == TransactionType.RequiresNew) {
beanContext.setMethodTransactionAttribute(entry.getKey(),
TransactionType.Required);
@@ -791,7 +796,7 @@ public class Assembler extends Assembler
}
}
} catch (Throwable t) {
- throw new OpenEJBException("Error deploying
'"+deployment.getEjbName()+"'. Exception: "+t.getClass()+": "+t.getMessage(),
t);
+ throw new OpenEJBException("Error deploying '" +
deployment.getEjbName() + "'. Exception: " + t.getClass() + ": " +
t.getMessage(), t);
}
}
@@ -805,7 +810,7 @@ public class Assembler extends Assembler
logger.info("createApplication.startedEjb",
deployment.getDeploymentID(), deployment.getEjbName(),
container.getContainerID());
}
} catch (Throwable t) {
- throw new OpenEJBException("Error starting
'"+deployment.getEjbName()+"'. Exception: "+t.getClass()+": "+t.getMessage(),
t);
+ throw new OpenEJBException("Error starting '" +
deployment.getEjbName() + "'. Exception: " + t.getClass() + ": " +
t.getMessage(), t);
}
}
}
@@ -917,6 +922,7 @@ public class Assembler extends Assembler
}
}
+ @SuppressWarnings("unchecked")
private static void deployMBean(final BeanManager bm, final ClassLoader
cl, final String mbeanClass, final Properties appMbeans, final String id) {
final Class<?> clazz;
try {
@@ -943,11 +949,11 @@ public class Assembler extends Assembler
final MBeanServer server = LocalMBeanServer.get();
try {
- final ObjectName leaf = new
ObjectNameBuilder("openejb.user.mbeans")
- .set("application", id)
- .set("group", clazz.getPackage().getName())
- .set("name", clazz.getSimpleName())
- .build();
+ final ObjectName leaf = new
ObjectNameBuilder("openejb.user.mbeans")
+ .set("application", id)
+ .set("group", clazz.getPackage().getName())
+ .set("name", clazz.getSimpleName())
+ .build();
server.registerMBean(new DynamicMBeanWrapper(instance), leaf);
appMbeans.put(mbeanClass, leaf.getCanonicalName());
@@ -989,10 +995,10 @@ public class Assembler extends Assembler
factory = (TransactionPolicyFactory) value;
} else if (value instanceof String) {
try {
- String[] parts = ((String)value).split(":", 2);
+ String[] parts = ((String) value).split(":", 2);
ResourceFinder finder = new ResourceFinder("META-INF",
classLoader);
- Map<String,Class<? extends TransactionPolicyFactory>> plugins
= finder.mapAvailableImplementations(TransactionPolicyFactory.class);
+ Map<String, Class<? extends TransactionPolicyFactory>> plugins
= finder.mapAvailableImplementations(TransactionPolicyFactory.class);
Class<? extends TransactionPolicyFactory> clazz =
plugins.get(parts[0]);
if (clazz != null) {
if (parts.length == 1) {
@@ -1007,7 +1013,7 @@ public class Assembler extends Assembler
}
if (factory == null) {
- factory = new JtaTransactionPolicyFactory(transactionManager);
+ factory = new JtaTransactionPolicyFactory(transactionManager);
}
return factory;
}
@@ -1017,6 +1023,7 @@ public class Assembler extends Assembler
// all non-singletons are created first so that if a singleton refers
to them
// they are available.
Collections.sort(deployments, new Comparator<BeanContext>() {
+ @Override
public int compare(BeanContext a, BeanContext b) {
int aa = (a.getComponentType() == BeanType.SINGLETON) ? 1 : 0;
int bb = (b.getComponentType() == BeanType.SINGLETON) ? 1 : 0;
@@ -1027,10 +1034,12 @@ public class Assembler extends Assembler
// Sort all the beans with references to the back of the list. Beans
// without references to ther beans will be deployed first.
deployments = References.sort(deployments, new
References.Visitor<BeanContext>() {
+ @Override
public String getName(BeanContext t) {
return (String) t.getDeploymentID();
}
+ @Override
public Set<String> getReferences(BeanContext t) {
return t.getDependsOn();
}
@@ -1039,7 +1048,8 @@ public class Assembler extends Assembler
// Now Sort all the MDBs to the back of the list. The Resource Adapter
// may attempt to use the MDB on endpointActivation and the MDB may
have
// references to other ejbs that would need to be available first.
- Collections.sort(deployments, new Comparator<BeanContext>(){
+ Collections.sort(deployments, new Comparator<BeanContext>() {
+ @Override
public int compare(BeanContext a, BeanContext b) {
int aa = (a.getComponentType() == BeanType.MESSAGE_DRIVEN) ? 1
: 0;
int bb = (b.getComponentType() == BeanType.MESSAGE_DRIVEN) ? 1
: 0;
@@ -1050,6 +1060,7 @@ public class Assembler extends Assembler
return deployments;
}
+ @Override
public synchronized void destroy() {
try {
@@ -1066,6 +1077,7 @@ public class Assembler extends Assembler
} catch (UndeployException e) {
logger.error("Undeployment failed: " + appInfo.path, e);
} catch (NoSuchApplicationException e) {
+ //Ignore
}
}
@@ -1152,19 +1164,27 @@ public class Assembler extends Assembler
final AppContext appContext =
containerSystem.getAppContext(appInfo.appId);
- for (Map.Entry<String, Object> value :
appContext.getBindings().entrySet()) {
- String path = value.getKey();
- if (path.startsWith("global")) {
- path = "java:" + path;
- }
- if (!path.startsWith("java:global")) {
- continue;
- }
+ if (null == appContext) {
+ logger.warning("Application id '" + appInfo.appId + "' not found
in: " + Arrays.toString(containerSystem.getAppContextKeys()));
+ return;
+ } else {
- try {
- containerSystem.getJNDIContext().unbind(path);
- } catch (NamingException ignored) {
- // no-op
+ final Map<String, Object> cb = appContext.getBindings();
+
+ for (Map.Entry<String, Object> value : cb.entrySet()) {
+ String path = value.getKey();
+ if (path.startsWith("global")) {
+ path = "java:" + path;
+ }
+ if (!path.startsWith("java:global")) {
+ continue;
+ }
+
+ try {
+ containerSystem.getJNDIContext().unbind(path);
+ } catch (NamingException ignored) {
+ // no-op
+ }
}
}
try {
@@ -1260,7 +1280,7 @@ public class Assembler extends Assembler
containerSystem.removeWebContext(webContext);
}
- // Clear out naming for all components first
+ // Clear out naming for all components first
for (BeanContext deployment : deployments) {
String deploymentID = deployment.getDeploymentID() + "";
try {
@@ -1315,10 +1335,10 @@ public class Assembler extends Assembler
MBeanServer server = LocalMBeanServer.get();
for (Object objectName : appInfo.jmx.values()) {
try {
- ObjectName on = new ObjectName((String) objectName);
- if (server.isRegistered(on)) {
- server.unregisterMBean(on);
- }
+ ObjectName on = new ObjectName((String) objectName);
+ if (server.isRegistered(on)) {
+ server.unregisterMBean(on);
+ }
} catch (InstanceNotFoundException e) {
logger.warning("can't unregister " + objectName + " because
the mbean was not found", e);
} catch (MBeanRegistrationException e) {
@@ -1390,7 +1410,7 @@ public class Assembler extends Assembler
}
// add openejb-jpa-integration if the jpa provider is in lib/
- if (appInfo.libs.size() > 0) { // the test could be enhanced
+ if (appInfo.libs.size() > 0) { // the test could be enhanced
try {
final File jpaIntegrationFile =
JarLocation.jarLocation(MakeTxLookup.class);
final URL url = jpaIntegrationFile.toURI().toURL();
@@ -1491,7 +1511,7 @@ public class Assembler extends Assembler
containerSystem.removeContainer(containerId);
// Update the config tree
- for (Iterator<ContainerInfo> iterator =
config.containerSystem.containers.iterator(); iterator.hasNext();) {
+ for (Iterator<ContainerInfo> iterator =
config.containerSystem.containers.iterator(); iterator.hasNext(); ) {
ContainerInfo containerInfo = iterator.next();
if (containerInfo.id.equals(containerId)) {
iterator.remove();
@@ -1557,7 +1577,7 @@ public class Assembler extends Assembler
private void replaceResourceAdapterProperty(ObjectRecipe serviceRecipe)
throws OpenEJBException {
Object resourceAdapterId =
serviceRecipe.getProperty("ResourceAdapter");
- if (resourceAdapterId instanceof String) {
+ if (resourceAdapterId instanceof String) {
String id = (String) resourceAdapterId;
id = id.trim();
@@ -1609,18 +1629,18 @@ public class Assembler extends Assembler
if (transactionManager instanceof GeronimoTransactionManager) {
GeronimoTransactionManager geronimoTransactionManager =
(GeronimoTransactionManager) transactionManager;
TransactionContextHandler txWorkContextHandler = new
TransactionContextHandler(geronimoTransactionManager);
-
+
// use id as default realm name if realm is not specified in
service properties
String securityRealmName =
getStringProperty(serviceInfo.properties, "realm", serviceInfo.id);
-
+
SecurityContextHandler securityContextHandler = new
SecurityContextHandler(securityRealmName);
HintsContextHandler hintsContextHandler = new
HintsContextHandler();
-
+
Collection<WorkContextHandler> workContextHandlers = new
ArrayList<WorkContextHandler>();
workContextHandlers.add(txWorkContextHandler);
workContextHandlers.add(securityContextHandler);
workContextHandlers.add(hintsContextHandler);
-
+
workManager = new GeronimoWorkManager(threadPool, threadPool,
threadPool, workContextHandlers);
} else {
workManager = new SimpleWorkManager(threadPool);
@@ -1630,7 +1650,7 @@ public class Assembler extends Assembler
// BootstrapContext: wraps the WorkMananger and XATerminator
BootstrapContext bootstrapContext;
if (transactionManager instanceof GeronimoTransactionManager) {
- bootstrapContext = new
GeronimoBootstrapContext((GeronimoWorkManager)workManager,
(GeronimoTransactionManager)transactionManager,
(GeronimoTransactionManager)transactionManager);
+ bootstrapContext = new
GeronimoBootstrapContext((GeronimoWorkManager) workManager,
(GeronimoTransactionManager) transactionManager, (GeronimoTransactionManager)
transactionManager);
} else if (transactionManager instanceof XATerminator) {
bootstrapContext = new SimpleBootstrapContext(workManager,
(XATerminator) transactionManager);
} else {
@@ -1639,7 +1659,7 @@ public class Assembler extends Assembler
// start the resource adapter
try {
- logger.debug("createResource.startingResourceAdapter",
serviceInfo.id, service.getClass().getName());
+ logger.debug("createResource.startingResourceAdapter",
serviceInfo.id, service.getClass().getName());
resourceAdapter.start(bootstrapContext);
} catch (ResourceAdapterInternalException e) {
throw new OpenEJBException(e);
@@ -1678,7 +1698,7 @@ public class Assembler extends Assembler
Map<String, Object> unsetB =
connectionManagerRecipe.getUnsetProperties();
Map<String, Object> unset = new HashMap<String, Object>();
for (Map.Entry<String, Object> entry : unsetA.entrySet()) {
- if (unsetB.containsKey(entry.getKey()))
unset.put(entry.getKey(),entry.getValue());
+ if (unsetB.containsKey(entry.getKey()))
unset.put(entry.getKey(), entry.getValue());
}
logUnusedProperties(unset, serviceInfo);
@@ -1741,7 +1761,7 @@ public class Assembler extends Assembler
return propertyValue;
}
-
+
public void createConnectionManager(ConnectionManagerInfo serviceInfo)
throws OpenEJBException {
ObjectRecipe serviceRecipe = createRecipe(serviceInfo);
@@ -1901,7 +1921,7 @@ public class Assembler extends Assembler
serviceRecipe.allow(Option.IGNORE_MISSING_PROPERTIES);
serviceRecipe.setAllProperties(info.properties);
- if (serviceLogger.isDebugEnabled()){
+ if (serviceLogger.isDebugEnabled()) {
for (Map.Entry<String, Object> entry :
serviceRecipe.getProperties().entrySet()) {
serviceLogger.debug("createService.props", entry.getKey(),
entry.getValue());
}
@@ -1923,8 +1943,9 @@ public class Assembler extends Assembler
}
private static class PersistenceClassLoaderHandlerImpl implements
PersistenceClassLoaderHandler {
- private final Map<String,List<ClassFileTransformer>> transformers =
new TreeMap<String, List<ClassFileTransformer>> ();
+ private final Map<String, List<ClassFileTransformer>> transformers =
new TreeMap<String, List<ClassFileTransformer>>();
+ @Override
public void addTransformer(String unitId, ClassLoader classLoader,
ClassFileTransformer classFileTransformer) {
Instrumentation instrumentation = Agent.getInstrumentation();
if (instrumentation != null) {
@@ -1943,6 +1964,7 @@ public class Assembler extends Assembler
}
}
+ @Override
public void destroy(String unitId) {
List<ClassFileTransformer> transformers =
this.transformers.remove(unitId);
if (transformers != null) {
@@ -1957,6 +1979,7 @@ public class Assembler extends Assembler
}
}
+ @Override
public ClassLoader getNewTempClassLoader(ClassLoader classLoader) {
return ClassLoaderUtil.createTempClassLoader(classLoader);
}
@@ -1981,6 +2004,7 @@ public class Assembler extends Assembler
namePrefix = resourceAdapterName + "-worker-";
}
+ @Override
public Thread newThread(Runnable runnable) {
Thread thread = new Thread(group, runnable, namePrefix +
threadNumber.getAndIncrement(), 0);
if (!thread.isDaemon()) thread.setDaemon(true);
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java?rev=1367971&r1=1367970&r2=1367971&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CoreContainerSystem.java
Wed Aug 1 12:58:42 2012
@@ -144,4 +144,8 @@ public class CoreContainerSystem impleme
public void removeAppContext(Object id) {
apps.remove(id);
}
+
+ public synchronized Object[] getAppContextKeys(){
+ return apps.keySet().toArray();
+ }
}