[jboss-svn-commits] JBL Code SVN: r37774 - in labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss: narayana and 19 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Dec 5 06:53:20 EST 2011
Author: paul.robinson
Date: 2011-12-05 06:53:19 -0500 (Mon, 05 Dec 2011)
New Revision: 37774
Added:
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Commit.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Error.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PostCommit.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PrePrepare.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Prepare.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Rollback.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Unknown.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Cancel.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Close.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Compensate.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Complete.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Completes.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/ConfirmCompleted.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Error.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Status.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Unknown.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/DataManagement.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/TxManagement.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/ServiceRequest.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSAT.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSBA.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/Default.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/RequestType.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/transaction/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/transaction/CompletionType.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/ATLifecycleEvent.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/BALifecycleEvent.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/exception/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/exception/TXFrameworkException.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/ATTxControl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/BATxControl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/DataControl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/TxControl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/WSBATxControl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/DataControlImpl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/Participant.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/ServiceRequestInterceptor.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/TXControlException.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/HandlerFactory.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ParticipantRegistrationException.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ProtocolHandler.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/UnsupportedProtocolException.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/ATTxControlImpl.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATDurable2PCParticipant.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATHandler.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATVolatile2PCParticipant.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionHandler.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionParticipant.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAHandler.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionHandler.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionParticipant.java
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBATxControlImpl.java
Removed:
labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/jbossts/
Log:
renamed package structure to org.jboss.narayana
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Commit.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Commit.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Commit.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Commit
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Error.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Error.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Error.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Error
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PostCommit.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PostCommit.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PostCommit.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface PostCommit
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PrePrepare.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PrePrepare.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/PrePrepare.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface PrePrepare
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Prepare.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Prepare.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Prepare.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Prepare
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Rollback.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Rollback.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Rollback.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Rollback
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Unknown.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Unknown.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsat/Unknown.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,17 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsat;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+ at Deprecated
+public @interface Unknown
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Cancel.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Cancel.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Cancel.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Cancel
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Close.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Close.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Close.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,17 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ //todo: update docs on this and the other similarly cloned annotations
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Close
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Compensate.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Compensate.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Compensate.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Compensate
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Complete.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Complete.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Complete.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Complete
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Completes.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Completes.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Completes.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Completes
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/ConfirmCompleted.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/ConfirmCompleted.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/ConfirmCompleted.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface ConfirmCompleted
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Error.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Error.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Error.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Error
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Status.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Status.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Status.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Status
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Unknown.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Unknown.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/lifecycle/wsba/Unknown.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,17 @@
+package org.jboss.narayana.txframework.api.annotation.lifecycle.wsba;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/*
+ Method level annotation stating that this @ServiceInvocation method should Complete a ParticipantCompletion WS-BA
+ Transaction on successful completion.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+ at Deprecated
+public @interface Unknown
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/DataManagement.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/DataManagement.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/DataManagement.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.management;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Field level annotation used to enable injection of a data control into service participant
+ * and lifecycle management classes
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+public @interface DataManagement
+{
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/TxManagement.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/TxManagement.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/management/TxManagement.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.management;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Field level annotation used to enable injection of a transaction control into service participant
+ * and lifecycle management classes
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.FIELD)
+public @interface TxManagement
+{
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/ServiceRequest.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/ServiceRequest.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/ServiceRequest.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,33 @@
+package org.jboss.narayana.txframework.api.annotation.service;
+
+import org.jboss.narayana.txframework.api.configuration.service.Default;
+import org.jboss.narayana.txframework.api.configuration.service.RequestType;
+import javax.interceptor.InterceptorBinding;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Method level annotation used to enable lifecycle handling and configure parameters which control its operation
+ */
+
+ at InterceptorBinding
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.METHOD, ElementType.TYPE})
+public @interface ServiceRequest
+{
+ /**
+ * The class which is the target of lifecycle handler callbacks. With POJO execution mode this class is the
+ * direct target for handler method invocations. With EJB execution mode it identifies the EJB interface
+ * class. With WS execution mode it identifies the client interface for a JaxWS client.
+ */
+ public Class lifecycleClass() default Default.class;
+ /**
+ * identifies whether the service request is always read only as far as transactional modifications are
+ * concerned or, alternatively, that it may make changes to transactional data. in the latter case the
+ * service request method can indicate a read-only outcome by invoking the readOnly method of an injected
+ * control.
+ */
+ public RequestType requestType() default RequestType.MODIFY;
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSAT.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSAT.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSAT.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.api.annotation.transaction;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Class level annotation used to declare that a participant service will participate in lifecycle
+ * processing for WSAT atomic transactions.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface WSAT
+{
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSBA.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSBA.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSBA.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,22 @@
+package org.jboss.narayana.txframework.api.annotation.transaction;
+
+import org.jboss.narayana.txframework.api.configuration.transaction.CompletionType;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Class level annotation used to declare that a participant service will participate in lifecycle
+ * processing for WSBA business activity transactions.
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface WSBA
+{
+ /**
+ * the specific WSBA completion protocol which should be used for a WSBA service participant
+ * @return
+ */
+ public CompletionType completionType() default CompletionType.COORDINATOR;
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/Default.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/Default.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/Default.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,8 @@
+package org.jboss.narayana.txframework.api.configuration.service;
+
+/**
+ * Marker type used to provide default value for class fields in tx framework service annotations
+ */
+final public class Default
+{
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/RequestType.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/RequestType.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/service/RequestType.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,17 @@
+package org.jboss.narayana.txframework.api.configuration.service;
+
+/**
+ * specifies values taken by the requestType field in {@link org.jboss.narayana.txframework.api.annotation.service.ServiceRequest#requestType()}annotations
+ */
+public enum RequestType
+{
+ /**
+ * this value indicates that a service request method will never make changes to data.
+ */
+ READ_ONLY,
+ /**
+ * this value indicates that a service request method may make changes to data and will employ an
+ * injected control, where necessary, to notify read only status for a specific invocation.
+ */
+ MODIFY
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/transaction/CompletionType.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/transaction/CompletionType.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/transaction/CompletionType.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,10 @@
+package org.jboss.narayana.txframework.api.configuration.transaction;
+
+/**
+ *
+ */
+public enum CompletionType
+{
+ COORDINATOR,
+ PARTICIPANT
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/ATLifecycleEvent.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/ATLifecycleEvent.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/ATLifecycleEvent.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,33 @@
+package org.jboss.narayana.txframework.api.configuration.trigger;
+
+/**
+ * values identifying each of the possible atomic transaction lifecycle events for which lifecycle handlees
+ * can be registered
+ */
+public enum ATLifecycleEvent
+{
+ /**
+ * lifecycle event which happens just prior to the prepare operation while the transaction is still running
+ */
+ PRE_PREPARE,
+ /**
+ * lifecycle event which happens at prepare when the transaction is no longer running
+ */
+ PREPARE,
+ /**
+ * lifecycle event which happens if all service requests executed in the transaction have read only outcomes
+ */
+ READ_ONLY,
+ /**
+ * lifecycle event which happens if all the transaction is rolled back
+ */
+ ABORT,
+ /**
+ * lifecycle event which happens if the transaction commits
+ */
+ COMMIT,
+ /**
+ * lifecycle event which happens after commit or rollback
+ */
+ POST_COMMIT
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/BALifecycleEvent.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/BALifecycleEvent.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/configuration/trigger/BALifecycleEvent.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,54 @@
+package org.jboss.narayana.txframework.api.configuration.trigger;
+
+/**
+ */
+public enum BALifecycleEvent
+{
+ /**
+ * lifecycle event which happens if all service requests methods executed in the activity have read only
+ * outcomes or if a service request method indicates, via a control, that the activity should exit.
+ */
+ EXIT,
+ /**
+ * lifecycle event which happens if a service request indicates that the activity cannot completed
+ */
+ NOT_COMPLETE,
+ /**
+ * lifecycle event which happens when the activity is completed. for coordinator completion activities this
+ * occurs when a completed notification is received from the coordinator. for participant completion activities
+ * this happens when a service request method indicates, via a control, that the activity has completed or a
+ * service request annotated with an @Completes annotation finishes executing.
+ */
+ COMPLETE,
+ /**
+ * lifecycle event which happens when the middleware has made durable the completed.
+ */
+ CONFIRM_COMPLETE,
+ /**
+ * lifecycle event which happens when the activity is cancelled.
+ */
+ CANCEL,
+ /**
+ * lifecycle event which happens when the activity is closed.
+ */
+ CLOSE,
+ /**
+ * lifecycle event which happens when the activity is compensated.
+ */
+ COMPENSATE,
+ /**
+ * lifecycle event which happens when the activity fails.
+ */
+ FAIL,
+ /*
+ * lifecycle event which happens when an error in the protocol occurs.
+ */
+ Error,
+
+ //todo: document when this occurs, why deprecated and what to use instead
+ @Deprecated
+ UNKNOWN,
+
+ //todo: do we need this lifecycle event?
+ STATUS
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/exception/TXFrameworkException.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/exception/TXFrameworkException.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/exception/TXFrameworkException.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,14 @@
+package org.jboss.narayana.txframework.api.exception;
+
+public class TXFrameworkException extends Exception
+{
+ public TXFrameworkException(String message)
+ {
+ super(message);
+ }
+
+ public TXFrameworkException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/ATTxControl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/ATTxControl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/ATTxControl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,12 @@
+package org.jboss.narayana.txframework.api.management;
+
+import org.jboss.narayana.txframework.api.configuration.trigger.ATLifecycleEvent;
+
+/**
+ * Interface defining a transaction control object which can be injected into a framework web service or
+ * lifecycle method for one of the Atomic Transaction protocols.
+ */
+public interface ATTxControl extends TxControl
+{
+ public void readOnly(ATLifecycleEvent event);
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/BATxControl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/BATxControl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/BATxControl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,14 @@
+package org.jboss.narayana.txframework.api.management;
+
+import org.jboss.narayana.txframework.api.configuration.trigger.BALifecycleEvent;
+import org.jboss.narayana.txframework.impl.TXControlException;
+
+/**
+ * Interface defining a transaction control object which can be injected into a framework web service or
+ * lifecycle method for one of the Business Activity protocols.
+ */
+public interface BATxControl extends TxControl
+{
+ public void readOnly(BALifecycleEvent event) throws TXControlException;
+ public void completed() throws TXControlException;
+}
\ No newline at end of file
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/DataControl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/DataControl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/DataControl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,12 @@
+package org.jboss.narayana.txframework.api.management;
+
+/**
+ * Interface defining a data control object which can be injected into a framework web service or
+ * lifecycle method. Instances of this type and its subtypes can be uses to type fields which are
+ * the target of a DataManagement attribute.
+ */
+public interface DataControl
+{
+ public void put(Object objectId, Object object);
+ public Object get(Object objectId);
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/TxControl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/TxControl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/TxControl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,24 @@
+package org.jboss.narayana.txframework.api.management;
+
+import org.jboss.narayana.txframework.impl.TXControlException;
+
+/**
+ * Interface defining at the most generic level a transaction control object which can be injected into a
+ * framework web service or lifecycle method. Instances of this type and its subtypes can be uses
+ * to type fields which are the target of a TxManagement attribute. A TxControl provides a set of
+ * operations which the web service or lifecycle method can use to influence the logic of the
+ * transaction.
+ */
+public interface TxControl
+{
+ /**
+ * this method can be called from a web service method while a transaction is active to notify the
+ * framework that no changes have been made during execution of the service method.
+ */
+ public void readOnly() throws TXControlException;
+ /**
+ * this method can be called from a web service or lifecycle method to notify the framework that the
+ * transaction has failed and may have left the service in an inconsistent state
+ */
+ public void fail() throws TXControlException;
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/WSBATxControl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/WSBATxControl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/api/management/WSBATxControl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,13 @@
+package org.jboss.narayana.txframework.api.management;
+
+import org.jboss.narayana.txframework.impl.TXControlException;
+
+/**
+ * Interface defining a transaction control object which can be injected into a framework web service or
+ * lifecycle method for the Web Service Business Activity protocol.
+ */
+public interface WSBATxControl extends BATxControl
+{
+ public void exit() throws TXControlException;
+ public void cannotComplete() throws TXControlException;
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/DataControlImpl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/DataControlImpl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/DataControlImpl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,20 @@
+package org.jboss.narayana.txframework.impl;
+
+import org.jboss.narayana.txframework.api.management.DataControl;
+import java.util.HashMap;
+import java.util.Map;
+
+public class DataControlImpl implements DataControl
+{
+ private Map<Object, Object> map = new HashMap<Object, Object>();
+
+ public void put(Object objectId, Object object)
+ {
+ map.put(objectId, object);
+ }
+
+ public Object get(Object objectId)
+ {
+ return map.get(objectId);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/Participant.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/Participant.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/Participant.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,62 @@
+package org.jboss.narayana.txframework.impl;
+
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.ConfirmCompleted;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class Participant
+{
+ protected Object serviceImpl;
+ protected Map<Class<? extends Annotation>, Method> lifecycleEventMap = new HashMap<Class<? extends Annotation>, Method>();
+
+ public Participant(Object serviceImpl)
+ {
+ this.serviceImpl = serviceImpl;
+ }
+
+ protected void registerEventsOfInterest(Class<? extends Annotation>... lifecycleEvents)
+ {
+ for (Class<? extends Annotation> lifecycleEvent : lifecycleEvents)
+ {
+ for (Method method : serviceImpl.getClass().getMethods())
+ {
+ Annotation annotation = method.getAnnotation(lifecycleEvent);
+ if (annotation != null)
+ {
+ lifecycleEventMap.put(lifecycleEvent, method);
+ }
+ }
+ }
+
+ }
+
+ protected Object invoke(Class<? extends Annotation> lifecycleEvent, Object... args)
+ {
+ Method method = lifecycleEventMap.get(lifecycleEvent);
+ if (method == null)
+ {
+ //No handler registered
+ return null;
+ }
+
+ try
+ {
+ //todo: detect parameters better. Maybe have a different participant per interface.
+ if (lifecycleEvent == ConfirmCompleted.class)
+ {
+ return method.invoke(serviceImpl, args);
+ }
+ else
+ {
+ return method.invoke(serviceImpl);
+ }
+ }
+ catch (Exception e)
+ {
+ //todo: Log stacktrace to debug and throw a SystemException
+ throw new RuntimeException("Unable to invoke method '" + method.getName() + "' on '" + serviceImpl.getClass().getName() + "'", e);
+ }
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/ServiceRequestInterceptor.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/ServiceRequestInterceptor.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/ServiceRequestInterceptor.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,26 @@
+package org.jboss.narayana.txframework.impl;
+
+import org.jboss.narayana.txframework.api.annotation.service.ServiceRequest;
+import org.jboss.narayana.txframework.impl.handlers.HandlerFactory;
+import org.jboss.narayana.txframework.impl.handlers.ProtocolHandler;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import java.lang.reflect.Method;
+
+ at ServiceRequest
+ at Interceptor
+public class ServiceRequestInterceptor
+{
+ @AroundInvoke
+ public Object intercept(InvocationContext ic) throws Throwable
+ {
+ Method serviceMethod = ic.getMethod();
+ Object serviceImpl = ic.getTarget();
+
+ ProtocolHandler protocolHandler = HandlerFactory.createInstance(serviceImpl, serviceMethod);
+
+ return protocolHandler.proceed(ic);
+ }
+
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/TXControlException.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/TXControlException.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/TXControlException.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.impl;
+
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+
+public class TXControlException extends TXFrameworkException
+{
+ public TXControlException(String message)
+ {
+ super(message);
+ }
+
+ public TXControlException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/HandlerFactory.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/HandlerFactory.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/HandlerFactory.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,44 @@
+package org.jboss.narayana.txframework.impl.handlers;
+
+import org.jboss.narayana.txframework.api.annotation.transaction.WSAT;
+import org.jboss.narayana.txframework.api.annotation.transaction.WSBA;
+import org.jboss.narayana.txframework.api.configuration.transaction.CompletionType;
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+import org.jboss.narayana.txframework.impl.handlers.wsat.WSATHandler;
+import org.jboss.narayana.txframework.impl.handlers.wsba.WSBACoordinatorCompletionHandler;
+import org.jboss.narayana.txframework.impl.handlers.wsba.WSBAParticipantCompletionHandler;
+import java.lang.reflect.Method;
+
+public class HandlerFactory
+{
+ public static ProtocolHandler createInstance(Object serviceImpl, Method serviceMethod) throws TXFrameworkException
+ {
+ Class serviceClass = serviceImpl.getClass();
+
+ WSBA wsba = (WSBA) serviceClass.getAnnotation(WSBA.class);
+ if (wsba != null)
+ {
+ CompletionType completionType = wsba.completionType();
+ if (completionType == CompletionType.PARTICIPANT)
+ {
+ return new WSBAParticipantCompletionHandler(serviceImpl, serviceMethod);
+ }
+ else if (completionType == CompletionType.COORDINATOR)
+ {
+ return new WSBACoordinatorCompletionHandler(serviceImpl, serviceMethod);
+ }
+ else
+ {
+ throw new UnsupportedProtocolException("Unexpected or null completionType");
+ }
+ }
+
+ WSAT wsat = (WSAT) serviceClass.getAnnotation(WSAT.class);
+ if (wsat != null)
+ {
+ return new WSATHandler(serviceImpl, serviceMethod);
+ }
+
+ throw new UnsupportedProtocolException("Expected to find a transaction type annotation on '" + serviceClass.getName() + "'");
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ParticipantRegistrationException.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ParticipantRegistrationException.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ParticipantRegistrationException.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.impl.handlers;
+
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+
+public class ParticipantRegistrationException extends TXFrameworkException
+{
+ public ParticipantRegistrationException(String message)
+ {
+ super(message);
+ }
+
+ public ParticipantRegistrationException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ProtocolHandler.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ProtocolHandler.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/ProtocolHandler.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,8 @@
+package org.jboss.narayana.txframework.impl.handlers;
+
+import javax.interceptor.InvocationContext;
+
+public interface ProtocolHandler
+{
+ public Object proceed(InvocationContext ic) throws Exception;
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/UnsupportedProtocolException.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/UnsupportedProtocolException.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/UnsupportedProtocolException.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,16 @@
+package org.jboss.narayana.txframework.impl.handlers;
+
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+
+public class UnsupportedProtocolException extends TXFrameworkException
+{
+ public UnsupportedProtocolException(String message)
+ {
+ super(message);
+ }
+
+ public UnsupportedProtocolException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/ATTxControlImpl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/ATTxControlImpl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/ATTxControlImpl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,28 @@
+package org.jboss.narayana.txframework.impl.handlers.wsat;
+
+import org.jboss.narayana.txframework.api.configuration.trigger.ATLifecycleEvent;
+import org.jboss.narayana.txframework.api.management.ATTxControl;
+import org.jboss.narayana.txframework.impl.TXControlException;
+
+public class ATTxControlImpl implements ATTxControl
+{
+
+ public ATTxControlImpl()
+ {
+ }
+
+ public void readOnly(ATLifecycleEvent event)
+ {
+ //todo: implement
+ }
+
+ public void readOnly() throws TXControlException
+ {
+ //todo: implement
+ }
+
+ public void fail() throws TXControlException
+ {
+ //todo: implement
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATDurable2PCParticipant.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATDurable2PCParticipant.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATDurable2PCParticipant.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,49 @@
+package org.jboss.narayana.txframework.impl.handlers.wsat;
+
+import com.arjuna.wst.*;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.Error;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.*;
+
+public class WSATDurable2PCParticipant extends org.jboss.narayana.txframework.impl.Participant implements Durable2PCParticipant
+{
+ public WSATDurable2PCParticipant(Object serviceImpl)
+ {
+ super(serviceImpl);
+
+ registerEventsOfInterest(Rollback.class, Commit.class, Prepare.class, Error.class, Unknown.class);
+ }
+
+ public void commit() throws WrongStateException, SystemException
+ {
+ invoke(Commit.class);
+ }
+
+ public void rollback() throws WrongStateException, SystemException
+ {
+ invoke(Rollback.class);
+ }
+
+ public void error() throws SystemException
+ {
+ invoke(org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.Error.class);
+ }
+
+ public Vote prepare() throws WrongStateException, SystemException
+ {
+ //todo check type
+ Vote vote = (Vote) invoke(Prepare.class);
+ if (vote == null)
+ {
+ return new Prepared();
+ }
+ else
+ {
+ return vote;
+ }
+ }
+
+ public void unknown() throws SystemException
+ {
+ invoke(Unknown.class);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATHandler.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATHandler.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATHandler.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,93 @@
+package org.jboss.narayana.txframework.impl.handlers.wsat;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.mw.wst11.TransactionManager;
+import com.arjuna.mw.wst11.TransactionManagerFactory;
+import com.arjuna.wst.*;
+import org.jboss.narayana.txframework.api.annotation.management.TxManagement;
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+import org.jboss.narayana.txframework.api.management.ATTxControl;
+import org.jboss.narayana.txframework.impl.handlers.ParticipantRegistrationException;
+import org.jboss.narayana.txframework.impl.handlers.ProtocolHandler;
+import javax.interceptor.InvocationContext;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+public class WSATHandler implements ProtocolHandler
+{
+ private Object serviceImpl;
+ private ATTxControl atTxControl;
+
+ public WSATHandler(Object serviceImpl, Method serviceMethod) throws TXFrameworkException
+ {
+ this.serviceImpl = serviceImpl;
+
+ String idPrefix = serviceImpl.getClass().getName();
+ registerParticipants(idPrefix);
+
+ atTxControl = new ATTxControlImpl();
+ injectTxManagement(atTxControl);
+ }
+
+ //todo: Use CDI to do injection
+ private void injectTxManagement(ATTxControl atTxControl) throws TXFrameworkException
+ {
+ Field[] fields = serviceImpl.getClass().getFields();
+ for (Field field : serviceImpl.getClass().getFields())
+ {
+ if (field.getAnnotation(TxManagement.class) != null)
+ {
+ try
+ {
+ //todo: check field type
+ field.set(serviceImpl, atTxControl);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new TXFrameworkException("Unable to inject TxManagement impl to field '" + field.getName() + "' on '" + serviceImpl.getClass().getName() + "'", e);
+ }
+ }
+ }
+ //didn't find an injection point. No problem as this is optional
+ }
+
+ public Object proceed(InvocationContext ic) throws Exception
+ {
+ try
+ {
+ return ic.proceed();
+ }
+ //todo: Should this not be throwable?
+ catch (Exception e)
+ {
+ //todo: Something went wrong, so ensure TX rollback
+ throw e;
+ }
+ }
+
+ private void registerParticipants(String idPrefix) throws ParticipantRegistrationException
+ {
+ try
+ {
+ Volatile2PCParticipant volatileParticipant = new WSATVolatile2PCParticipant(serviceImpl);
+ Durable2PCParticipant durableParticipant = new WSATDurable2PCParticipant(serviceImpl);
+
+ TransactionManager transactionManager = TransactionManagerFactory.transactionManager();
+ transactionManager.enlistForVolatileTwoPhase(volatileParticipant, idPrefix + new Uid().toString());
+ transactionManager.enlistForDurableTwoPhase(durableParticipant, idPrefix + new Uid().toString());
+ }
+ catch (WrongStateException e)
+ {
+ throw new ParticipantRegistrationException("Transaction was not in a state in which participants can be registered", e);
+ }
+ catch (UnknownTransactionException e)
+ {
+ throw new ParticipantRegistrationException("Can't register a participant as the transaction in unknown", e);
+ }
+ catch (SystemException e)
+ {
+ throw new ParticipantRegistrationException("A SystemException occurred when attempting to register a participant", e);
+ }
+ }
+
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATVolatile2PCParticipant.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATVolatile2PCParticipant.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsat/WSATVolatile2PCParticipant.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,48 @@
+package org.jboss.narayana.txframework.impl.handlers.wsat;
+
+import com.arjuna.wst.*;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.Error;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.*;
+
+public class WSATVolatile2PCParticipant extends org.jboss.narayana.txframework.impl.Participant implements Volatile2PCParticipant
+{
+ public WSATVolatile2PCParticipant(Object serviceImpl)
+ {
+ super(serviceImpl);
+
+ registerEventsOfInterest(PrePrepare.class, PostCommit.class, Rollback.class, Error.class, Unknown.class);
+ }
+
+ public void commit() throws WrongStateException, SystemException
+ {
+ invoke(PostCommit.class);
+ }
+
+ public void rollback() throws WrongStateException, SystemException
+ {
+ invoke(Rollback.class);
+ }
+
+ public void error() throws SystemException
+ {
+ invoke(org.jboss.narayana.txframework.api.annotation.lifecycle.wsat.Error.class);
+ }
+
+ public Vote prepare() throws WrongStateException, SystemException
+ {
+ Vote vote = (Vote) invoke(PrePrepare.class);
+ if (vote == null)
+ {
+ return new Prepared();
+ }
+ else
+ {
+ return vote;
+ }
+ }
+
+ public void unknown() throws SystemException
+ {
+ invoke(Unknown.class);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionHandler.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionHandler.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionHandler.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,47 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.mw.wst11.BusinessActivityManager;
+import com.arjuna.mw.wst11.BusinessActivityManagerFactory;
+import com.arjuna.wst.SystemException;
+import com.arjuna.wst.UnknownTransactionException;
+import com.arjuna.wst.WrongStateException;
+import com.arjuna.wst11.BAParticipantManager;
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+import org.jboss.narayana.txframework.impl.handlers.ParticipantRegistrationException;
+import java.lang.reflect.Method;
+
+public class WSBACoordinatorCompletionHandler extends WSBAHandler
+{
+ private WSBACoordinatorCompletionParticipant participant;
+
+ public WSBACoordinatorCompletionHandler(Object serviceImpl, Method serviceMethod) throws TXFrameworkException
+ {
+ super(serviceImpl, serviceMethod);
+ }
+
+ @Override
+ protected BAParticipantManager registerParticipants(Object serviceImpl, Method serviceMethod) throws ParticipantRegistrationException
+ {
+ try
+ {
+ participant = new WSBACoordinatorCompletionParticipant(serviceImpl);
+
+ Class serviceClass = serviceImpl.getClass();
+ BusinessActivityManager businessActivityManager = BusinessActivityManagerFactory.businessActivityManager();
+ return businessActivityManager.enlistForBusinessAgreementWithCoordinatorCompletion(participant, serviceClass.getName() + new Uid().toString());
+ }
+ catch (WrongStateException e)
+ {
+ throw new ParticipantRegistrationException("Transaction was not in a state in which participants can be registered", e);
+ }
+ catch (UnknownTransactionException e)
+ {
+ throw new ParticipantRegistrationException("Can't register a participant as the transaction in unknown", e);
+ }
+ catch (SystemException e)
+ {
+ throw new ParticipantRegistrationException("A SystemException occurred when attempting to register a participant", e);
+ }
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionParticipant.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionParticipant.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBACoordinatorCompletionParticipant.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,20 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.wst.*;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.Complete;
+
+public class WSBACoordinatorCompletionParticipant extends WSBAParticipantCompletionParticipant implements
+ BusinessAgreementWithCoordinatorCompletionParticipant
+{
+ public WSBACoordinatorCompletionParticipant(Object serviceImpl)
+ {
+ super(serviceImpl);
+
+ registerEventsOfInterest(Complete.class);
+ }
+
+ public void complete() throws WrongStateException, SystemException
+ {
+ invoke(Complete.class);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAHandler.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAHandler.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAHandler.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,82 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.wst11.BAParticipantManager;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.Completes;
+import org.jboss.narayana.txframework.api.annotation.management.TxManagement;
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+import org.jboss.narayana.txframework.api.management.WSBATxControl;
+import org.jboss.narayana.txframework.impl.handlers.ProtocolHandler;
+import org.jboss.narayana.txframework.impl.handlers.ParticipantRegistrationException;
+import javax.interceptor.InvocationContext;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+public abstract class WSBAHandler implements ProtocolHandler
+{
+ private Method serviceMethod;
+ private Object serviceImpl;
+ private WSBATxControl wsbaTxControl;
+ private BAParticipantManager participantManager;
+
+ public WSBAHandler(Object serviceImpl, Method serviceMethod) throws TXFrameworkException
+ {
+ this.serviceImpl = serviceImpl;
+ this.serviceMethod = serviceMethod;
+ participantManager = registerParticipants(serviceImpl, serviceMethod);
+ wsbaTxControl = new WSBATxControlImpl(participantManager);
+
+ injectTxManagement(wsbaTxControl);
+ }
+
+ protected abstract BAParticipantManager registerParticipants(Object serviceImpl, Method serviceMethod) throws ParticipantRegistrationException;
+
+ //todo: Use CDI to do injection
+ private void injectTxManagement(WSBATxControl wsbaTxControl) throws TXFrameworkException
+ {
+ Field[] fields = serviceImpl.getClass().getFields();
+ for (Field field : serviceImpl.getClass().getFields())
+ {
+ if (field.getAnnotation(TxManagement.class) != null)
+ {
+ try
+ {
+ //todo: check field type
+ field.set(serviceImpl, wsbaTxControl);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new TXFrameworkException("Unable to inject TxManagement impl to field '" + field.getName() + "' on '" + serviceImpl.getClass().getName() + "'", e);
+ }
+ }
+ }
+ //didn't find an injection point. No problem as this is optional
+ }
+
+ public Object proceed(InvocationContext ic) throws Exception
+ {
+ try
+ {
+ Object result = ic.proceed();
+ //todo: find a better way of getting the current status of the TX
+ if (shouldComplete(serviceMethod) && !((WSBATxControlImpl) wsbaTxControl).isCannotComplete())
+ {
+ participantManager.completed();
+ }
+ return result;
+ }
+ //todo: Should this not be throwable?
+ catch (Exception e)
+ {
+ //Something went wrong, so notify cannot completed
+ participantManager.cannotComplete();
+ throw e;
+ }
+ }
+
+ private boolean shouldComplete(Method serviceMethod)
+ {
+ Completes completes = serviceMethod.getAnnotation(Completes.class);
+ return completes != null;
+ }
+
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionHandler.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionHandler.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionHandler.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,49 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.mw.wst11.BusinessActivityManager;
+import com.arjuna.mw.wst11.BusinessActivityManagerFactory;
+import com.arjuna.wst.SystemException;
+import com.arjuna.wst.UnknownTransactionException;
+import com.arjuna.wst.WrongStateException;
+import com.arjuna.wst11.BAParticipantManager;
+import org.jboss.narayana.txframework.api.exception.TXFrameworkException;
+import org.jboss.narayana.txframework.impl.handlers.ParticipantRegistrationException;
+import java.lang.reflect.Method;
+
+public class WSBAParticipantCompletionHandler extends WSBAHandler
+{
+ private WSBAParticipantCompletionParticipant participant;
+
+ public WSBAParticipantCompletionHandler(Object serviceImpl, Method serviceMethod) throws TXFrameworkException
+ {
+ super(serviceImpl, serviceMethod);
+ }
+
+ @Override
+ protected BAParticipantManager registerParticipants(Object serviceImpl, Method serviceMethod) throws ParticipantRegistrationException
+ {
+ try
+ {
+ Class serviceClass = serviceImpl.getClass();
+
+ participant = new WSBAParticipantCompletionParticipant(serviceImpl);
+
+ BusinessActivityManager businessActivityManager = BusinessActivityManagerFactory.businessActivityManager();
+ return businessActivityManager.enlistForBusinessAgreementWithParticipantCompletion(participant, serviceClass.getName() + new Uid().toString());
+ }
+ catch (WrongStateException e)
+ {
+ throw new ParticipantRegistrationException("Transaction was not in a state in which participants can be registered", e);
+ }
+ catch (UnknownTransactionException e)
+ {
+ throw new ParticipantRegistrationException("Can't register a participant as the transaction in unknown", e);
+ }
+ catch (SystemException e)
+ {
+ throw new ParticipantRegistrationException("A SystemException occurred when attempting to register a participant", e);
+
+ }
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionParticipant.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionParticipant.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBAParticipantCompletionParticipant.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,60 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.wst.BusinessAgreementWithParticipantCompletionParticipant;
+import com.arjuna.wst.FaultedException;
+import com.arjuna.wst.SystemException;
+import com.arjuna.wst.WrongStateException;
+import com.arjuna.wst11.ConfirmCompletedParticipant;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.Error;
+import org.jboss.narayana.txframework.impl.Participant;
+import org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.*;
+import java.io.Serializable;
+
+public class WSBAParticipantCompletionParticipant extends Participant implements BusinessAgreementWithParticipantCompletionParticipant,
+ ConfirmCompletedParticipant, Serializable
+{
+ public WSBAParticipantCompletionParticipant(Object serviceImpl)
+ {
+ super(serviceImpl);
+
+ registerEventsOfInterest(Cancel.class, Close.class, Compensate.class, ConfirmCompleted.class, Error.class, Status.class, Unknown.class);
+ }
+
+ public void error() throws SystemException
+ {
+ invoke(org.jboss.narayana.txframework.api.annotation.lifecycle.wsba.Error.class);
+ }
+
+ public void close() throws WrongStateException, SystemException
+ {
+ invoke(Close.class);
+ }
+
+ public void cancel() throws FaultedException, WrongStateException, SystemException
+ {
+ invoke(Cancel.class);
+ }
+
+ public void compensate() throws FaultedException, WrongStateException, SystemException
+ {
+ invoke(Compensate.class);
+ }
+
+ public String status() throws SystemException
+ {
+ //todo: return a default status
+ //todo: check impl returns a String
+ return (String) invoke(Status.class);
+ }
+
+ @Deprecated
+ public void unknown() throws SystemException
+ {
+ invoke(Unknown.class);
+ }
+
+ public void confirmCompleted(boolean completed)
+ {
+ invoke(ConfirmCompleted.class, completed);
+ }
+}
Added: labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBATxControlImpl.java
===================================================================
--- labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBATxControlImpl.java (rev 0)
+++ labs/jbosstm/trunk/txframework/framework/src/main/java/org/jboss/narayana/txframework/impl/handlers/wsba/WSBATxControlImpl.java 2011-12-05 11:53:19 UTC (rev 37774)
@@ -0,0 +1,98 @@
+package org.jboss.narayana.txframework.impl.handlers.wsba;
+
+import com.arjuna.wst11.BAParticipantManager;
+import org.jboss.narayana.txframework.api.configuration.trigger.BALifecycleEvent;
+import org.jboss.narayana.txframework.api.management.WSBATxControl;
+import org.jboss.narayana.txframework.impl.TXControlException;
+
+public class WSBATxControlImpl implements WSBATxControl
+{
+ BAParticipantManager baParticipantManager;
+ //todo: Need to hook into lifecycle or record it here.
+ private boolean cannotComplete = false;
+
+ public WSBATxControlImpl(BAParticipantManager baParticipantManager)
+ {
+ this.baParticipantManager = baParticipantManager;
+ }
+
+ public void exit() throws TXControlException
+ {
+ try
+ {
+ baParticipantManager.exit();
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'exit' on participant manager", e);
+ }
+ }
+
+ public void cannotComplete() throws TXControlException
+ {
+ try
+ {
+ baParticipantManager.cannotComplete();
+ cannotComplete = true;
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'cannotComplete' on participant manager", e);
+ }
+ }
+
+ public void readOnly(BALifecycleEvent event) throws TXControlException
+ {
+ //todo: what is the BALifecycleEvent for?
+ try
+ {
+ baParticipantManager.exit();
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'exit' on participant manager", e);
+ }
+ }
+
+ public void completed() throws TXControlException
+ {
+ try
+ {
+ baParticipantManager.completed();
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'completed' on participant manager", e);
+ }
+ }
+
+ public void readOnly() throws TXControlException
+ {
+ try
+ {
+ baParticipantManager.exit();
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'exit' on participant manager", e);
+ }
+ }
+
+ public void fail() throws TXControlException
+ {
+ try
+ {
+ //todo: Why does this take a QName?
+ baParticipantManager.fail(null);
+ }
+ catch (Exception e)
+ {
+ throw new TXControlException("Exception when calling 'fail' on participant manager", e);
+ }
+ }
+
+ public boolean isCannotComplete()
+ {
+ return cannotComplete;
+ }
+}
More information about the jboss-svn-commits
mailing list