You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/01/14 00:05:41 UTC
svn commit: r1058785 - in
/geronimo/sandbox/djencks/txmanager/geronimo-connector: ./
src/main/java/org/apache/geronimo/connector/
src/main/java/org/apache/geronimo/connector/outbound/
src/main/java/org/apache/geronimo/connector/work/ src/main/java/org/...
Author: djencks
Date: Thu Jan 13 23:05:40 2011
New Revision: 1058785
URL: http://svn.apache.org/viewvc?rev=1058785&view=rev
Log:
remove unneeded classes and set up BootstrapContext using DS
Added:
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java (with props)
Removed:
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/NamedRunnable.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/NullWorkExecutorPool.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPool.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPoolImpl.java
Modified:
geronimo/sandbox/djencks/txmanager/geronimo-connector/pom.xml
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java
geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/pom.xml?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/pom.xml (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/pom.xml Thu Jan 13 23:05:40 2011
@@ -100,6 +100,10 @@
<plugin>
<groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java Thu Jan 13 23:05:40 2011
@@ -23,6 +23,9 @@ import javax.resource.spi.XATerminator;
import javax.resource.spi.work.WorkManager;
import javax.resource.spi.work.WorkContext;
import javax.transaction.TransactionSynchronizationRegistry;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
import org.apache.geronimo.connector.work.GeronimoWorkManager;
/**
@@ -31,25 +34,32 @@ import org.apache.geronimo.connector.wor
*
* @version $Rev$ $Date$
*/
+@Component
+@Service
public class GeronimoBootstrapContext implements javax.resource.spi.BootstrapContext {
- private final GeronimoWorkManager workManager;
- private final XATerminator xATerminator;
- private final TransactionSynchronizationRegistry transactionSynchronizationRegistry;
+
+ @Reference
+ private GeronimoWorkManager workManager;
+
+ @Reference
+ private XATerminator xATerminator;
+
+ @Reference
+ private TransactionSynchronizationRegistry transactionSynchronizationRegistry;
/**
* Default constructor for use as a GBean Endpoint.
*/
public GeronimoBootstrapContext() {
- workManager = null;
- xATerminator = null;
- transactionSynchronizationRegistry = null;
}
/**
* Normal constructor for use as a GBean.
+ *
* @param workManager
* @param xaTerminator
* @param transactionSynchronizationRegistry
+ *
*/
public GeronimoBootstrapContext(GeronimoWorkManager workManager, XATerminator xaTerminator, TransactionSynchronizationRegistry transactionSynchronizationRegistry) {
this.workManager = workManager;
@@ -57,6 +67,29 @@ public class GeronimoBootstrapContext im
this.transactionSynchronizationRegistry = transactionSynchronizationRegistry;
}
+ public void bindTransactionSynchronizationRegistry(TransactionSynchronizationRegistry transactionSynchronizationRegistry) {
+ this.transactionSynchronizationRegistry = transactionSynchronizationRegistry;
+ }
+
+ public void unbindTransactionSynchronizationRegistry(TransactionSynchronizationRegistry transactionSynchronizationRegistry) {
+ this.transactionSynchronizationRegistry = null;
+ }
+
+ public void bindWorkManager(GeronimoWorkManager workManager) {
+ this.workManager = workManager;
+ }
+
+ public void unbindWorkManager(GeronimoWorkManager workManager) {
+ this.workManager = null;
+ }
+
+ public void bindxATerminator(XATerminator xATerminator) {
+ this.xATerminator = xATerminator;
+ }
+
+ public void unbindxATerminator(XATerminator xATerminator) {
+ this.xATerminator = null;
+ }
/**
* @see javax.resource.spi.BootstrapContext#getWorkManager()
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java Thu Jan 13 23:05:40 2011
@@ -375,7 +375,7 @@ public abstract class AbstractSinglePool
interceptor.getExpiredManagedConnectionInfos(threshold, killList);
for (ManagedConnectionInfo managedConnectionInfo : killList) {
ConnectionInfo killInfo = new ConnectionInfo(managedConnectionInfo);
- interceptor.internalReturn(killInfo, ConnectionReturnAction.DESTROY);
+ parent.next.returnConnection(killInfo, ConnectionReturnAction.DESTROY);
}
} catch (Throwable t) {
log.error("Error occurred during execution of ExpirationMonitor TimerTask", t);
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java Thu Jan 13 23:05:40 2011
@@ -19,6 +19,7 @@ package org.apache.geronimo.connector.ou
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import javax.resource.ResourceException;
@@ -160,9 +161,12 @@ public class SinglePoolConnectionInterce
protected void getExpiredManagedConnectionInfos(long threshold, List<ManagedConnectionInfo> killList) {
synchronized (pool) {
- for (ManagedConnectionInfo mci : pool) {
+ for (Iterator<ManagedConnectionInfo> mcis = pool.iterator(); mcis.hasNext(); ) {
+ ManagedConnectionInfo mci = mcis.next();
if (mci.getLastUsed() < threshold) {
+ mcis.remove();
killList.add(mci);
+ connectionCount--;
}
}
}
Added: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java?rev=1058785&view=auto
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java (added)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java Thu Jan 13 23:05:40 2011
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.geronimo.connector.work;
+
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+
+/**
+ * Basic executor that can be used if nothing else is available.
+ *
+ * @version $Rev$ $Date$
+ */
+
+@Component
+@Service
+@Property(name = "service.ranking", intValue = 0)
+public class DSExecutor extends ThreadPoolExecutor {
+ public DSExecutor() {
+ super(5, 10, 5000, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>());
+ setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
+ }
+}
Propchange: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/DSExecutor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java Thu Jan 13 23:05:40 2011
@@ -29,13 +29,20 @@ import javax.resource.spi.work.WorkExcep
import javax.resource.spi.work.WorkListener;
import javax.resource.spi.work.WorkManager;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
import org.apache.geronimo.connector.work.pool.ScheduleWorkExecutor;
import org.apache.geronimo.connector.work.pool.StartWorkExecutor;
import org.apache.geronimo.connector.work.pool.SyncWorkExecutor;
import org.apache.geronimo.connector.work.pool.WorkExecutor;
/**
- * WorkManager implementation which uses under the cover three WorkExecutorPool
+ * WorkManager implementation which uses under the cover three WorkExecutors
* - one for each synchronization policy - in order to dispatch the submitted
* Work instances.
* <p/>
@@ -44,29 +51,41 @@ import org.apache.geronimo.connector.wor
*
* @version $Rev$ $Date$
*/
+@Component(metatype = true)
+@Service
+@Properties({@Property(name = "startExecutor.target",
+ value = "(service.ranking>=0)"),
+ @Property(name = "syncExecutor.target",
+ value = "(service.ranking>=0)"),
+ @Property(name = "scheduleExecutor.target",
+ value = "(service.ranking>=0)")})
public class GeronimoWorkManager implements WorkManager {
-// private final static int DEFAULT_POOL_SIZE = 10;
-
/**
* Pool of threads used by this WorkManager in order to process
* the Work instances submitted via the doWork methods.
*/
- private Executor syncWorkExecutorPool;
+ @Reference(target = "(service.ranking>=0)")
+ private Executor syncExecutor;
/**
* Pool of threads used by this WorkManager in order to process
* the Work instances submitted via the startWork methods.
*/
- private Executor startWorkExecutorPool;
+ @Reference(target = "(service.ranking>=0)")
+ private Executor startExecutor;
/**
* Pool of threads used by this WorkManager in order to process
* the Work instances submitted via the scheduleWork methods.
*/
- private Executor scheduledWorkExecutorPool;
+ @Reference(target = "(service.ranking>=0)")
+ private Executor scheduleExecutor;
- private final Collection<WorkContextHandler> workContextHandlers;
+ @Reference(referenceInterface = WorkContextHandler.class,
+ cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+ policy = ReferencePolicy.DYNAMIC)
+ private final Collection<WorkContextHandler<? extends WorkContext>> workContextHandlers;
private final WorkExecutor scheduleWorkExecutor = new ScheduleWorkExecutor();
@@ -80,44 +99,52 @@ public class GeronimoWorkManager impleme
this(null, null, null, null);
}
- public GeronimoWorkManager(Executor sync, Executor start, Executor sched, Collection<WorkContextHandler> workContextHandlers) {
- syncWorkExecutorPool = sync;
- startWorkExecutorPool = start;
- scheduledWorkExecutorPool = sched;
- this.workContextHandlers = workContextHandlers == null ? Collections.<WorkContextHandler>emptyList() : workContextHandlers;
+ public GeronimoWorkManager(Executor sync, Executor start, Executor sched, Collection<WorkContextHandler<? extends WorkContext>> workContextHandlers) {
+ syncExecutor = sync;
+ startExecutor = start;
+ scheduleExecutor = sched;
+ this.workContextHandlers = workContextHandlers == null ? Collections.<WorkContextHandler<? extends WorkContext>>emptyList() : workContextHandlers;
}
- public void doStart() throws Exception {
+
+ protected void bindStartExecutor(Executor startExecutor) {
+ this.startExecutor = startExecutor;
}
- public void doStop() throws Exception {
+ protected void unbindStartExecutor(Executor startExecutor) {
+ this.startExecutor = null;
}
- public void doFail() {
- try {
- doStop();
- } catch (Exception e) {
- //TODO what to do?
- }
+ protected void bindSyncExecutor(Executor syncExecutor) {
+ this.syncExecutor = syncExecutor;
}
- public Executor getSyncWorkExecutorPool() {
- return syncWorkExecutorPool;
+ protected void unbindSyncExecutor(Executor syncExecutor) {
+ this.syncExecutor = null;
}
- public Executor getStartWorkExecutorPool() {
- return startWorkExecutorPool;
+ protected void bindScheduleExecutor(Executor scheduleExecutor) {
+ this.scheduleExecutor = scheduleExecutor;
}
- public Executor getScheduledWorkExecutorPool() {
- return scheduledWorkExecutorPool;
+ protected void unbindScheduleExecutor(Executor scheduleExecutor) {
+ this.scheduleExecutor = null;
}
+ protected void bindWorkContextHandler(WorkContextHandler<? extends WorkContext> workContextHandler) {
+ workContextHandlers.add(workContextHandler);
+ }
+
+ protected void unbindWorkContextHandler(WorkContextHandler<? extends WorkContext> workContextHandler) {
+ workContextHandlers.remove(workContextHandler);
+ }
+
+
/* (non-Javadoc)
* @see javax.resource.spi.work.WorkManager#doWork(javax.resource.spi.work.Work)
*/
public void doWork(Work work) throws WorkException {
- executeWork(new WorkerContext(work, workContextHandlers), syncWorkExecutor, syncWorkExecutorPool);
+ executeWork(new WorkerContext(work, workContextHandlers), syncWorkExecutor, syncExecutor);
}
/* (non-Javadoc)
@@ -132,7 +159,7 @@ public class GeronimoWorkManager impleme
WorkerContext workWrapper =
new WorkerContext(work, startTimeout, execContext, workListener, workContextHandlers);
workWrapper.setThreadPriority(Thread.currentThread().getPriority());
- executeWork(workWrapper, syncWorkExecutor, syncWorkExecutorPool);
+ executeWork(workWrapper, syncWorkExecutor, syncExecutor);
}
/* (non-Javadoc)
@@ -141,7 +168,7 @@ public class GeronimoWorkManager impleme
public long startWork(Work work) throws WorkException {
WorkerContext workWrapper = new WorkerContext(work, workContextHandlers);
workWrapper.setThreadPriority(Thread.currentThread().getPriority());
- executeWork(workWrapper, startWorkExecutor, startWorkExecutorPool);
+ executeWork(workWrapper, startWorkExecutor, startExecutor);
return System.currentTimeMillis() - workWrapper.getAcceptedTime();
}
@@ -157,7 +184,7 @@ public class GeronimoWorkManager impleme
WorkerContext workWrapper =
new WorkerContext(work, startTimeout, execContext, workListener, workContextHandlers);
workWrapper.setThreadPriority(Thread.currentThread().getPriority());
- executeWork(workWrapper, startWorkExecutor, startWorkExecutorPool);
+ executeWork(workWrapper, startWorkExecutor, startExecutor);
return System.currentTimeMillis() - workWrapper.getAcceptedTime();
}
@@ -167,7 +194,7 @@ public class GeronimoWorkManager impleme
public void scheduleWork(Work work) throws WorkException {
WorkerContext workWrapper = new WorkerContext(work, workContextHandlers);
workWrapper.setThreadPriority(Thread.currentThread().getPriority());
- executeWork(workWrapper, scheduleWorkExecutor, scheduledWorkExecutorPool);
+ executeWork(workWrapper, scheduleWorkExecutor, scheduleExecutor);
}
/* (non-Javadoc)
@@ -182,7 +209,7 @@ public class GeronimoWorkManager impleme
WorkerContext workWrapper =
new WorkerContext(work, startTimeout, execContext, workListener, workContextHandlers);
workWrapper.setThreadPriority(Thread.currentThread().getPriority());
- executeWork(workWrapper, scheduleWorkExecutor, scheduledWorkExecutorPool);
+ executeWork(workWrapper, scheduleWorkExecutor, scheduleExecutor);
}
/**
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java Thu Jan 13 23:05:40 2011
@@ -23,10 +23,15 @@ package org.apache.geronimo.connector.wo
import javax.resource.spi.work.HintsContext;
import javax.resource.spi.work.WorkCompletedException;
import javax.resource.spi.work.WorkContext;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
/**
* @version $Rev$ $Date$
*/
+
+@Component
+@Service
public class HintsContextHandler implements WorkContextHandler<HintsContext> {
public void before(HintsContext workContext) throws WorkCompletedException {
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java Thu Jan 13 23:05:40 2011
@@ -27,20 +27,38 @@ import javax.transaction.xa.XAException;
import javax.transaction.InvalidTransactionException;
import javax.transaction.SystemException;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
import org.apache.geronimo.transaction.manager.XAWork;
import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
/**
* @version $Rev$ $Date$
*/
+
+@Component
+@Service
public class TransactionContextHandler implements WorkContextHandler<TransactionContext>{
- private final XAWork xaWork;
+ @Reference
+ private XAWork xaWork;
+
+ public TransactionContextHandler() {
+ }
public TransactionContextHandler(XAWork xaWork) {
this.xaWork = xaWork;
}
+ public void bindXaWork(XAWork xaWork) {
+ this.xaWork = xaWork;
+ }
+
+ public void unbindXaWork(XAWork xaWork) {
+ this.xaWork = null;
+ }
+
public void before(TransactionContext workContext) throws WorkCompletedException {
if (workContext.getXid() != null) {
try {
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java Thu Jan 13 23:05:40 2011
@@ -124,7 +124,7 @@ public class WorkerContext implements Wo
*/
private final ExecutionContext executionContext;
- private final List<WorkContextHandler> workContextHandlers;
+ private final List<WorkContextHandler<? extends WorkContext>> workContextHandlers;
/**
@@ -133,9 +133,9 @@ public class WorkerContext implements Wo
* @param work Work to be wrapped.
* @param workContextHandlers WorkContextHandlers supported by this work manager
*/
- public WorkerContext(Work work, Collection<WorkContextHandler> workContextHandlers) {
+ public WorkerContext(Work work, Collection<WorkContextHandler<? extends WorkContext>> workContextHandlers) {
adaptee = work;
- this.workContextHandlers = new ArrayList<WorkContextHandler>(workContextHandlers);
+ this.workContextHandlers = new ArrayList<WorkContextHandler<? extends WorkContext>>(workContextHandlers);
executionContext = null;
workListener = NULL_WORK_LISTENER;
}
@@ -156,7 +156,7 @@ public class WorkerContext implements Wo
public WorkerContext(Work aWork,
long aStartTimeout,
ExecutionContext execContext,
- WorkListener workListener, Collection<WorkContextHandler> workContextHandlers) throws WorkRejectedException {
+ WorkListener workListener, Collection<WorkContextHandler<? extends WorkContext>> workContextHandlers) throws WorkRejectedException {
adaptee = aWork;
startTimeOut = aStartTimeout;
if (null == workListener) {
@@ -172,7 +172,7 @@ public class WorkerContext implements Wo
} else {
executionContext = execContext;
}
- this.workContextHandlers = new ArrayList<WorkContextHandler>(workContextHandlers);
+ this.workContextHandlers = new ArrayList<WorkContextHandler<? extends WorkContext>>(workContextHandlers);
}
/* (non-Javadoc)
@@ -323,7 +323,7 @@ public class WorkerContext implements Wo
List<WorkContextHandler> sortedHandlers = new ArrayList<WorkContextHandler>(workContexts.size());
for (WorkContext workContext : workContexts) {
boolean found = false;
- for (Iterator<WorkContextHandler> it = workContextHandlers.iterator(); it.hasNext();) {
+ for (Iterator<WorkContextHandler<? extends WorkContext>> it = workContextHandlers.iterator(); it.hasNext();) {
WorkContextHandler workContextHandler = it.next();
log.info("sorting WorkContextHandler: " + workContextHandler + " for work context: " + workContext);
if (workContextHandler.supports(workContext.getClass())) {
@@ -343,7 +343,7 @@ public class WorkerContext implements Wo
throw new WorkCompletedException("Unhandled WorkContext: " + workContext, WorkContextErrorCodes.UNSUPPORTED_CONTEXT_TYPE);
}
}
- for (Iterator<WorkContextHandler> it = workContextHandlers.iterator(); it.hasNext();) {
+ for (Iterator<WorkContextHandler<? extends WorkContext>> it = workContextHandlers.iterator(); it.hasNext();) {
WorkContextHandler workContextHandler = it.next();
if (!workContextHandler.required()) {
log.info("Removing non-required WorkContextHandler with no context: " + workContextHandler);
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java Thu Jan 13 23:05:40 2011
@@ -33,6 +33,6 @@ public class ScheduleWorkExecutor implem
public void doExecute(WorkerContext work, Executor executor)
throws WorkException, InterruptedException {
- executor.execute(new NamedRunnable("A J2EE Connector", work));
+ executor.execute(work);
}
}
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java Thu Jan 13 23:05:40 2011
@@ -35,7 +35,7 @@ public class StartWorkExecutor implement
public void doExecute(WorkerContext work, Executor executor)
throws WorkException, InterruptedException {
CountDownLatch latch = work.provideStartLatch();
- executor.execute(new NamedRunnable("A J2EE Connector", work));
+ executor.execute(work);
latch.await();
}
}
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java Thu Jan 13 23:05:40 2011
@@ -35,7 +35,7 @@ public class SyncWorkExecutor implements
public void doExecute(WorkerContext work, Executor executor)
throws WorkException, InterruptedException {
CountDownLatch latch = work.provideEndLatch();
- executor.execute(new NamedRunnable("A J2EE Connector", work));
+ executor.execute(work);
latch.await();
}
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java Thu Jan 13 23:05:40 2011
@@ -27,6 +27,7 @@ import java.util.concurrent.ThreadPoolEx
import java.util.concurrent.TimeUnit;
import javax.resource.spi.XATerminator;
+import javax.resource.spi.work.WorkContext;
import javax.resource.spi.work.WorkManager;
import junit.framework.TestCase;
@@ -98,7 +99,7 @@ public class BootstrapContextTest extend
public void testGetSetWorkManager() throws Exception {
GeronimoTransactionManager transactionManager = new GeronimoTransactionManager();
TransactionContextHandler txWorkContextHandler = new TransactionContextHandler(transactionManager);
- GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler>singletonList(txWorkContextHandler));
+ GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler<? extends WorkContext>>singletonList(txWorkContextHandler));
GeronimoBootstrapContext context = new GeronimoBootstrapContext(manager, transactionManager, transactionManager);
WorkManager wm = context.getWorkManager();
@@ -111,7 +112,7 @@ public class BootstrapContextTest extend
public void testGetSetXATerminator() throws Exception {
GeronimoTransactionManager transactionManager = new GeronimoTransactionManager();
TransactionContextHandler txWorkContextHandler = new TransactionContextHandler(transactionManager);
- GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler>singletonList(txWorkContextHandler));
+ GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler<? extends WorkContext>>singletonList(txWorkContextHandler));
GeronimoBootstrapContext context = new GeronimoBootstrapContext(manager, transactionManager, transactionManager);
XATerminator xat = context.getXATerminator();
Modified: geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java?rev=1058785&r1=1058784&r2=1058785&view=diff
==============================================================================
--- geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java (original)
+++ geronimo/sandbox/djencks/txmanager/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java Thu Jan 13 23:05:40 2011
@@ -28,6 +28,7 @@ import java.util.Collections;
import javax.resource.spi.work.ExecutionContext;
import javax.resource.spi.work.Work;
+import javax.resource.spi.work.WorkContext;
import javax.resource.spi.work.WorkEvent;
import javax.resource.spi.work.WorkException;
import javax.resource.spi.work.WorkListener;
@@ -65,8 +66,7 @@ public class PooledWorkManagerTest exten
pool.setThreadFactory(new ThreadPoolThreadFactory("Connector Test", getClass().getClassLoader()));
- workManager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler>singletonList(txWorkContextHandler));
- workManager.doStart();
+ workManager = new GeronimoWorkManager(pool, pool, pool, Collections.<WorkContextHandler<? extends WorkContext>>singletonList(txWorkContextHandler));
}
private static class WaitWhenBlockedPolicy
@@ -161,8 +161,6 @@ public class PooledWorkManagerTest exten
public void testLifecycle() throws Exception {
testDoWork();
- workManager.doStop();
- workManager.doStart();
testDoWork();
}