You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2016/12/22 10:14:45 UTC

svn commit: r1775607 - in /openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta: InterceptorBase.java JtaConfig.java JtaExtension.java

Author: rmannibucau
Date: Thu Dec 22 10:14:45 2016
New Revision: 1775607

URL: http://svn.apache.org/viewvc?rev=1775607&view=rev
Log:
small workaround to allow to use jta module without meecrowave but still benefit from it if there

Added:
    openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java
Modified:
    openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
    openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java

Modified: openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java?rev=1775607&r1=1775606&r2=1775607&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java Thu Dec 22 10:14:45 2016
@@ -16,9 +16,6 @@
  */
 package org.apache.meecrowave.jta;
 
-import org.apache.meecrowave.Meecrowave;
-import org.apache.meecrowave.runner.cli.CliOption;
-
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.CDI;
@@ -48,7 +45,7 @@ public abstract class InterceptorBase im
     private transient volatile ConcurrentMap<Method, Boolean> rollback = new ConcurrentHashMap<>();
 
     @Inject
-    private Meecrowave.Builder config;
+    private JtaConfig config;
 
     @Inject
     protected TransactionManager transactionManager;
@@ -77,7 +74,7 @@ public abstract class InterceptorBase im
             }
 
             Exception error = unwrap(e);
-            if (error != null && (!config.getExtension(Jta.class).isHandleExceptionOnlyForClient() || isNewTransaction(state))) {
+            if (error != null && (!config.isHandleExceptionOnlyForClient() || isNewTransaction(state))) {
                 final Method method = ic.getMethod();
                 if (rollback == null) {
                     synchronized (this) {
@@ -235,15 +232,6 @@ public abstract class InterceptorBase im
         }
     }
 
-    public static class Jta {
-        @CliOption(name = "jta-handle-exception-only-for-client", description = "should JTA exception only be managed by client")
-        private boolean handleExceptionOnlyForClient;
-
-        public boolean isHandleExceptionOnlyForClient() {
-            return handleExceptionOnlyForClient;
-        }
-    }
-
     protected static class State {
         protected final Transaction old;
         protected final Transaction current;

Added: openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java?rev=1775607&view=auto
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java (added)
+++ openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java Thu Dec 22 10:14:45 2016
@@ -0,0 +1,28 @@
+/*
+ * 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.meecrowave.jta;
+
+import org.apache.meecrowave.runner.cli.CliOption;
+
+public class JtaConfig {
+    @CliOption(name = "jta-handle-exception-only-for-client", description = "should JTA exception only be managed by client")
+    boolean handleExceptionOnlyForClient;
+
+    public boolean isHandleExceptionOnlyForClient() {
+        return handleExceptionOnlyForClient;
+    }
+}

Modified: openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java?rev=1775607&r1=1775606&r2=1775607&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java Thu Dec 22 10:14:45 2016
@@ -45,6 +45,7 @@ public class JtaExtension implements Ext
     private TransactionContext context;
     private boolean hasManager;
     private boolean hasRegistry;
+    private final JtaConfig config = new JtaConfig();
 
     void register(@Observes final BeforeBeanDiscovery beforeBeanDiscovery, final BeanManager beanManager) {
         Stream.of(
@@ -63,7 +64,7 @@ public class JtaExtension implements Ext
         }
     }
 
-    void addContext(@Observes final AfterBeanDiscovery afterBeanDiscovery) {
+    void addContextAndBeans(@Observes final AfterBeanDiscovery afterBeanDiscovery, final BeanManager bm) {
         context = new TransactionContext();
         afterBeanDiscovery.addContext(context);
 
@@ -77,11 +78,14 @@ public class JtaExtension implements Ext
             hasManager = true;
             hasRegistry = true;
         }
+
+        afterBeanDiscovery.addBean(new JtaConfigBean(config));
     }
 
     void init(@Observes final AfterDeploymentValidation afterDeploymentValidation, final BeanManager bm) {
         if (!hasRegistry && hasManager) {
             afterDeploymentValidation.addDeploymentProblem(new IllegalStateException("You should produce a TransactionManager and TransactionSynchronizationRegistry"));
+            return;
         }
         final TransactionManager manager = TransactionManager.class.cast(
                 bm.getReference(bm.resolve(bm.getBeans(TransactionManager.class)), TransactionManager.class, bm.createCreationalContext(null)));
@@ -90,6 +94,15 @@ public class JtaExtension implements Ext
                 TransactionSynchronizationRegistry.class.cast(bm.getReference(bm.resolve(bm.getBeans(TransactionSynchronizationRegistry.class)),
                         TransactionSynchronizationRegistry.class, bm.createCreationalContext(null)));
         context.init(manager, registry);
+
+        try {
+            final Class<?> builder = Thread.currentThread().getContextClassLoader().loadClass("org.apache.meecrowave.Meecrowave$Builder");
+            final JtaConfig ext = JtaConfig.class.cast(builder.getMethod("getExtension", Class.class).invoke(
+                    bm.getReference(bm.resolve(bm.getBeans(builder)), builder, bm.createCreationalContext(null)), JtaConfig.class));
+            config.handleExceptionOnlyForClient = ext.handleExceptionOnlyForClient;
+        } catch (final Exception e) {
+            config.handleExceptionOnlyForClient = Boolean.getBoolean("meecrowave.jta.handleExceptionOnlyForClient");
+        }
     }
 
     private static class JtaBean implements Bean<TransactionManager> {
@@ -126,6 +139,71 @@ public class JtaExtension implements Ext
             // no-op
         }
 
+        @Override
+        public Set<Type> getTypes() {
+            return types;
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            return qualifiers;
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return ApplicationScoped.class;
+        }
+
+        @Override
+        public String getName() {
+            return null;
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return false;
+        }
+    }
+
+    private static class JtaConfigBean implements Bean<JtaConfig> {
+        private final JtaConfig config;
+        private final Set<Type> types = new HashSet<>(asList(JtaConfig.class, Object.class));
+        private final Set<Annotation> qualifiers = new HashSet<>(asList(DefaultLiteral.INSTANCE, AnyLiteral.INSTANCE));
+
+        private JtaConfigBean(final JtaConfig value) {
+            this.config = value;
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Class<?> getBeanClass() {
+            return JtaConfig.class;
+        }
+
+        @Override
+        public boolean isNullable() {
+            return false;
+        }
+
+        @Override
+        public JtaConfig create(final CreationalContext<JtaConfig> context) {
+            return config;
+        }
+
+        @Override
+        public void destroy(final JtaConfig instance, final CreationalContext<JtaConfig> context) {
+            // no-op
+        }
+
         @Override
         public Set<Type> getTypes() {
             return types;