GERONIMO-4360 more spec implementation, mostly about which import contexts get processed when
git-svn-id: https://svn.apache.org/repos/asf/geronimo/components/txmanager/trunk@780440 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/geronimo-connector/pom.xml b/geronimo-connector/pom.xml
index 253d26b..52fd1fd 100644
--- a/geronimo-connector/pom.xml
+++ b/geronimo-connector/pom.xml
@@ -61,5 +61,28 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <!-- Do not include META-INF/maven to avoid long file problems on windows -->
+ <addMavenDescriptor>false</addMavenDescriptor>
+ </archive>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <!-- Build *test.jar files for modules -->
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
</project>
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
index f15d8bd..c9ef362 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
@@ -17,9 +17,9 @@
package org.apache.geronimo.connector.work;
-import java.util.concurrent.Executor;
-import java.util.List;
+import java.util.Collection;
import java.util.Collections;
+import java.util.concurrent.Executor;
import javax.resource.spi.work.ExecutionContext;
import javax.resource.spi.work.Work;
@@ -37,7 +37,7 @@
* WorkManager implementation which uses under the cover three WorkExecutorPool
* - one for each synchronization policy - in order to dispatch the submitted
* Work instances.
- * <P>
+ * <p/>
* A WorkManager is a component of the JCA specifications, which allows a
* Resource Adapter to submit tasks to an Application Server for execution.
*
@@ -65,7 +65,7 @@
*/
private Executor scheduledWorkExecutorPool;
- private final List<InflowContextHandler> inflowContextHandlers;
+ private final Collection<InflowContextHandler> inflowContextHandlers;
private final WorkExecutor scheduleWorkExecutor = new ScheduleWorkExecutor();
@@ -79,11 +79,11 @@
this(null, null, null, null);
}
- public GeronimoWorkManager(Executor sync, Executor start, Executor sched, List<InflowContextHandler> inflowContextHandlers) {
+ public GeronimoWorkManager(Executor sync, Executor start, Executor sched, Collection<InflowContextHandler> inflowContextHandlers) {
syncWorkExecutorPool = sync;
startWorkExecutorPool = start;
scheduledWorkExecutorPool = sched;
- this.inflowContextHandlers = inflowContextHandlers == null? Collections.<InflowContextHandler>emptyList(): inflowContextHandlers;
+ this.inflowContextHandlers = inflowContextHandlers == null ? Collections.<InflowContextHandler>emptyList() : inflowContextHandlers;
}
public void doStart() throws Exception {
@@ -188,9 +188,8 @@
* Execute the specified Work.
*
* @param work Work to be executed.
- *
- * @exception WorkException Indicates that the Work execution has been
- * unsuccessful.
+ * @throws WorkException Indicates that the Work execution has been
+ * unsuccessful.
*/
private void executeWork(WorkerContext work, WorkExecutor workExecutor, Executor pooledExecutor) throws WorkException {
work.workAccepted(this);
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/InflowContextHandler.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/InflowContextHandler.java
index 326fd71..5e0ad3c 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/InflowContextHandler.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/InflowContextHandler.java
@@ -24,7 +24,7 @@
import javax.resource.spi.work.WorkCompletedException;
/**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
*/
public interface InflowContextHandler<E extends InflowContext> {
@@ -34,4 +34,6 @@
Class<E> getHandledClass();
+ boolean required();
+
}
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionInflowContextHandler.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionInflowContextHandler.java
index 0623da2..5bcd0d1 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionInflowContextHandler.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionInflowContextHandler.java
@@ -30,7 +30,7 @@
import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
/**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
*/
public class TransactionInflowContextHandler implements InflowContextHandler<TransactionInflowContext>{
@@ -73,4 +73,8 @@
public Class<TransactionInflowContext> getHandledClass() {
return TransactionInflowContext.class;
}
+
+ public boolean required() {
+ return false;
+ }
}
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
index e1df22a..4f5c2d7 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
@@ -21,6 +21,7 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Collection;
import java.util.concurrent.CountDownLatch;
import javax.resource.NotSupportedException;
@@ -131,9 +132,9 @@
* @param work Work to be wrapped.
* @param inflowContextHandlers InflowContextHandlers supported by this work manager
*/
- public WorkerContext(Work work, List<InflowContextHandler> inflowContextHandlers) {
+ public WorkerContext(Work work, Collection<InflowContextHandler> inflowContextHandlers) {
adaptee = work;
- this.inflowContextHandlers = inflowContextHandlers;
+ this.inflowContextHandlers = new ArrayList<InflowContextHandler>(inflowContextHandlers);
executionContext = null;
workListener = NULL_WORK_LISTENER;
}
@@ -154,7 +155,7 @@
public WorkerContext(Work aWork,
long aStartTimeout,
ExecutionContext execContext,
- WorkListener workListener, List<InflowContextHandler> inflowContextHandlers) throws WorkRejectedException {
+ WorkListener workListener, Collection<InflowContextHandler> inflowContextHandlers) throws WorkRejectedException {
adaptee = aWork;
startTimeOut = aStartTimeout;
if (null == workListener) {
@@ -170,7 +171,7 @@
} else {
executionContext = execContext;
}
- this.inflowContextHandlers = inflowContextHandlers;
+ this.inflowContextHandlers = new ArrayList<InflowContextHandler>(inflowContextHandlers);
}
/* (non-Javadoc)
@@ -333,18 +334,30 @@
throw new WorkCompletedException("Duplicate or unhandled InflowContext: " + inflowContext);
}
}
+ for (Iterator<InflowContextHandler> it = inflowContextHandlers.iterator(); it.hasNext();) {
+ InflowContextHandler inflowContextHandler = it.next();
+ if (!inflowContextHandler.required()) {
+ it.remove();
+ }
+ }
// TODO use a InflowContextLifecycleListener
int i = 0;
for (InflowContext inflowContext : inflowContexts) {
- inflowContextHandlers.get(i).before(inflowContext);
+ sortedHandlers.get(i++).before(inflowContext);
+ }
+ for (InflowContextHandler inflowContextHandler: inflowContextHandlers) {
+ inflowContextHandler.before(null);
}
try {
adaptee.run();
} finally {
int j = 0;
for (InflowContext inflowContext : inflowContexts) {
- inflowContextHandlers.get(j).after(inflowContext);
+ sortedHandlers.get(j++).after(inflowContext);
+ }
+ for (InflowContextHandler inflowContextHandler: inflowContextHandlers) {
+ inflowContextHandler.after(null);
}
}