[jboss-cvs] JBossAS SVN: r90770 - in projects/kernel/trunk: dependency/src/main/java/org/jboss/dependency/plugins and 14 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jul 2 11:02:37 EDT 2009
Author: kabir.khan at jboss.com
Date: 2009-07-02 11:02:36 -0400 (Thu, 02 Jul 2009)
New Revision: 90770
Added:
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/AsynchronousTestDelegate.java
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/Synchronizer.java
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AsynchronousTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/BeanWithCreateStart.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/ByteManException.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Helper.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Point.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTest.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTestDelegate.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.java
projects/kernel/trunk/kernel/src/test/resources/build.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/Copy.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase_NotAutomatic.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase_NotAutomatic.xml
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.txt
projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/BeanWithAsynchronousMode.xml
Modified:
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/SecurityActions.java
projects/kernel/trunk/kernel/.classpath
projects/kernel/trunk/kernel/.project
projects/kernel/trunk/kernel/pom.xml
projects/kernel/trunk/kernel/src/main/java/org/jboss/test/kernel/junit/MicrocontainerTest.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanJaxbTestCase.java
projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanTestCase.java
projects/kernel/trunk/pom.xml
Log:
[JBKERNEL-25] Implementation and tests for parallel deployments
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -34,6 +34,7 @@
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.Executor;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.jboss.dependency.plugins.action.ControllerContextAction;
@@ -938,7 +939,7 @@
currentIndex = states.indexOf(fromState);
fromContexts = fromController.getContextsByState(fromState);
if (fromContexts.contains(context) == false)
- throw new IllegalStateException("Context not found in previous state: " + context.toShortString());
+ throw new IllegalStateException("Context not found in previous state (" + fromState + "): " + context.toShortString());
}
int toIndex = currentIndex + 1;
@@ -1065,6 +1066,11 @@
if (trace)
log.trace("Skipping already installed " + name + " for " + toState.getStateString());
}
+ else if (executorThreadsByContext.get(context) != null && Thread.currentThread() != executorThreadsByContext.get(context))
+ {
+ if (trace)
+ log.trace("Installed by other thread " + name);
+ }
else if (installing.add(context) == false)
{
if (trace)
@@ -1096,7 +1102,7 @@
if (trace)
log.trace("Dependencies resolved " + name + " for " + toState.getStateString());
- if (incrementState(context, trace))
+ if (executeOrIncrementStateDirectly(context, trace))
{
resolutions = true;
if (trace)
@@ -1126,8 +1132,90 @@
return resolutions;
}
+
+ /**
+ * Increment state in the current thread, or asynchonously if the context has {@link ControllerMode#ASYNCHRONOUS} and we find an executor<p>
+ * <p/>
+ * This method must be invoked with the write lock taken.
+ *
+ * @param context the context
+ * @param trace whether trace is enabled
+ * @return whether the increment suceeded. If the context could be incremented asynchronously false is returned
+ */
+ private boolean executeOrIncrementStateDirectly(ControllerContext context, boolean trace)
+ {
+ boolean asynch = false;
+ if (context.getMode() == ControllerMode.ASYNCHRONOUS)
+ {
+ if (Thread.currentThread() != executorThreadsByContext.get(context))
+ {
+ final Thread ctxThread = executorThreadsByContext.get(context);
+ if (ctxThread == null || ctxThread != Thread.currentThread())
+ {
+ asynch = true;
+ }
+ }
+ }
+
+ if (asynch)
+ {
+ if (executor == null)
+ log.warn("No executor in controller " + this + " to use installing asynchronous context " + context);
+ Executor foundExecutor = searchForExecutor();
+ if (foundExecutor != null)
+ {
+ executorThreadsByContext.put(context, SCHEDULED_FOR_EXECUTOR);
+
+ if (trace)
+ log.trace("Recorded for asynchronous installation " + context.getName());
+
+ InstallControllerContextTask task = new InstallControllerContextTask(context, trace);
+ try
+ {
+ foundExecutor.execute(task);
+ return false;
+ }
+ catch(RejectedExecutionException e)
+ {
+ log.warn("Asynchronous execution rejected by executor for context " + context.getName() + ":" + e.getMessage());
+ executorThreadsByContext.remove(context);
+ }
+ }
+ }
+
+ return incrementState(context, trace);
+ }
+
/**
+ * Return the executor stored in this controller or in its parent hierarchy. The nearest executor is returned.
+ * <p/>
+ * This method must be called with the write or read lock taken
+ * @return The found executor
+ */
+ protected Executor searchForExecutor()
+ {
+ if (executor != null)
+ {
+ return executor;
+ }
+ AbstractController parent = getParentController();
+ if (parent != null)
+ {
+ try
+ {
+ parent.lockRead();
+ return parent.searchForExecutor();
+ }
+ finally
+ {
+ parent.unlockRead();
+ }
+ }
+ return null;
+ }
+
+ /**
* Resolve contexts<p>
* <p/>
* This method must be invoked with the write lock taken
@@ -1147,10 +1235,9 @@
{
if (advance(ctx))
{
- DependencyInfo dependencies = ctx.getDependencyInfo();
try
{
- if (dependencies == null || dependencies.resolveDependencies(this, state))
+ if (resolveDependencies(ctx, state))
result.add(ctx);
}
catch (Throwable error)
@@ -1166,6 +1253,21 @@
return result;
}
+
+ /**
+ * See if the context has its dependencies resolved to move to the given state.
+ * <p/>
+ * This method must be invoked with the write lock taken
+ *
+ * @param ctx The context
+ * @param state The state we want to move to
+ * @return true if the dependencies are resolved
+ */
+ private boolean resolveDependencies(ControllerContext ctx, ControllerState state)
+ {
+ DependencyInfo dependencies = ctx.getDependencyInfo();
+ return dependencies == null || dependencies.resolveDependencies(this, state);
+ }
/**
* Uninstall a context
@@ -2052,4 +2154,101 @@
else
return states.get(index);
}
+
+
+ private Map<ControllerContext, Thread> executorThreadsByContext = new ConcurrentHashMap<ControllerContext, Thread>();
+
+ class InstallControllerContextTask implements Runnable
+ {
+ ControllerContext context;
+ ClassLoader classLoader;
+ boolean trace;
+
+ public InstallControllerContextTask(ControllerContext context, boolean trace)
+ {
+ this.context = context;
+ this.classLoader = SecurityActions.getContextClassLoader();
+ this.trace = trace;
+ }
+
+ public void run()
+ {
+ if (trace)
+ log.trace(Thread.currentThread().getName() + " starting asyncronous install of " + context.getName());
+
+ lockWrite();
+ ClassLoader tcl = SecurityActions.setContextClassLoader(classLoader);
+ executorThreadsByContext.put(context, Thread.currentThread());
+ try
+ {
+ //Move the given context as far through the states as possible
+ boolean stateChanged = installMyContext();
+
+ //The given context had its state changed, now see if anybody was dependent on it
+ if (stateChanged)
+ {
+ resolveContexts(trace);
+ }
+ }
+ catch (Throwable t)
+ {
+ log.error("Problem installing context asynchronously " + context, t);
+ }
+ finally
+ {
+ if (trace)
+ log.trace(Thread.currentThread().getName() + " asynchronous install done for " + context.getName());
+ executorThreadsByContext.remove(context);
+ SecurityActions.resetContextClassLoader(tcl);
+ unlockWrite();
+ }
+ }
+
+ boolean installMyContext()
+ {
+ int currentIndex = states.indexOf(context.getState());
+ int requiredIndex = states.indexOf(context.getRequiredState());
+ if (requiredIndex == -1)
+ throw new IllegalArgumentException("Unknown state: " + context.getRequiredState());
+
+ boolean resolved = true;
+ boolean stateChanged = false;
+
+ while(resolved && currentIndex < requiredIndex)
+ {
+ resolved = false;
+ ControllerState toState = states.get(currentIndex + 1);
+ if (advance(context))
+ {
+ try
+ {
+ if (resolveDependencies(context, toState))
+ {
+ resolved = true;
+ }
+ }
+ catch (Throwable error)
+ {
+ log.error("Error resolving dependencies for " + toState.getStateString() + ": " + context.toShortString(), error);
+ uninstallContext(context, ControllerState.NOT_INSTALLED, trace);
+ errorContexts.put(context.getName(), context);
+ context.setError(error);
+ }
+
+ if (resolved)
+ {
+ resolved = incrementState(context, trace);
+ if (resolved)
+ {
+ stateChanged = true;
+ currentIndex = states.indexOf(context.getState());
+ }
+ }
+ }
+ }
+ return stateChanged;
+ }
+ }
+
+ final static Thread SCHEDULED_FOR_EXECUTOR = new Thread();
}
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -248,9 +248,6 @@
public void setMode(ControllerMode mode)
{
- if (ControllerMode.ASYNCHRONOUS.equals(mode))
- throw new IllegalArgumentException("Not yet implemented, asynchronouse mode.");
-
this.mode = mode;
flushJBossObjectCache();
}
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/SecurityActions.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/SecurityActions.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/SecurityActions.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -79,6 +79,31 @@
}
}
+ private static ClassLoader setContextClassLoaderInternal(final ClassLoader classLoader)
+ {
+ ClassLoader result = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(classLoader);
+ return result;
+ }
+
+ static ClassLoader setContextClassLoader(final ClassLoader classLoader)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return setContextClassLoaderInternal(classLoader);
+ }
+ else
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ return setContextClassLoaderInternal(classLoader);
+ }
+ });
+ }
+ }
+
static void resetContextClassLoader(final ClassLoader classLoader)
{
if (System.getSecurityManager() == null)
@@ -97,4 +122,22 @@
});
}
}
+
+ static ClassLoader getContextClassLoader()
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ else
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+ public ClassLoader run()
+ {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ });
+ }
+ }
}
Added: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/AsynchronousTestDelegate.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/AsynchronousTestDelegate.java (rev 0)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/AsynchronousTestDelegate.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,145 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.support;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousTestDelegate extends TestDelegate
+{
+ Synchronizer installSynchronizer;
+ Logger log = Logger.getLogger(AsynchronousTestDelegate.class);
+
+ public AsynchronousTestDelegate(Object name, Synchronizer installSynchronizer)
+ {
+ super(name);
+ this.installSynchronizer = installSynchronizer;
+ }
+
+ public void setInstallSynchronizer(Synchronizer installSynchronizer)
+ {
+ this.installSynchronizer = installSynchronizer;
+ }
+
+ @Override
+ public void configureInstall()
+ {
+ awaitStateEntryBarrier();
+ super.configureInstall();
+ debugLogThread("Configure");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.CONFIGURED);
+ }
+
+ @Override
+ public void createInstall()
+ {
+ awaitStateEntryBarrier();
+ super.createInstall();
+ debugLogThread("Create");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.CREATE);
+ }
+
+ @Override
+ public void describeInstall()
+ {
+ awaitInstallLatch();
+ awaitStateEntryBarrier();
+ super.describeInstall();
+ debugLogThread("Describe");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.DESCRIBED);
+ }
+
+ @Override
+ public void installInstall()
+ {
+ awaitStateEntryBarrier();
+ super.installInstall();
+ debugLogThread("Install");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.INSTALLED);
+ }
+
+ @Override
+ public void instantiateInstall()
+ {
+ awaitStateEntryBarrier();
+ super.instantiateInstall();
+ debugLogThread("Instantiate");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.INSTANTIATED);
+ }
+
+ @Override
+ public void startInstall()
+ {
+ awaitStateEntryBarrier();
+ super.startInstall();
+ debugLogThread("Start");
+ awaitStateExitBarrier();
+ countdownInstallWorkerEnd(ControllerState.START);
+ }
+
+ private void awaitInstallLatch()
+ {
+ if (installSynchronizer != null)
+ {
+ installSynchronizer.countdownWorkersAndWaitForStartSignal();
+ }
+ }
+
+ private void awaitStateEntryBarrier()
+ {
+ if (installSynchronizer != null)
+ {
+ installSynchronizer.waitAtStateEntryBarrier();
+ }
+ }
+
+ private void awaitStateExitBarrier()
+ {
+ if (installSynchronizer != null)
+ {
+ installSynchronizer.waitAtStateExitBarrier();
+ }
+ }
+
+ private void countdownInstallWorkerEnd(ControllerState state)
+ {
+ if (installSynchronizer != null && installSynchronizer.getWorkerDoneState() == state)
+ {
+ installSynchronizer.countdownWorkerEnd();
+ }
+ }
+
+ private void debugLogThread(String msg)
+ {
+ log.debug(Thread.currentThread().getName() + " " + getName() + " " + msg);
+ }
+}
Added: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/Synchronizer.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/Synchronizer.java (rev 0)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/Synchronizer.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,188 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.support;
+
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.CyclicBarrier;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Synchronizer
+{
+ Logger log = Logger.getLogger(Synchronizer.class.getName());
+
+ int workers;
+ volatile CountDownLatch workerStartLatch;
+ volatile CountDownLatch startLatch;
+ volatile CountDownLatch workerEndLatch;
+ volatile CyclicBarrier workerStateEntryBarrier;
+ volatile CyclicBarrier workerStateExitBarrier;
+ volatile ControllerState workerDoneState = ControllerState.INSTALLED;
+
+ public Synchronizer(int workers)
+ {
+ this(workers, true);
+ }
+
+ public Synchronizer(int workers, boolean useBarrier)
+ {
+ this(workers, useBarrier, ControllerState.INSTALLED);
+ }
+
+ public Synchronizer(int workers, boolean useBarrier, ControllerState workerDoneState)
+ {
+ this(workers, true, useBarrier, workerDoneState);
+ }
+
+ public Synchronizer(int workers, boolean useWorkersStart, boolean useBarrier, ControllerState workerDoneState)
+ {
+ this.workers = workers;
+ if (useWorkersStart)
+ {
+ workerStartLatch = new CountDownLatch(workers);
+ startLatch = new CountDownLatch(1);
+ }
+ workerEndLatch = new CountDownLatch(workers);
+
+ if (useBarrier)
+ {
+ workerStateEntryBarrier = new CyclicBarrier(workers);
+ workerStateExitBarrier = new CyclicBarrier(workers);
+ }
+ this.workerDoneState = workerDoneState;
+ }
+
+ public ControllerState getWorkerDoneState()
+ {
+ return workerDoneState;
+ }
+
+ public void resetWorkerDone(ControllerState state)
+ {
+ workerDoneState = state;
+ workerEndLatch = new CountDownLatch(workers);
+ }
+
+ public void countdownWorkersAndWaitForStartSignal()
+ {
+ if (workerStartLatch != null)
+ {
+ log.debug(Thread.currentThread().getName() + " worker counting down from " + workerStartLatch);
+ workerStartLatch.countDown();
+ log.debug(Thread.currentThread().getName() + " worker counted down to " + workerStartLatch);
+ try
+ {
+ log.debug(Thread.currentThread().getName() + " worker awaiting start");
+ startLatch.await();
+ log.debug(Thread.currentThread().getName() + " worker go!");
+ }
+ catch (InterruptedException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ public void countdownWorkerEnd()
+ {
+ workerEndLatch.countDown();
+ }
+
+ public void waitForWorkersAndEmitStartSignal()
+ {
+ if (workerStartLatch != null)
+ {
+ try
+ {
+ log.debug(Thread.currentThread().getName() + " main awaiting worker");
+ workerStartLatch.await();
+ log.debug(Thread.currentThread().getName() + " main driver go");
+ }
+ catch (InterruptedException e)
+ {
+ throw new RuntimeException(e);
+ }
+ log.debug(Thread.currentThread().getName() + " main counting down from " + startLatch);
+ startLatch.countDown();
+ log.debug(Thread.currentThread().getName() + " main counted down to " + startLatch);
+ }
+ }
+
+ public void waitForWorkersToEnd()
+ {
+ try
+ {
+ workerEndLatch.await();
+ //This additional sleep should give enough time for the worker to finish before we check the state
+ Thread.sleep(100);
+ }
+ catch(InterruptedException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void waitAtStateEntryBarrier()
+ {
+ if (workerStateEntryBarrier != null)
+ {
+ try
+ {
+ workerStateEntryBarrier.await();
+ }
+ catch(BrokenBarrierException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch(InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
+ public void waitAtStateExitBarrier()
+ {
+ if (workerStateExitBarrier != null)
+ {
+ try
+ {
+ workerStateExitBarrier.await();
+ }
+ catch(BrokenBarrierException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch(InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+}
Added: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AsynchronousTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AsynchronousTestCase.java (rev 0)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/AsynchronousTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,858 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.test;
+
+import java.util.Arrays;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.dependency.controller.support.AsynchronousTestDelegate;
+import org.jboss.test.dependency.controller.support.Synchronizer;
+import org.jboss.test.dependency.controller.support.TestControllerContext;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousTestCase extends AbstractDependencyTest
+{
+ public AsynchronousTestCase(String name)
+ {
+ super(name);
+ }
+
+ public void testSearchForExecutor() throws Throwable
+ {
+ class TestController extends AbstractController
+ {
+ @Override
+ protected Executor searchForExecutor()
+ {
+ return super.searchForExecutor();
+ }
+
+ protected void setParentController(AbstractController parentController)
+ {
+ super.setParentController(parentController);
+ }
+ }
+
+ TestController root = new TestController();
+ assertNull(root.searchForExecutor());
+ Executor executor = Executors.newFixedThreadPool(1);
+ root.setExecutor(executor);
+ assertSame(executor, root.searchForExecutor());
+ root.setExecutor(null);
+ assertNull(root.searchForExecutor());
+
+ TestController child1 = new TestController();
+ child1.setParentController(root);
+ TestController child2 = new TestController();
+ child2.setParentController(child1);
+ assertNull(root.searchForExecutor());
+ assertNull(child1.searchForExecutor());
+ assertNull(child2.searchForExecutor());
+
+ root.setExecutor(executor);
+ assertSame(executor, root.searchForExecutor());
+ assertSame(executor, child1.searchForExecutor());
+ assertSame(executor, child2.searchForExecutor());
+ root.setExecutor(null);
+
+ child1.setExecutor(executor);
+ assertNull(root.searchForExecutor());
+ assertSame(executor, child1.searchForExecutor());
+ assertSame(executor, child2.searchForExecutor());
+ child1.setExecutor(null);
+
+ Executor executor2 = Executors.newFixedThreadPool(1);
+ root.setExecutor(executor);
+ child2.setExecutor(executor2);
+ assertSame(executor, root.searchForExecutor());
+ assertSame(executor, child1.searchForExecutor());
+ assertSame(executor2, child2.searchForExecutor());
+ }
+
+ public void testNoExecutorInController() throws Throwable
+ {
+ clearExecutorInController();
+ AsynchronousTestDelegate delegate = getAsynchronousDelegate("Bean");
+ ControllerContext ctx = null;
+ boolean passed = false;
+ try
+ {
+ ctx = createAndInstallContext(delegate, ControllerState.INSTALLED);
+ assertInstalled(ctx);
+ assertEquals(1, delegate.describeInstallOrder);
+ assertEquals(2, delegate.instantiateInstallOrder);
+ assertEquals(3, delegate.configureInstallOrder);
+ assertEquals(4, delegate.createInstallOrder);
+ assertEquals(5, delegate.startInstallOrder);
+ assertEquals(6, delegate.installInstallOrder);
+ assertEquals(-1, delegate.installUninstallOrder);
+ assertEquals(-1, delegate.startUninstallOrder);
+ assertEquals(-1, delegate.createUninstallOrder);
+ assertEquals(-1, delegate.configureUninstallOrder);
+ assertEquals(-1, delegate.instantiateUninstallOrder);
+ assertEquals(-1, delegate.describeUninstallOrder);
+ passed = true;
+ }
+ finally
+ {
+ if (passed)
+ {
+ uninstallContext(ctx);
+ assertUninstalled(ctx);
+ }
+ }
+ }
+
+ public void testOneAsynchronousContext() throws Throwable
+ {
+ setExecutorInController(1);
+ Synchronizer installSynchronizer = new Synchronizer(1);
+ AsynchronousTestDelegate delegate = getAsynchronousDelegate("Bean", installSynchronizer);
+ ControllerContext ctx = null;
+ try
+ {
+ ctx = createAndInstallContext(delegate, ControllerState.INSTALLED);
+ if (ctx.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ installSynchronizer.waitForWorkersAndEmitStartSignal();
+ installSynchronizer.waitForWorkersToEnd();
+
+ assertEquals(1, delegate.describeInstallOrder);
+ assertEquals(2, delegate.instantiateInstallOrder);
+ assertEquals(3, delegate.configureInstallOrder);
+ assertEquals(4, delegate.createInstallOrder);
+ assertEquals(5, delegate.startInstallOrder);
+ assertEquals(6, delegate.installInstallOrder);
+ assertEquals(-1, delegate.installUninstallOrder);
+ assertEquals(-1, delegate.startUninstallOrder);
+ assertEquals(-1, delegate.createUninstallOrder);
+ assertEquals(-1, delegate.configureUninstallOrder);
+ assertEquals(-1, delegate.instantiateUninstallOrder);
+ assertEquals(-1, delegate.describeUninstallOrder);
+
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx);
+ assertUninstalled(ctx);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testChange() throws Throwable
+ {
+ setExecutorInController(2);
+ Synchronizer installSynchronizer = new Synchronizer(1);
+ AsynchronousTestDelegate delegate = getAsynchronousDelegate("Bean", installSynchronizer);
+ ControllerContext ctx = null;
+ try
+ {
+ ctx = createAndInstallContext(delegate, ControllerState.INSTALLED);
+ if (ctx.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ installSynchronizer.waitForWorkersAndEmitStartSignal();
+ installSynchronizer.waitForWorkersToEnd();
+ assertInstalled(ctx);
+
+ controller.change(ctx, ControllerState.PRE_INSTALL);
+
+ installSynchronizer = new Synchronizer(1);
+ delegate.setInstallSynchronizer(installSynchronizer);
+ controller.change(ctx, ControllerState.INSTALLED);
+ if (ctx.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ installSynchronizer.waitForWorkersAndEmitStartSignal();
+ installSynchronizer.waitForWorkersToEnd();
+ assertInstalled(ctx);
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx);
+ assertUninstalled(ctx);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testTwoAsynchronousContexts() throws Throwable
+ {
+ setExecutorInController(2);
+ Synchronizer installSynchronizer = new Synchronizer(2);
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", installSynchronizer);
+ ControllerContext ctx1 = null;
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", installSynchronizer);
+ ControllerContext ctx2 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ if (ctx1.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ if (ctx1.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ installSynchronizer.waitForWorkersAndEmitStartSignal();
+ installSynchronizer.waitForWorkersToEnd();
+ assertInstalled(ctx1);
+ assertInstalled(ctx2);
+ assertSortedArray(new int[] {1, 2}, new int[] {delegate1.describeInstallOrder, delegate2.describeInstallOrder});
+ assertSortedArray(new int[] {3, 4}, new int[] {delegate1.instantiateInstallOrder, delegate2.instantiateInstallOrder});
+ assertSortedArray(new int[] {5, 6}, new int[] {delegate1.configureInstallOrder, delegate2.configureInstallOrder});
+ assertSortedArray(new int[] {7, 8}, new int[] {delegate1.createInstallOrder, delegate2.createInstallOrder});
+ assertSortedArray(new int[] {9, 10}, new int[] {delegate1.startInstallOrder, delegate2.startInstallOrder});
+ assertSortedArray(new int[] {11, 12}, new int[] {delegate1.installInstallOrder, delegate2.installInstallOrder});
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx1);
+ uninstallContext(ctx2);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testFiveAsynchronousContexts() throws Throwable
+ {
+ setExecutorInController(5);
+ Synchronizer installSynchronizer = new Synchronizer(5);
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", installSynchronizer);
+ ControllerContext ctx1 = null;
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", installSynchronizer);
+ ControllerContext ctx2 = null;
+ AsynchronousTestDelegate delegate3 = getAsynchronousDelegate("Bean3", installSynchronizer);
+ ControllerContext ctx3 = null;
+ AsynchronousTestDelegate delegate4 = getAsynchronousDelegate("Bean4", installSynchronizer);
+ ControllerContext ctx4 = null;
+ AsynchronousTestDelegate delegate5 = getAsynchronousDelegate("Bean5", installSynchronizer);
+ ControllerContext ctx5 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ if (ctx1.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ if (ctx1.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ ctx3 = createAndInstallContext(delegate3, ControllerState.INSTALLED);
+ if (ctx3.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ ctx4 = createAndInstallContext(delegate4, ControllerState.INSTALLED);
+ if (ctx4.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+ ctx5 = createAndInstallContext(delegate5, ControllerState.INSTALLED);
+ if (ctx5.getState() == ControllerState.INSTALLED)
+ {
+ fail("Should have been installed asynchronously");
+ }
+
+ installSynchronizer.waitForWorkersAndEmitStartSignal();
+ installSynchronizer.waitForWorkersToEnd();
+ assertInstalled(ctx1);
+ assertInstalled(ctx2);
+ assertInstalled(ctx3);
+ assertInstalled(ctx4);
+ assertInstalled(ctx5);
+
+ assertSortedArray(new int[] {1, 2, 3, 4, 5}, new int[] {
+ delegate1.describeInstallOrder,
+ delegate2.describeInstallOrder,
+ delegate3.describeInstallOrder,
+ delegate4.describeInstallOrder,
+ delegate5.describeInstallOrder});
+ assertSortedArray(new int[] {6, 7, 8, 9, 10}, new int[] {
+ delegate1.instantiateInstallOrder,
+ delegate2.instantiateInstallOrder,
+ delegate3.instantiateInstallOrder,
+ delegate4.instantiateInstallOrder,
+ delegate5.instantiateInstallOrder});
+ assertSortedArray(new int[] {11, 12, 13, 14, 15}, new int[] {
+ delegate1.configureInstallOrder,
+ delegate2.configureInstallOrder,
+ delegate3.configureInstallOrder,
+ delegate4.configureInstallOrder,
+ delegate5.configureInstallOrder});
+ assertSortedArray(new int[] {16, 17, 18, 19, 20}, new int[] {
+ delegate1.createInstallOrder,
+ delegate2.createInstallOrder,
+ delegate3.createInstallOrder,
+ delegate4.createInstallOrder,
+ delegate5.createInstallOrder});
+ assertSortedArray(new int[] {21, 22, 23, 24, 25}, new int[] {
+ delegate1.startInstallOrder,
+ delegate2.startInstallOrder,
+ delegate3.startInstallOrder,
+ delegate4.startInstallOrder,
+ delegate5.startInstallOrder});
+ assertSortedArray(new int[] {26, 27, 28, 29, 30}, new int[] {
+ delegate1.installInstallOrder,
+ delegate2.installInstallOrder,
+ delegate3.installInstallOrder,
+ delegate4.installInstallOrder,
+ delegate5.installInstallOrder});
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx1);
+ uninstallContext(ctx2);
+ uninstallContext(ctx3);
+ uninstallContext(ctx4);
+ uninstallContext(ctx5);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ assertUninstalled(ctx3);
+ assertUninstalled(ctx4);
+ assertUninstalled(ctx5);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testAsynchronousContextWithDependencyOnAutomaticContext() throws Throwable
+ {
+ setExecutorInController(2);
+ Synchronizer synchronizer = new Synchronizer(1, false, ControllerState.INSTANTIATED);
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", synchronizer);
+ delegate1.addDependency(new AbstractDependencyItem("Bean1", "Bean2", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx1 = null;
+ AsynchronousTestDelegate delegate2 = getAutomaticDelegate("Bean2");
+ ControllerContext ctx2 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ synchronizer.waitForWorkersAndEmitStartSignal();
+ synchronizer.waitForWorkersToEnd();
+ synchronizer.resetWorkerDone(ControllerState.INSTALLED);
+ assertState(ctx1, ControllerState.INSTANTIATED);
+
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ assertInstalled(ctx2);
+
+ synchronizer.waitForWorkersToEnd();
+ assertInstalled(ctx1);
+ assertEquals(1, delegate1.describeInstallOrder);
+ assertEquals(2, delegate1.instantiateInstallOrder);
+ assertEquals(3, delegate2.describeInstallOrder);
+ assertEquals(4, delegate2.instantiateInstallOrder);
+ assertEquals(5, delegate2.configureInstallOrder);
+ assertEquals(6, delegate2.createInstallOrder);
+ assertEquals(7, delegate2.startInstallOrder);
+ assertEquals(8, delegate2.installInstallOrder);
+ assertEquals(9, delegate1.configureInstallOrder);
+ assertEquals(10, delegate1.createInstallOrder);
+ assertEquals(11, delegate1.startInstallOrder);
+ assertEquals(12, delegate1.installInstallOrder);
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx2);
+ uninstallContext(ctx1);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testAutomaticContextWithDependencyOnAsynchronousContext() throws Throwable
+ {
+ setExecutorInController(2);
+ Synchronizer synchronizer1 = new Synchronizer(1, false, false, ControllerState.INSTALLED);
+ AsynchronousTestDelegate delegate1 = getAutomaticDelegate("Bean1", synchronizer1);
+ delegate1.addDependency(new AbstractDependencyItem("Bean1", "Bean2", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx1 = null;
+
+ Synchronizer synchronizer2 = new Synchronizer(1, false, ControllerState.INSTANTIATED);
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", synchronizer2);
+ ControllerContext ctx2 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ assertState(ctx1, ControllerState.INSTANTIATED);
+
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ synchronizer2.waitForWorkersAndEmitStartSignal();
+ assertNotSame(ControllerState.INSTALLED, ctx2.getState());
+
+ synchronizer2.waitForWorkersToEnd();
+ synchronizer1.waitForWorkersToEnd();
+
+ assertInstalled(ctx1);
+ assertInstalled(ctx2);
+ assertEquals(1, delegate1.describeInstallOrder);
+ assertEquals(2, delegate1.instantiateInstallOrder);
+ assertEquals(3, delegate2.describeInstallOrder);
+ assertEquals(4, delegate2.instantiateInstallOrder);
+ assertEquals(5, delegate2.configureInstallOrder);
+ assertEquals(6, delegate2.createInstallOrder);
+ assertEquals(7, delegate2.startInstallOrder);
+ assertEquals(8, delegate2.installInstallOrder);
+ assertEquals(9, delegate1.configureInstallOrder);
+ assertEquals(10, delegate1.createInstallOrder);
+ assertEquals(11, delegate1.startInstallOrder);
+ assertEquals(12, delegate1.installInstallOrder);
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx2);
+ uninstallContext(ctx1);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testAsynchronousContextWithDependencyOnAsynchronousContext() throws Throwable
+ {
+ setExecutorInController(2);
+ Synchronizer synchronizer1 = new Synchronizer(1, false, false, ControllerState.INSTANTIATED);
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", synchronizer1);
+ delegate1.addDependency(new AbstractDependencyItem("Bean1", "Bean2", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx1 = null;
+
+ Synchronizer synchronizer2 = new Synchronizer(1, false, false, ControllerState.INSTANTIATED);
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", synchronizer2);
+ ControllerContext ctx2 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ synchronizer1.waitForWorkersAndEmitStartSignal();
+ synchronizer1.waitForWorkersToEnd();
+ synchronizer1.resetWorkerDone(ControllerState.INSTALLED);
+ assertState(ctx1, ControllerState.INSTANTIATED);
+
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ synchronizer2.waitForWorkersAndEmitStartSignal();
+ synchronizer2.waitForWorkersToEnd();
+ synchronizer1.waitForWorkersToEnd();
+
+ assertInstalled(ctx1);
+ assertInstalled(ctx2);
+ assertEquals(1, delegate1.describeInstallOrder);
+ assertEquals(2, delegate1.instantiateInstallOrder);
+ assertEquals(3, delegate2.describeInstallOrder);
+ assertEquals(4, delegate2.instantiateInstallOrder);
+ assertEquals(5, delegate2.configureInstallOrder);
+ assertEquals(6, delegate2.createInstallOrder);
+ assertEquals(7, delegate2.startInstallOrder);
+ assertEquals(8, delegate2.installInstallOrder);
+ assertEquals(9, delegate1.configureInstallOrder);
+ assertEquals(10, delegate1.createInstallOrder);
+ assertEquals(11, delegate1.startInstallOrder);
+ assertEquals(12, delegate1.installInstallOrder);
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx2);
+ uninstallContext(ctx1);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testSeveralAsynchronousContextsWithDependencyOnAsynchronousContext() throws Throwable
+ {
+ setExecutorInController(5);
+ Synchronizer synchronizer1 = new Synchronizer(5, true, true, ControllerState.INSTANTIATED);
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", synchronizer1);
+ delegate1.addDependency(new AbstractDependencyItem("Bean1", "Bean6", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx1 = null;
+
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", synchronizer1);
+ delegate2.addDependency(new AbstractDependencyItem("Bean2", "Bean6", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx2 = null;
+
+ AsynchronousTestDelegate delegate3 = getAsynchronousDelegate("Bean3", synchronizer1);
+ delegate3.addDependency(new AbstractDependencyItem("Bean3", "Bean6", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx3 = null;
+
+ AsynchronousTestDelegate delegate4 = getAsynchronousDelegate("Bean4", synchronizer1);
+ delegate4.addDependency(new AbstractDependencyItem("Bean4", "Bean6", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx4 = null;
+
+ AsynchronousTestDelegate delegate5 = getAsynchronousDelegate("Bean5", synchronizer1);
+ delegate5.addDependency(new AbstractDependencyItem("Bean5", "Bean6", ControllerState.CONFIGURED, ControllerState.INSTALLED));
+ ControllerContext ctx5 = null;
+
+ Synchronizer synchronizer2 = new Synchronizer(1, false, false, ControllerState.INSTALLED);
+ AsynchronousTestDelegate delegate6 = getAsynchronousDelegate("Bean6", synchronizer2);
+ ControllerContext ctx6 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ ctx3 = createAndInstallContext(delegate3, ControllerState.INSTALLED);
+ ctx4 = createAndInstallContext(delegate4, ControllerState.INSTALLED);
+ ctx5 = createAndInstallContext(delegate5, ControllerState.INSTALLED);
+ synchronizer1.waitForWorkersAndEmitStartSignal();
+ synchronizer1.waitForWorkersToEnd();
+ synchronizer1.resetWorkerDone(ControllerState.INSTALLED);
+ assertState(ctx1, ControllerState.INSTANTIATED);
+ assertState(ctx2, ControllerState.INSTANTIATED);
+ assertState(ctx3, ControllerState.INSTANTIATED);
+ assertState(ctx4, ControllerState.INSTANTIATED);
+ assertState(ctx5, ControllerState.INSTANTIATED);
+
+ ctx6 = createAndInstallContext(delegate6, ControllerState.INSTALLED);
+ synchronizer2.waitForWorkersAndEmitStartSignal();
+ synchronizer2.waitForWorkersToEnd();
+ assertInstalled(ctx6);
+ synchronizer1.waitForWorkersToEnd();
+
+ assertInstalled(ctx1);
+ assertInstalled(ctx2);
+ assertInstalled(ctx3);
+ assertInstalled(ctx4);
+ assertInstalled(ctx5);
+ assertSortedArray(new int[] {1, 2, 3, 4, 5}, new int[] {
+ delegate1.describeInstallOrder,
+ delegate2.describeInstallOrder,
+ delegate3.describeInstallOrder,
+ delegate4.describeInstallOrder,
+ delegate5.describeInstallOrder});
+ assertSortedArray(new int[] {6, 7, 8, 9, 10}, new int[] {
+ delegate1.instantiateInstallOrder,
+ delegate2.instantiateInstallOrder,
+ delegate3.instantiateInstallOrder,
+ delegate4.instantiateInstallOrder,
+ delegate5.instantiateInstallOrder});
+
+ assertEquals(11, delegate6.describeInstallOrder);
+ assertEquals(12, delegate6.instantiateInstallOrder);
+ assertEquals(13, delegate6.configureInstallOrder);
+ assertEquals(14, delegate6.createInstallOrder);
+ assertEquals(15, delegate6.startInstallOrder);
+ assertEquals(16, delegate6.installInstallOrder);
+
+ assertSortedArray(new int[] {17, 18, 19, 20, 21}, new int[] {
+ delegate1.configureInstallOrder,
+ delegate2.configureInstallOrder,
+ delegate3.configureInstallOrder,
+ delegate4.configureInstallOrder,
+ delegate5.configureInstallOrder});
+ assertSortedArray(new int[] {22, 23, 24, 25, 26}, new int[] {
+ delegate1.createInstallOrder,
+ delegate2.createInstallOrder,
+ delegate3.createInstallOrder,
+ delegate4.createInstallOrder,
+ delegate5.createInstallOrder});
+ assertSortedArray(new int[] {27, 28, 29, 30, 31}, new int[] {
+ delegate1.startInstallOrder,
+ delegate2.startInstallOrder,
+ delegate3.startInstallOrder,
+ delegate4.startInstallOrder,
+ delegate5.startInstallOrder});
+ assertSortedArray(new int[] {32, 33, 34, 35, 36}, new int[] {
+ delegate1.installInstallOrder,
+ delegate2.installInstallOrder,
+ delegate3.installInstallOrder,
+ delegate4.installInstallOrder,
+ delegate5.installInstallOrder});
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx1);
+ uninstallContext(ctx2);
+ uninstallContext(ctx3);
+ uninstallContext(ctx4);
+ uninstallContext(ctx5);
+ uninstallContext(ctx6);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ assertUninstalled(ctx3);
+ assertUninstalled(ctx4);
+ assertUninstalled(ctx5);
+ assertUninstalled(ctx6);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ public void testExecutorFull() throws Throwable
+ {
+ //Create an executor with 1 thread and a maximum queue size of 1
+ TestRejectedExecutionHandler handler = new TestRejectedExecutionHandler();
+ setExecutorInController(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1), handler));
+ Synchronizer synchronizer = new Synchronizer(1, false, ControllerState.INSTALLED);
+ Synchronizer synchronizer2 = new Synchronizer(1, false, false, ControllerState.INSTALLED);
+
+ //This should get picked up by the executor
+ AsynchronousTestDelegate delegate1 = getAsynchronousDelegate("Bean1", synchronizer);
+ ControllerContext ctx1 = null;
+ //This should fill up the executor queue
+ AsynchronousTestDelegate delegate2 = getAsynchronousDelegate("Bean2", synchronizer2);
+ ControllerContext ctx2 = null;
+ //This should get rejected by the executor and get run in the main thread
+ AsynchronousTestDelegate delegate3 = getAsynchronousDelegate("Bean3");
+ ControllerContext ctx3 = null;
+ try
+ {
+ ctx1 = createAndInstallContext(delegate1, ControllerState.INSTALLED);
+ sleep(200); //Make sure 1 gets picked up by the executor
+ ctx2 = createAndInstallContext(delegate2, ControllerState.INSTALLED);
+ assertEquals(0, handler.getRejectCount());
+ ctx3 = createAndInstallContext(delegate3, ControllerState.INSTALLED);
+ assertTrue(0 < handler.getRejectCount());
+ assertNotSame(ControllerState.INSTALLED, ctx1);
+ assertNotSame(ControllerState.INSTALLED, ctx2);
+ assertInstalled(ctx3);
+
+ synchronizer.waitForWorkersAndEmitStartSignal();
+ synchronizer.waitForWorkersToEnd();
+ synchronizer2.waitForWorkersToEnd();
+
+ assertEquals(1, delegate3.describeInstallOrder);
+ assertEquals(2, delegate3.instantiateInstallOrder);
+ assertEquals(3, delegate3.configureInstallOrder);
+ assertEquals(4, delegate3.createInstallOrder);
+ assertEquals(5, delegate3.startInstallOrder);
+ assertEquals(6, delegate3.installInstallOrder);
+ assertEquals(7, delegate1.describeInstallOrder);
+ assertEquals(8, delegate1.instantiateInstallOrder);
+ assertEquals(9, delegate1.configureInstallOrder);
+ assertEquals(10, delegate1.createInstallOrder);
+ assertEquals(11, delegate1.startInstallOrder);
+ assertEquals(12, delegate1.installInstallOrder);
+ assertEquals(13, delegate2.describeInstallOrder);
+ assertEquals(14, delegate2.instantiateInstallOrder);
+ assertEquals(15, delegate2.configureInstallOrder);
+ assertEquals(16, delegate2.createInstallOrder);
+ assertEquals(17, delegate2.startInstallOrder);
+ assertEquals(18, delegate2.installInstallOrder);
+ }
+ finally
+ {
+ try
+ {
+ uninstallContext(ctx1);
+ uninstallContext(ctx2);
+ uninstallContext(ctx3);
+ assertUninstalled(ctx1);
+ assertUninstalled(ctx2);
+ assertUninstalled(ctx3);
+ }
+ finally
+ {
+ clearExecutorInController();
+ }
+ }
+ }
+
+ private void setExecutorInController(int threads)
+ {
+ Executor executor = null;
+ if (threads >= 0)
+ {
+ executor = Executors.newFixedThreadPool(threads);
+ }
+ setExecutorInController(executor);
+ }
+
+ private void setExecutorInController(Executor executor)
+ {
+ ((AbstractController)controller).setExecutor(executor);
+ }
+
+ private void clearExecutorInController()
+ {
+ setExecutorInController(-1);
+ }
+
+ private AsynchronousTestDelegate getAsynchronousDelegate(Object name)
+ {
+ return getAnyDelegate(name, ControllerMode.ASYNCHRONOUS, null);
+ }
+
+ private AsynchronousTestDelegate getAsynchronousDelegate(Object name, Synchronizer installLatches)
+ {
+ return getAnyDelegate(name, ControllerMode.ASYNCHRONOUS, installLatches);
+ }
+
+ private AsynchronousTestDelegate getAutomaticDelegate(Object name)
+ {
+ return getAnyDelegate(name, ControllerMode.AUTOMATIC, null);
+ }
+
+ private AsynchronousTestDelegate getAutomaticDelegate(Object name, Synchronizer installSynchronizer)
+ {
+ return getAnyDelegate(name, ControllerMode.AUTOMATIC, installSynchronizer);
+ }
+
+ private AsynchronousTestDelegate getAnyDelegate(Object name, ControllerMode mode, Synchronizer installSynchronizer)
+ {
+ AsynchronousTestDelegate result = new AsynchronousTestDelegate(name, installSynchronizer);
+ result.setMode(mode);
+ return result;
+ }
+
+ private ControllerContext createAndInstallContext(AsynchronousTestDelegate delegate, ControllerState expected) throws Throwable
+ {
+ TestControllerContext context = new TestControllerContext(delegate);
+ controller.install(context);
+ return context;
+ }
+
+ private void assertInstalled(ControllerContext context) throws Throwable
+ {
+ assertState(context, ControllerState.INSTALLED);
+ }
+
+ private void assertState(ControllerContext context, ControllerState expected) throws Throwable
+ {
+ assertContext(context, expected);
+ }
+
+ private void uninstallContext(ControllerContext context)
+ {
+ if (context != null)
+ {
+ controller.uninstall(context.getName());
+ }
+ }
+
+ private void assertUninstalled(ControllerContext context) throws Throwable
+ {
+ assertState(context, ControllerState.ERROR);
+ }
+
+ private void assertSortedArray(int[] expected, int[] actual)
+ {
+ assertNotNull(expected);
+ assertNotNull(actual);
+ assertEquals(expected.length, actual.length);
+
+ Arrays.sort(expected);
+ Arrays.sort(actual);
+
+ for (int i = 0 ; i < actual.length ; i++)
+ {
+ assertEquals("Wrong value at index " + i, expected[i], actual[i]);
+ }
+ }
+
+
+ private void sleep(long unit)
+ {
+ try
+ {
+ Thread.sleep(7 * unit);
+ }
+ catch(InterruptedException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static class TestRejectedExecutionHandler implements RejectedExecutionHandler
+ {
+ AtomicInteger count = new AtomicInteger(0);
+
+ public int getRejectCount()
+ {
+ return count.get();
+ }
+
+ public void rejectedExecution(Runnable r, ThreadPoolExecutor executor)
+ {
+ count.incrementAndGet();
+ throw new RejectedExecutionException();
+ }
+ }
+}
Modified: projects/kernel/trunk/kernel/.classpath
===================================================================
--- projects/kernel/trunk/kernel/.classpath 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/.classpath 2009-07-02 15:02:36 UTC (rev 90770)
@@ -1,18 +1,20 @@
<classpath>
- <classpathentry kind="src" path="src/test/java" output="eclipse-target/tests-classes" including="**/*.java"/>
- <classpathentry kind="src" path="src/test/resources" output="eclipse-target/tests-classes" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+ <classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="output" path="eclipse-target/classes"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1.1/activation-1.1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/byteman/byteman/1.0.2/byteman-1.0.2.jar"/>
<classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.10.0.GA/javassist-3.10.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.10.0.GA/javassist-3.10.0.GA-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.9/jaxb-api-2.1.9.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.9/jaxb-api-2.1.9-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.13.GA/jboss-common-core-2.2.13.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.13.GA/jboss-common-core-2.2.13.GA-sources.jar"/>
- <classpathentry kind="src" path="/jboss-dependency"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/kernel/jboss-dependency/2.2.0-SNAPSHOT/jboss-dependency-2.2.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/kernel/jboss-dependency/2.2.0-SNAPSHOT/jboss-dependency-2.2.0-SNAPSHOT-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.1.1.CR1/jboss-managed-2.1.1.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.1.1.CR1/jboss-managed-2.1.1.CR1-sources.jar"/>
@@ -27,5 +29,4 @@
<classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
<classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>
\ No newline at end of file
Modified: projects/kernel/trunk/kernel/.project
===================================================================
--- projects/kernel/trunk/kernel/.project 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/.project 2009-07-02 15:02:36 UTC (rev 90770)
@@ -1,9 +1,7 @@
<projectDescription>
<name>jboss-kernel</name>
<comment>JBoss Microcontainer Kernel</comment>
- <projects>
- <project>jboss-dependency</project>
- </projects>
+ <projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
Modified: projects/kernel/trunk/kernel/pom.xml
===================================================================
--- projects/kernel/trunk/kernel/pom.xml 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/pom.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -26,9 +26,13 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <!--configuration>
- <testFailureIgnore>true</testFailureIgnore>
- </configuration-->
+ <configuration>
+ <!-- skip>true</skip -->
+ <!--testFailureIgnore>true</testFailureIgnore-->
+ <excludes>
+ <exclude>org/jboss/test/kernel/asynchronous/**/*</exclude>
+ </excludes>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -41,6 +45,43 @@
</descriptors>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.2</version>
+ <executions>
+ <execution>
+ <id>run-asynchronous-tests</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <phase>test</phase>
+ <configuration>
+ <tasks unless="maven.test.skip">
+ <property name="byteman.path" value="${maven.dependency.org.jboss.byteman.byteman.jar.path}"/>
+ <property name="report.dir" value="${project.build.directory}/surefire-reports"/>
+ <property name="testOutputDirectory" value="${project.build.testOutputDirectory}"/>
+
+ <ant antfile="${project.build.testOutputDirectory}/build.xml" inheritrefs="true">
+ <target name="asynchronous-tests"/>
+ </ant>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant-junit</artifactId>
+ <version>${version.ant.junit}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${version.junit}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
</plugins>
</build>
@@ -98,5 +139,11 @@
<artifactId>jboss-logging-log4j</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.jboss.byteman</groupId>
+ <artifactId>byteman</artifactId>
+ <version>1.0.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/test/kernel/junit/MicrocontainerTest.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/test/kernel/junit/MicrocontainerTest.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/test/kernel/junit/MicrocontainerTest.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -115,6 +115,7 @@
configureLogging();
// Validate everything deployed
getMCDelegate().validate();
+
}
@Override
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/BeanWithCreateStart.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/BeanWithCreateStart.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/BeanWithCreateStart.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,61 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.support;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BeanWithCreateStart
+{
+ Object dependency;
+ String name;
+
+ public void create()
+ {
+ }
+
+ public void start()
+ {
+ }
+
+ public Object getDependency()
+ {
+ return dependency;
+ }
+
+ public void setDependency(Object dependency)
+ {
+ this.dependency = dependency;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/ByteManException.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/ByteManException.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/ByteManException.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,32 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.support;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ByteManException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Helper.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Helper.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Helper.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,68 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.support;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.jboss.byteman.agent.Transformer;
+import org.jboss.byteman.rule.Rule;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Helper extends org.jboss.byteman.rule.helper.Helper
+{
+ static List<Point> points = new CopyOnWriteArrayList<Point>();
+ Logger log = Logger.getLogger(Helper.class);
+
+ protected Helper(Rule rule)
+ {
+ super(rule);
+ }
+
+ @Override
+ public boolean debug(String text)
+ {
+ if (Transformer.isDebug())
+ {
+ log.debug("[" + Thread.currentThread().getName() + "] - rule.debug{" + rule.getName() + "} : " + text);
+ }
+ return true;
+ }
+
+ public boolean addPoint(String name)
+ {
+ debug("Adding point " + name);
+ points.add(new Point(name));
+ return true;
+ }
+
+ public static List<Point> getPoints()
+ {
+ return points;
+ }
+
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Point.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Point.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/support/Point.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,55 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.support;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class Point
+{
+ String name;
+ String threadName;
+
+ public Point(String name)
+ {
+ this.name = name;
+ threadName = Thread.currentThread().getName();
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public String getThreadName()
+ {
+ return threadName;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Point[name=" + name + ",thread=" + threadName + "]";
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,90 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart;
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Test that an asynchronous context with a dependency on an asynchronous
+ * context is paused and picked up again as expected.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousContextWithDependencyOnAsynchronousTestCase extends AsynchronousTest
+{
+
+ public AsynchronousContextWithDependencyOnAsynchronousTestCase(String name)
+ {
+ super(name, 2);
+ }
+
+ public void testAsynchronousContextWithDependencyOnAsynchronous() throws Exception
+ {
+ deploy("AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml");
+ try
+ {
+ assertNoBean("Bean2");
+ assertBean("Bean1", ControllerState.INSTANTIATED, BeanWithCreateStart.class);
+ deploy("AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml");
+ try
+ {
+ BeanWithCreateStart bean1 = (BeanWithCreateStart)getBean("Bean1");
+ assertNotNull(bean1);
+ BeanWithCreateStart bean2 = (BeanWithCreateStart)getBean("Bean2");
+ assertNotNull(bean2);
+ assertSame(bean1.getDependency(), bean2);
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(14, points.size());
+
+ checkPoint(0, "PreInstall-Bean1", false);
+ checkPoint(1, "Describe-Bean1", false);
+ checkPoint(2, "Instantiate-Bean1", false);
+ checkPoint(3, "PreInstall-Bean2", false);
+ checkPoint(4, "Describe-Bean2", false);
+ checkPoint(5, "Instantiate-Bean2", false);
+ checkPoint(6, "Configure-Bean2", false);
+ checkPoint(7, "Create-Bean2", false);
+ checkPoint(8, "Start-Bean2", false);
+ checkPoint(9, "Install-Bean2", false);
+ checkPoint(10, "Configure-Bean1", false);
+ checkPoint(11, "Create-Bean1", false);
+ checkPoint(12, "Start-Bean1", false);
+ checkPoint(13, "Install-Bean1", false);
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml");
+ }
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml");
+ }
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,90 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart;
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Test that an asynchronous context with a dependency on an automatic
+ * context is paused and picked up again as expected.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousContextWithDependencyOnAutomaticTestCase extends AsynchronousTest
+{
+
+ public AsynchronousContextWithDependencyOnAutomaticTestCase(String name)
+ {
+ super(name, 2);
+ }
+
+ public void testAsynchronousContextWithDependencyOnAutomatic() throws Exception
+ {
+ deploy("AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml");
+ try
+ {
+ assertNoBean("Bean2");
+ assertBean("Bean1", ControllerState.INSTANTIATED, BeanWithCreateStart.class);
+ deploy("AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml");
+ try
+ {
+ BeanWithCreateStart bean1 = (BeanWithCreateStart)getBean("Bean1");
+ assertNotNull(bean1);
+ BeanWithCreateStart bean2 = (BeanWithCreateStart)getBean("Bean2");
+ assertNotNull(bean2);
+ assertSame(bean1.getDependency(), bean2);
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(14, points.size());
+
+ checkPoint(0, "PreInstall-Bean1", false);
+ checkPoint(1, "Describe-Bean1", false);
+ checkPoint(2, "Instantiate-Bean1", false);
+ checkPoint(3, "PreInstall-Bean2", true);
+ checkPoint(4, "Describe-Bean2", true);
+ checkPoint(5, "Instantiate-Bean2", true);
+ checkPoint(6, "Configure-Bean2", true);
+ checkPoint(7, "Create-Bean2", true);
+ checkPoint(8, "Start-Bean2", true);
+ checkPoint(9, "Install-Bean2", true);
+ checkPoint(10, "Configure-Bean1", false);
+ checkPoint(11, "Create-Bean1", false);
+ checkPoint(12, "Start-Bean1", false);
+ checkPoint(13, "Install-Bean1", false);
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml");
+ }
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml");
+ }
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,85 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart;
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Test that an asynchronous context with a dependency on an asynchronous
+ * context is paused and picked up again as expected.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousContextWithDependencyOnOnDemandTestCase extends AsynchronousTest
+{
+
+ public AsynchronousContextWithDependencyOnOnDemandTestCase(String name)
+ {
+ super(name, 2);
+ }
+
+ public void testAsynchronousContextWithDependencyOnOnDemand() throws Exception
+ {
+ deploy("AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml");
+ try
+ {
+ assertBean("Bean2", ControllerState.DESCRIBED, BeanWithCreateStart.class);
+ deploy("AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml");
+ try
+ {
+ BeanWithCreateStart bean1 = (BeanWithCreateStart)getBean("Bean1");
+ assertNotNull(bean1);
+ BeanWithCreateStart bean2 = (BeanWithCreateStart)getBean("Bean2");
+ assertNotNull(bean2);
+ assertSame(bean1.getDependency(), bean2);
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(6, points.size());
+
+ checkPoint(0, "PreInstall-Bean2", true);
+ checkPoint(1, "Describe-Bean2", true);
+
+ checkPoint(2, "PreInstall-Bean1", false);
+ checkPoint(3, "Describe-Bean1", false);
+
+ //Don't check the thread for these it is an implemetation detail
+ checkPoint(4, "Install-Bean2", null);
+
+ checkPoint(5, "Install-Bean1", false);
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml");
+ }
+ }
+ finally
+ {
+ undeploy("AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml");
+ }
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTest.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTest.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTest.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,98 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+import org.jboss.test.kernel.junit.MicrocontainerTest;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousTest extends MicrocontainerTest
+{
+ static Executor executor;
+
+ public AsynchronousTest(String name, int threads)
+ {
+ super(name);
+ executor = Executors.newFixedThreadPool(threads);
+ }
+
+ public AsynchronousTest(String name, Executor executor)
+ {
+ super(name);
+ AsynchronousTest.executor = executor;
+ }
+
+ /**
+ * Get the test delegate
+ *
+ * @param clazz the test class
+ * @return the delegate
+ * @throws Exception for any error
+ */
+ public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+ {
+ return new AsynchronousTestDelegate(clazz, executor);
+ }
+
+
+ protected Point assertGetPoint(int index)
+ {
+ List<Point> points = Helper.getPoints();
+ assertTrue(index < points.size());
+ Point point = points.get(index);
+ assertNotNull(point);
+ return point;
+ }
+
+ protected void checkPoint(int index, String name, Boolean mainThread)
+ {
+ Point point = assertGetPoint(index);
+ assertEquals(name, point.getName());
+ String mainThreadName = Thread.currentThread().getName();
+ if (mainThread != null)
+ {
+ if (mainThread)
+ {
+ assertEquals(mainThreadName, point.getThreadName());
+ }
+ else
+ {
+ assertFalse(mainThreadName.equals(point.getThreadName()));
+ }
+ }
+ }
+
+ protected AsynchronousTestDelegate getAsynchronousDelegate()
+ {
+ return (AsynchronousTestDelegate)getDelegate();
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTestDelegate.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTestDelegate.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AsynchronousTestDelegate.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,82 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.concurrent.Executor;
+
+import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer;
+import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AsynchronousTestDelegate extends MicrocontainerTestDelegate
+{
+ Executor executor;
+ public AsynchronousTestDelegate(Class<?> clazz, Executor executor) throws Exception
+ {
+ super(clazz);
+ this.executor = executor;
+ }
+
+ protected void setExecutor(Executor executor)
+ {
+ Controller controller = kernel.getController();
+ if (controller instanceof AbstractController == false)
+ {
+ throw new IllegalStateException("Controller is not instance of AbstractController");
+ }
+ ((AbstractController)controller).setExecutor(executor);
+ }
+
+ @Override
+ protected void deploy() throws Exception
+ {
+ setExecutor(executor);
+ super.deploy();
+ }
+
+ protected void deployTestXml() throws Exception
+ {
+ deploy(getTestResource(getTestResourceName()));
+ }
+
+ protected void undeployTestXml()
+ {
+ undeploy(getTestResource(getTestResourceName()));
+ }
+
+ private String getTestResourceName()
+ {
+ String testName = clazz.getName();
+ return testName.replace('.', '/') + "NotAutomatic.xml";
+ }
+
+ protected BasicXMLDeployer createDeployer()
+ {
+ return new BasicXMLDeployer(kernel, null);
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,92 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart;
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Test that an automatic context with a dependency on an asynchronous
+ * context is paused and picked up again as expected.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AutomaticContextWithDependencyOnAsynchronousTestCase extends AsynchronousTest
+{
+
+ public AutomaticContextWithDependencyOnAsynchronousTestCase(String name)
+ {
+ super(name, 2);
+ }
+
+ public void testAutomaticContextWithDependencyOnAsynchronous() throws Exception
+ {
+ deploy("AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml");
+ try
+ {
+ assertNoBean("Bean2");
+ assertBean("Bean1", ControllerState.INSTANTIATED, BeanWithCreateStart.class);
+ deploy("AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml");
+ try
+ {
+ BeanWithCreateStart bean1 = (BeanWithCreateStart)getBean("Bean1");
+ assertNotNull(bean1);
+ BeanWithCreateStart bean2 = (BeanWithCreateStart)getBean("Bean2");
+ assertNotNull(bean2);
+ assertSame(bean1.getDependency(), bean2);
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(14, points.size());
+
+ checkPoint(0, "PreInstall-Bean1", true);
+ checkPoint(1, "Describe-Bean1", true);
+ checkPoint(2, "Instantiate-Bean1", true);
+ checkPoint(3, "PreInstall-Bean2", false);
+ checkPoint(4, "Describe-Bean2", false);
+ checkPoint(5, "Instantiate-Bean2", false);
+ checkPoint(6, "Configure-Bean2", false);
+ checkPoint(7, "Create-Bean2", false);
+ checkPoint(8, "Start-Bean2", false);
+ checkPoint(9, "Install-Bean2", false);
+ //Don't check the thread for these it is an implemetation detail
+ checkPoint(10, "Configure-Bean1", null);
+ checkPoint(11, "Create-Bean1", null);
+ checkPoint(12, "Start-Bean1", null);
+ checkPoint(13, "Install-Bean1", null);
+ }
+ finally
+ {
+ undeploy("AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml");
+ }
+ }
+ finally
+ {
+ undeploy("AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml");
+ }
+ }
+
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,103 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Using byteman to verify that several asynchronous contexts can be in the same lifecycle
+ * at the same time
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class FiveParallelDeploymentsTestCase extends AsynchronousTest
+{
+ public FiveParallelDeploymentsTestCase(String name)
+ {
+ super(name, 5);
+ }
+
+ public void testFiveParallelDeployments() throws Exception
+ {
+ deploy("FiveParallelDeploymentsTestCase_NotAutomatic.xml");
+ try
+ {
+ assertNotNull(getBean("Bean1"));
+ assertNotNull(getBean("Bean2"));
+ assertNotNull(getBean("Bean3"));
+ assertNotNull(getBean("Bean4"));
+ assertNotNull(getBean("Bean5"));
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(points.toString(), 35, points.size());
+
+ assertPoints("PreInstallAction", points, 0);
+ assertPoints("DescribeAction", points, 5);
+ assertPoints("InstantiateAction", points, 10);
+ assertPoints("ConfigureAction", points, 15);
+ assertPoints("create", points, 20);
+ assertPoints("start", points, 25);
+ assertPoints("InstallAction", points, 30);
+ }
+ finally
+ {
+ undeploy("FiveParallelDeploymentsTestCase_NotAutomatic.xml");
+ }
+ }
+
+ private void assertPoints(String name, List<Point> points, int start)
+ {
+ assertTrue(start + 3 <= points.size());
+ Point point1 = assertGetPoint(start);
+ Point point2 = assertGetPoint(start + 1);
+ Point point3 = assertGetPoint(start + 2);
+ Point point4 = assertGetPoint(start + 3);
+ Point point5 = assertGetPoint(start + 4);
+
+ assertEquals(name, point1.getName());
+ assertEquals(name, point2.getName());
+ assertEquals(name, point3.getName());
+ assertEquals(name, point4.getName());
+ assertEquals(name, point5.getName());
+
+ assertNotNull(point1.getThreadName());
+ assertNotNull(point2.getThreadName());
+ assertNotNull(point3.getThreadName());
+ assertNotNull(point4.getThreadName());
+ assertNotNull(point5.getThreadName());
+
+ assertFalse(point1.getThreadName().equals(point2.getThreadName()));
+ assertFalse(point1.getThreadName().equals(point3.getThreadName()));
+ assertFalse(point1.getThreadName().equals(point4.getThreadName()));
+ assertFalse(point1.getThreadName().equals(point5.getThreadName()));
+ assertFalse(point2.getThreadName().equals(point3.getThreadName()));
+ assertFalse(point2.getThreadName().equals(point4.getThreadName()));
+ assertFalse(point2.getThreadName().equals(point5.getThreadName()));
+ assertFalse(point3.getThreadName().equals(point4.getThreadName()));
+ assertFalse(point3.getThreadName().equals(point5.getThreadName()));
+ assertFalse(point4.getThreadName().equals(point5.getThreadName()));
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,78 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import java.util.List;
+
+import org.jboss.test.kernel.asynchronous.support.Helper;
+import org.jboss.test.kernel.asynchronous.support.Point;
+
+/**
+ * Using byteman to verify that several asynchronous contexts can be in the same lifecycle
+ * at the same time
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TwoParallelDeploymentsTestCase extends AsynchronousTest
+{
+ public TwoParallelDeploymentsTestCase(String name)
+ {
+ super(name, 2);
+ }
+
+ public void testTwoParallelDeployments() throws Exception
+ {
+ deploy("TwoParallelDeploymentsTestCase_NotAutomatic.xml");
+ try
+ {
+ assertNotNull(getBean("Bean1"));
+ assertNotNull(getBean("Bean2"));
+
+ List<Point> points = Helper.getPoints();
+ assertEquals(points.toString(), 14, points.size());
+
+ assertPoints("PreInstallAction", 0, 1);
+ assertPoints("DescribeAction", 2, 3);
+ assertPoints("InstantiateAction", 4, 5);
+ assertPoints("ConfigureAction", 6, 7);
+ assertPoints("create", 8, 9);
+ assertPoints("start", 10, 11);
+ assertPoints("InstallAction", 12, 13);
+ }
+ finally
+ {
+ undeploy("TwoParallelDeploymentsTestCase_NotAutomatic.xml");
+ }
+ }
+
+ private void assertPoints(String name, int index1, int index2)
+ {
+ Point point1 = assertGetPoint(index1);
+ Point point2 = assertGetPoint(index2);
+ assertEquals(name, point1.getName());
+ assertEquals(name, point2.getName());
+ assertNotNull(point1.getThreadName());
+ assertNotNull(point1.getThreadName());
+ assertFalse(point1.getThreadName().equals(point2.getThreadName()));
+ }
+}
Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.java (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,54 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.asynchronous.test;
+
+import org.jboss.test.kernel.asynchronous.support.ByteManException;
+
+import junit.framework.TestCase;
+
+/**
+ * Silly little test to verify that ByteMan is working correctly from our set up
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class VerifyByteManTestCase extends TestCase
+{
+ public void testByteManTriggers()
+ {
+ try
+ {
+ trigger();
+ fail("ByteMan did not trigger");
+ }
+ catch(ByteManException expected)
+ {
+ }
+ }
+
+ /**
+ * ByteMan should throw an error when entering this method
+ */
+ private void trigger()
+ {
+ }
+}
Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanJaxbTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanJaxbTestCase.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanJaxbTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -116,6 +116,30 @@
assertNull(bean.getUninstallCallbacks());
}
+ public void testBeanWithAsynchronousMode() throws Exception
+ {
+ AbstractBeanMetaData bean = unmarshalBean();
+ assertNull(bean.getName());
+ assertEquals("Dummy", bean.getBean());
+ assertEquals(ControllerMode.ASYNCHRONOUS, bean.getMode());
+ assertNull(bean.getErrorHandlingMode());
+ assertNull(bean.getAccessMode());
+ assertNull(bean.getAnnotations());
+ assertNull(bean.getClassLoader());
+ assertNull(bean.getConstructor());
+ assertNull(bean.getProperties());
+ assertNull(bean.getCreate());
+ assertNull(bean.getStart());
+ assertNull(bean.getStop());
+ assertNull(bean.getDestroy());
+ assertNull(bean.getDemands());
+ assertNull(bean.getSupplies());
+ assertNull(bean.getInstalls());
+ assertNull(bean.getUninstalls());
+ assertNull(bean.getInstallCallbacks());
+ assertNull(bean.getUninstallCallbacks());
+ }
+
public void testBeanWithErrorHandlingMode() throws Exception
{
AbstractBeanMetaData bean = unmarshalBean();
Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanTestCase.java 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/deployment/xml/test/BeanTestCase.java 2009-07-02 15:02:36 UTC (rev 90770)
@@ -114,6 +114,29 @@
assertNull(bean.getUninstallCallbacks());
}
+ public void testBeanWithAsynchronousMode() throws Exception
+ {
+ AbstractBeanMetaData bean = unmarshalBean("BeanWithAsynchronousMode.xml");
+ assertNull(bean.getName());
+ assertEquals("Dummy", bean.getBean());
+ assertEquals(ControllerMode.ASYNCHRONOUS, bean.getMode());
+ assertNull(bean.getErrorHandlingMode());
+ assertNull(bean.getAccessMode());
+ assertNull(bean.getAnnotations());
+ assertNull(bean.getClassLoader());
+ assertNull(bean.getConstructor());
+ assertNull(bean.getProperties());
+ assertNull(bean.getCreate());
+ assertNull(bean.getStart());
+ assertNull(bean.getStop());
+ assertNull(bean.getDestroy());
+ assertNull(bean.getDemands());
+ assertNull(bean.getSupplies());
+ assertNull(bean.getInstalls());
+ assertNull(bean.getUninstalls());
+ assertNull(bean.getInstallCallbacks());
+ assertNull(bean.getUninstallCallbacks());
+ }
public void testBeanWithErrorHandlingMode() throws Exception
{
AbstractBeanMetaData bean = unmarshalBean("BeanWithErrorHandlingMode.xml");
Added: projects/kernel/trunk/kernel/src/test/resources/build.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/build.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/build.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- $Id: build-tests-jdk50.xml 87118 2009-04-10 10:42:21Z kabir.khan at jboss.com $ -->
+
+<project>
+ <target name="asynchronous-tests">
+ <mkdir dir="${report.dir}"/>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="VerifyByteManTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="TwoParallelDeploymentsTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="FiveParallelDeploymentsTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="AsynchronousContextWithDependencyOnAutomaticTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="AutomaticContextWithDependencyOnAsynchronousTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="AsynchronousContextWithDependencyOnAsynchronousTestCase"/>
+ </antcall>
+ <antcall target="run-asynchronous-test" inheritrefs="true">
+ <param name="test" value="AsynchronousContextWithDependencyOnOnDemandTestCase"/>
+ </antcall>
+ </target>
+
+ <target name="run-asynchronous-test">
+ <property name="bytemanScript" value="${testOutputDirectory}/org/jboss/test/kernel/asynchronous/test/${test}.txt"/>
+
+ <junit printsummary="yes" fork="true" haltonfailure="true" haltonerror="true">
+ <classpath>
+ <path refid="maven.test.classpath"/>
+ </classpath>
+ <jvmarg value="-javaagent:${byteman.path}=script:${bytemanScript}"/>
+ <sysproperty key="org.jboss.byteman.debug" value="true"/>
+ <formatter type="plain" usefile="true" extension=".txt" />
+ <formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter" usefile="true" extension=".xml" />
+ <test fork="yes" name="org.jboss.test.kernel.asynchronous.test.${test}" todir="${report.dir}"/>
+ </junit>
+ </target>
+</project>
\ No newline at end of file
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,100 @@
+RULE Wait for Complete following deploy on main thread
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+RULE Signal Complete for Bean1 in InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND ctx:KernelControllerContext = $1
+IF ctx.getName().equals("Bean1")
+DO debug("signalling wake"),
+ signalWake("Complete", true),
+ debug("signalled!")
+ENDRULE
+
+RULE Signal Complete for Bean1 in InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND ctx:KernelControllerContext = $1
+IF ctx.getName().equals("Bean1")
+DO debug("signalling wake"),
+ signalWake("Complete", true),
+ debug("signalled!")
+ENDRULE
+
+RULE Mark PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("PreInstall-" + ctx.getName())
+ENDRULE
+
+RULE Mark DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Describe-" + ctx.getName())
+ENDRULE
+
+RULE Mark InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Instantiate-" + ctx.getName())
+ENDRULE
+
+RULE Mark ConfigureAction
+CLASS org.jboss.kernel.plugins.dependency.ConfigureAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Configure-" + ctx.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark create
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD create
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Create-" + bean.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark StartStopLifecycleAction
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD start
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Start-" + bean.getName())
+ENDRULE
+
+RULE Mark InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Install-" + ctx.getName())
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Asynchronous.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous">
+ <property name="name">Bean1</property>
+ <property name="dependency"><inject bean="Bean2"/></property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAsynchronousTestCase_Dependency.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous">
+ <property name="name">Bean2</property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,88 @@
+RULE Wait for Complete following deploy on main thread
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+RULE Signal wake Complete following complete deploy in thread
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("signalling wake in AbstractController$InstallControllerContextTask"),
+ signalWake("Complete", true),
+ debug("signalled!")
+ENDRULE
+
+RULE Mark PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("PreInstall-" + ctx.getName())
+ENDRULE
+
+RULE Mark DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Describe-" + ctx.getName())
+ENDRULE
+
+RULE Mark InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Instantiate-" + ctx.getName())
+ENDRULE
+
+RULE Mark ConfigureAction
+CLASS org.jboss.kernel.plugins.dependency.ConfigureAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Configure-" + ctx.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark create
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD create
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Create-" + bean.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark StartStopLifecycleAction
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD start
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Start-" + bean.getName())
+ENDRULE
+
+RULE Mark InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Install-" + ctx.getName())
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Asynchronous.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous">
+ <property name="name">Bean1</property>
+ <property name="dependency"><inject bean="Bean2"/></property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnAutomaticTestCase_Dependency.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart">
+ <property name="name">Bean2</property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,50 @@
+RULE Wait for the asynchronous deployments
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF !createCounter("Counter") && incrementCounter("Counter")==1
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+RULE Signal Complete for Bean1 in InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND ctx:KernelControllerContext = $1
+IF ctx.getName().equals("Bean1")
+DO debug("signalling wake"),
+ signalWake("Complete", true),
+ debug("signalled!")
+ENDRULE
+
+RULE Mark PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("PreInstall-" + ctx.getName())
+ENDRULE
+
+RULE Mark DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Describe-" + ctx.getName())
+ENDRULE
+
+RULE Mark InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Install-" + ctx.getName())
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Asynchronous.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous">
+ <property name="name">Bean1</property>
+ <property name="dependency"><inject bean="Bean2"/></property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AsynchronousContextWithDependencyOnOnDemandTestCase_Dependency.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="On Demand">
+ <property name="name">Bean2</property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,89 @@
+RULE Wait for Complete following deploy on main thread
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF 1 < incrementCounter("Start")
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+
+RULE Signal wake Complete following complete deploy in thread
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("signalling wake in AbstractController$InstallControllerContextTask"),
+ signalWake("Complete", true),
+ debug("signalled!")
+ENDRULE
+
+RULE Mark PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("PreInstall-" + ctx.getName())
+ENDRULE
+
+RULE Mark DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Describe-" + ctx.getName())
+ENDRULE
+
+RULE Mark InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Instantiate-" + ctx.getName())
+ENDRULE
+
+RULE Mark ConfigureAction
+CLASS org.jboss.kernel.plugins.dependency.ConfigureAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Configure-" + ctx.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark create
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD create
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Create-" + bean.getName())
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Mark StartStopLifecycleAction
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD start
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND bean = $0
+IF TRUE
+DO addPoint("Start-" + bean.getName())
+ENDRULE
+
+RULE Mark InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal(KernelControllerContext)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND ctx:KernelControllerContext = $1
+IF TRUE
+DO addPoint("Install-" + ctx.getName())
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Automatic.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart">
+ <property name="name">Bean1</property>
+ <property name="dependency"><inject bean="Bean2"/></property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/AutomaticContextWithDependencyOnAsynchronousTestCase_Dependency.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous">
+ <property name="name">Bean2</property>
+ </bean>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/Copy.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/Copy.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/Copy.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,11 @@
+RULE Initialise Counter
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+#AT EXIT
+BIND NOTHING
+IF !createCounter("Counter") && incrementCounter("Counter")==1
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,131 @@
+RULE Rendezvous on first thread execution
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("Run", 5),
+ debug("rendezvous in AbstractController$InstallControllerContextTask"),
+ rendezvous("Run"),
+ debug("go!!!")
+ENDRULE
+
+RULE Wait for Complete following deploy on main thread
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+RULE Signal wake Complete following complete deploy in thread
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO createRendezvous("End", 2),
+ debug("End rendezvous in AbstractController$InstallControllerContextTask"),
+ rendezvous("End"),
+ debug("signalling wake in AbstractController$InstallControllerContextTask"),
+ signalWake("Complete"),
+ debug("signalled!")
+ENDRULE
+
+RULE Rendezvous in PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("PreInstallAction", 5),
+ debug("rendezvous in PreInstallAction.installActionInternal"),
+ rendezvous("PreInstallAction"),
+ addPoint("PreInstallAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("DescribeAction", 5),
+ debug("rendezvous in DescribeAction.installActionInternal"),
+ rendezvous("DescribeAction"),
+ addPoint("DescribeAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("InstantiateAction", 5),
+ debug("rendezvous in InstantiateAction.installActionInternal"),
+ rendezvous("InstantiateAction"),
+ addPoint("InstantiateAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in ConfigureAction
+CLASS org.jboss.kernel.plugins.dependency.ConfigureAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("ConfigureAction", 5),
+ debug("rendezvous in ConfigureAction.installActionInternal"),
+ rendezvous("ConfigureAction"),
+ addPoint("ConfigureAction"),
+ debug("go!!!")
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Rendezvous in create
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD create
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("create", 5),
+ debug("rendezvous in BeanWithCreateStart.create"),
+ rendezvous("create"),
+ addPoint("create"),
+ debug("go!!!")
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Rendezvous in StartStopLifecycleAction
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD start
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("start", 5),
+ debug("rendezvous in BeanWithCreateStart.start"),
+ rendezvous("start"),
+ addPoint("start"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("InstallAction", 5),
+ debug("rendezvous in InstallAction.installActionInternal"),
+ rendezvous("InstallAction"),
+ addPoint("InstallAction"),
+ debug("go!!!")
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase_NotAutomatic.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase_NotAutomatic.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/FiveParallelDeploymentsTestCase_NotAutomatic.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+ <bean name="Bean3" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+ <bean name="Bean4" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+ <bean name="Bean5" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,131 @@
+RULE Rendezvous on first thread execution
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("Run", 2),
+ debug("rendezvous in AbstractController$InstallControllerContextTask"),
+ rendezvous("Run"),
+ debug("go!!!")
+ENDRULE
+
+RULE Wait for Complete following deploy on main thread
+CLASS org.jboss.test.kernel.junit.MicrocontainerTestDelegate
+METHOD deploy(java.net.URL)
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO debug("wait in deploy"),
+ waitFor("Complete", 10000),
+ debug("go!!!")
+ENDRULE
+
+RULE Signal wake Complete following complete deploy in thread
+CLASS org.jboss.dependency.plugins.AbstractController$InstallControllerContextTask
+METHOD run
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+AT EXIT
+BIND NOTHING
+IF TRUE
+DO createRendezvous("End", 2),
+ debug("End rendezvous in AbstractController$InstallControllerContextTask"),
+ rendezvous("End"),
+ debug("signalling wake in AbstractController$InstallControllerContextTask"),
+ signalWake("Complete"),
+ debug("signalled!")
+ENDRULE
+
+RULE Rendezvous in PreInstallAction
+CLASS org.jboss.kernel.plugins.dependency.PreInstallAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("PreInstallAction", 2),
+ debug("rendezvous in PreInstallAction.installActionInternal"),
+ rendezvous("PreInstallAction"),
+ addPoint("PreInstallAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in DescribeAction
+CLASS org.jboss.kernel.plugins.dependency.DescribeAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("DescribeAction", 2),
+ debug("rendezvous in DescribeAction.installActionInternal"),
+ rendezvous("DescribeAction"),
+ addPoint("DescribeAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in InstantiateAction
+CLASS org.jboss.kernel.plugins.dependency.InstantiateAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("InstantiateAction", 2),
+ debug("rendezvous in InstantiateAction.installActionInternal"),
+ rendezvous("InstantiateAction"),
+ addPoint("InstantiateAction"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in ConfigureAction
+CLASS org.jboss.kernel.plugins.dependency.ConfigureAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("ConfigureAction", 2),
+ debug("rendezvous in ConfigureAction.installActionInternal"),
+ rendezvous("ConfigureAction"),
+ addPoint("ConfigureAction"),
+ debug("go!!!")
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Rendezvous in create
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD create
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("create", 2),
+ debug("rendezvous in BeanWithCreateStart.create"),
+ rendezvous("create"),
+ addPoint("create"),
+ debug("go!!!")
+ENDRULE
+
+#We don't do this in the Action class since there is no point invoked once on install
+RULE Rendezvous in StartStopLifecycleAction
+CLASS org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart
+METHOD start
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("start", 2),
+ debug("rendezvous in BeanWithCreateStart.start"),
+ rendezvous("start"),
+ addPoint("start"),
+ debug("go!!!")
+ENDRULE
+
+RULE Rendezvous in InstallAction
+CLASS org.jboss.kernel.plugins.dependency.InstallAction
+METHOD installActionInternal
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO createRendezvous("InstallAction", 2),
+ debug("rendezvous in InstallAction.installActionInternal"),
+ rendezvous("InstallAction"),
+ addPoint("InstallAction"),
+ debug("go!!!")
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase_NotAutomatic.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase_NotAutomatic.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/TwoParallelDeploymentsTestCase_NotAutomatic.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="Bean1" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+ <bean name="Bean2" class="org.jboss.test.kernel.asynchronous.support.BeanWithCreateStart" mode="Asynchronous"/>
+</deployment>
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.txt
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.txt (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/asynchronous/test/VerifyByteManTestCase.txt 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,8 @@
+RULE test byteman
+CLASS org.jboss.test.kernel.asynchronous.test.VerifyByteManTestCase
+METHOD trigger
+HELPER org.jboss.test.kernel.asynchronous.support.Helper
+BIND NOTHING
+IF TRUE
+DO throw org.jboss.test.kernel.asynchronous.support.ByteManException()
+ENDRULE
Added: projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/BeanWithAsynchronousMode.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/BeanWithAsynchronousMode.xml (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/org/jboss/test/kernel/deployment/xml/test/BeanWithAsynchronousMode.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy" mode="Asynchronous"/>
Modified: projects/kernel/trunk/pom.xml
===================================================================
--- projects/kernel/trunk/pom.xml 2009-07-02 14:28:30 UTC (rev 90769)
+++ projects/kernel/trunk/pom.xml 2009-07-02 15:02:36 UTC (rev 90770)
@@ -51,6 +51,7 @@
<version.jboss.drools>4.0.1</version.jboss.drools>
<version.jboss.jbpm>3.1.1</version.jboss.jbpm>
<version.google.guice>1.0</version.google.guice>
+ <version.jboss.byteman>1.0.2</version.jboss.byteman>
</properties>
<build>
@@ -280,6 +281,12 @@
<artifactId>guice</artifactId>
<version>${version.google.guice}</version>
</dependency>
+ <dependency>
+ <groupId>org.jboss.byteman</groupId>
+ <artifactId>byteman</artifactId>
+ <version>${version.jboss.byteman}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
More information about the jboss-cvs-commits
mailing list