You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by cs...@apache.org on 2016/01/15 14:42:37 UTC

[1/3] cxf git commit: [CXF-6742] Run jms destination with InitialContext

Repository: cxf
Updated Branches:
  refs/heads/master 0dfaf8d72 -> e1c60863a


[CXF-6742] Run jms destination with InitialContext


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e1c60863
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e1c60863
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e1c60863

Branch: refs/heads/master
Commit: e1c60863ac10b56d423613c7d3d2f45c7ce18e14
Parents: 68f110e
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jan 15 14:41:02 2016 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jan 15 14:41:20 2016 +0100

----------------------------------------------------------------------
 .../cxf/transport/jms/JMSDestination.java       |  1 +
 .../util/AbstractMessageListenerContainer.java  | 29 ++++++++++++++++++++
 .../cxf/transport/jms/util/JndiHelper.java      | 20 +-------------
 .../util/PollingMessageListenerContainer.java   | 24 ++++++----------
 .../cxf/transport/jms/AbstractJMSTester.java    |  2 +-
 .../cxf/transport/jms/JMSDestinationTest.java   |  1 +
 6 files changed, 41 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
index 113a7d2..2b5d8cd 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
@@ -144,6 +144,7 @@ public class JMSDestination extends AbstractMultiplexDestination implements Mess
             if (executor instanceof Executor) {
                 container.setExecutor((Executor) executor);
             }
+            container.setJndiEnvironment(jmsConfig.getJndiEnvironment());
             container.start();
             suspendedContinuations.setListenerContainer(container);
             connection.start();

http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java
index 65d6c4c..8fd1cdc 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java
@@ -18,16 +18,20 @@
  */
 package org.apache.cxf.transport.jms.util;
 
+import java.util.Properties;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.MessageListener;
 import javax.jms.Session;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import javax.transaction.TransactionManager;
 
 import org.apache.cxf.common.logging.LogUtils;
@@ -45,6 +49,7 @@ public abstract class AbstractMessageListenerContainer implements JMSListenerCon
     protected String durableSubscriptionName;
     protected boolean pubSubNoLocal;
     protected TransactionManager transactionManager;
+    protected Properties jndiEnvironment;
 
     private Executor executor;
     private int concurrentConsumers = 1;
@@ -84,7 +89,31 @@ public abstract class AbstractMessageListenerContainer implements JMSListenerCon
     public void setExecutor(Executor executor) {
         this.executor = executor;
     }
+    
+    public void setJndiEnvironment(Properties jndiEnvironment) {
+        this.jndiEnvironment = jndiEnvironment;
+    }
 
+    /** 
+     * Creates a InitialContext if a JNDI environment has been provided. 
+     * This is usefull in e.g. weblogic, where interaction with JNDI JMS resources is secured.
+     * 
+     * Be careful not to cache the return value in a non thread local scope.
+     * 
+     * @return an initial context, with the endpoint's JNDI properties, 
+     * or null if none is provided or if an errur occurs
+     **/
+    public InitialContext createInitialContext() {
+        if (jndiEnvironment != null) {
+            try {
+                return new InitialContext(this.jndiEnvironment);
+            } catch (NamingException e) {
+                LOG.log(Level.SEVERE, "Could not expose JNDI environment to JMS thread context", e);
+            }
+        }
+        return null;
+    }
+    
     @Override
     public void stop() {
         // In case of using external executor, don't shutdown it

http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java
index 7cc0e42..5035e0d 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java
@@ -18,8 +18,6 @@
  */
 package org.apache.cxf.transport.jms.util;
 
-import java.util.Enumeration;
-import java.util.Hashtable;
 import java.util.Properties;
 
 import javax.naming.Context;
@@ -38,25 +36,9 @@ public class JndiHelper {
         this.environment = environment;
     }
 
-    @SuppressWarnings("rawtypes")
-    protected Context createInitialContext() throws NamingException {
-        //CHECKSTYLE:OFF
-        Hashtable<Object, Object> icEnv = new Hashtable<Object, Object>(environment.size());
-        //CHECKSTYLE:ON
-        for (Enumeration en = environment.propertyNames(); en.hasMoreElements();) {
-            String key = (String)en.nextElement();
-            Object value = environment.getProperty(key);
-            if (value == null) {
-                value = environment.get(key);
-            }
-            icEnv.put(key, value);
-        }
-        return new InitialContext(icEnv);
-    }
-
     @SuppressWarnings("unchecked")
     public <T> T lookup(final String name, Class<T> requiredType) throws NamingException {
-        Context ctx = createInitialContext();
+        Context ctx = new InitialContext(this.environment);
         try {
             Object located = ctx.lookup(name);
             if (located == null) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/PollingMessageListenerContainer.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/PollingMessageListenerContainer.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/PollingMessageListenerContainer.java
index 0acd40f..9f8fcb2 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/PollingMessageListenerContainer.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/PollingMessageListenerContainer.java
@@ -49,12 +49,11 @@ public class PollingMessageListenerContainer extends AbstractMessageListenerCont
         @Override
         public void run() {
             while (running) {
-                MessageConsumer consumer = null;
-                Session session = null;
-                try {
+                try (ResourceCloser closer = new ResourceCloser()) {
+                    closer.register(createInitialContext());
                     // Create session early to optimize performance
-                    session = connection.createSession(transacted, acknowledgeMode);
-                    consumer = createConsumer(session);
+                    Session session = closer.register(connection.createSession(transacted, acknowledgeMode));
+                    MessageConsumer consumer = closer.register(createConsumer(session));
                     while (running) {
                         Message message = consumer.receive(1000);
                         try {
@@ -71,9 +70,6 @@ public class PollingMessageListenerContainer extends AbstractMessageListenerCont
                     }
                 } catch (Exception e) {
                     LOG.log(Level.WARNING, "Unexpected exception. Restarting session and consumer", e);
-                } finally {
-                    ResourceCloser.close(consumer);
-                    ResourceCloser.close(session);
                 }
             }
 
@@ -96,9 +92,8 @@ public class PollingMessageListenerContainer extends AbstractMessageListenerCont
         @Override
         public void run() {
             while (running) {
-                MessageConsumer consumer = null;
-                Session session = null;
-                try {
+                try (ResourceCloser closer = new ResourceCloser()) {
+                    closer.register(createInitialContext());
                     final Transaction externalTransaction = transactionManager.getTransaction();
                     if ((externalTransaction != null) && (externalTransaction.getStatus() == Status.STATUS_ACTIVE)) {
                         LOG.log(Level.SEVERE, "External transactions are not supported in XAPoller");
@@ -109,8 +104,8 @@ public class PollingMessageListenerContainer extends AbstractMessageListenerCont
                      * Create session inside transaction to give it the 
                      * chance to enlist itself as a resource
                      */
-                    session = connection.createSession(transacted, acknowledgeMode);
-                    consumer = createConsumer(session);
+                    Session session = closer.register(connection.createSession(transacted, acknowledgeMode));
+                    MessageConsumer consumer = closer.register(createConsumer(session));
                     Message message = consumer.receive(1000);
                     try {
                         if (message != null) {
@@ -120,9 +115,6 @@ public class PollingMessageListenerContainer extends AbstractMessageListenerCont
                     } catch (Throwable e) {
                         LOG.log(Level.WARNING, "Exception while processing jms message in cxf. Rolling back", e);
                         safeRollBack(session);
-                    } finally {
-                        ResourceCloser.close(consumer);
-                        ResourceCloser.close(session);
                     }
                 } catch (Exception e) {
                     LOG.log(Level.WARNING, "Unexpected exception. Restarting session and consumer", e);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java
index 7abbfe2..b34f53d 100644
--- a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java
+++ b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java
@@ -221,7 +221,7 @@ public abstract class AbstractJMSTester extends Assert {
 
     protected void waitForReceiveDestMessage() {
         int waitTime = 0;
-        while (destMessage == null && waitTime < MAX_RECEIVE_TIME) {
+        while (destMessage == null && waitTime < MAX_RECEIVE_TIME * 10) {
             try {
                 Thread.sleep(100);
             } catch (InterruptedException e) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e1c60863/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
index db7e241..690c721 100644
--- a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
+++ b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
@@ -241,6 +241,7 @@ public class JMSDestinationTest extends AbstractJMSTester {
         waitForReceiveInMessage();
         verifyReceivedMessage(inMessage);
 
+        // wait for a while for the jms session recycling
         Thread.sleep(1000);
         conduit.close();
         destination.shutdown();


[3/3] cxf git commit: Fix logger class

Posted by cs...@apache.org.
Fix logger class


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6491b781
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6491b781
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6491b781

Branch: refs/heads/master
Commit: 6491b7815eb028477983c48a64f626addf587bad
Parents: 0dfaf8d
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jan 15 10:49:18 2016 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jan 15 14:41:20 2016 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/cxf/transport/jms/BackChannelConduit.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/6491b781/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/BackChannelConduit.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/BackChannelConduit.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/BackChannelConduit.java
index 7e41586..cb67460 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/BackChannelConduit.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/BackChannelConduit.java
@@ -53,7 +53,7 @@ import static org.apache.cxf.transport.jms.JMSConstants.JMS_SERVER_RESPONSE_HEAD
  * Conduit for sending the reply back to the client
  */
 class BackChannelConduit extends AbstractConduit implements JMSExchangeSender {
-    private static final Logger LOG = LogUtils.getL7dLogger(JMSDestination.class);
+    private static final Logger LOG = LogUtils.getL7dLogger(BackChannelConduit.class);
     private JMSConfiguration jmsConfig;
     private Message inMessage;
     private Connection connection;


[2/3] cxf git commit: Move getConnectionFactoryFromJndi and make it private

Posted by cs...@apache.org.
Move getConnectionFactoryFromJndi and make it private


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/68f110e5
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/68f110e5
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/68f110e5

Branch: refs/heads/master
Commit: 68f110e5bcfe26d050bd05988ecd9c863e6e8742
Parents: 6491b78
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jan 15 12:49:24 2016 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jan 15 14:41:20 2016 +0100

----------------------------------------------------------------------
 .../cxf/transport/jms/JMSConfiguration.java     | 25 +++++++++++++++++++-
 .../apache/cxf/transport/jms/JMSFactory.java    | 22 -----------------
 2 files changed, 24 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/68f110e5/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
index 5dc0e31..4ab0c89 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
@@ -25,11 +25,13 @@ import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
+import javax.naming.NamingException;
 import javax.transaction.TransactionManager;
 
 import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.transport.jms.util.DestinationResolver;
 import org.apache.cxf.transport.jms.util.JMSDestinationResolver;
+import org.apache.cxf.transport.jms.util.JndiHelper;
 
 @NoJSR250Annotations
 public class JMSConfiguration {
@@ -364,7 +366,7 @@ public class JMSConfiguration {
             synchronized (this) {
                 factory = connectionFactory;
                 if (factory == null) {
-                    factory = JMSFactory.getConnectionFactoryFromJndi(this);
+                    factory = getConnectionFactoryFromJndi();
                     connectionFactory = factory;
                 }
             }
@@ -372,6 +374,27 @@ public class JMSConfiguration {
         return factory;
     }
     
+    /**
+     * Retrieve connection factory from JNDI
+     * 
+     * @param jmsConfig
+     * @param jndiConfig
+     * @return
+     */
+    private ConnectionFactory getConnectionFactoryFromJndi() {
+        if (getJndiEnvironment() == null || getConnectionFactoryName() == null) {
+            return null;
+        }
+        try {
+            ConnectionFactory cf = new JndiHelper(getJndiEnvironment()).
+                lookup(getConnectionFactoryName(), ConnectionFactory.class);
+            return cf;
+        } catch (NamingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    
     public String getDurableSubscriptionClientId() {
         return durableSubscriptionClientId;
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/68f110e5/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
----------------------------------------------------------------------
diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
index 5d617c8..8fc3796 100644
--- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
+++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
@@ -24,11 +24,9 @@ import java.util.concurrent.Executors;
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.JMSException;
-import javax.naming.NamingException;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.transport.jms.util.JMSSender;
-import org.apache.cxf.transport.jms.util.JndiHelper;
 import org.apache.cxf.workqueue.AutomaticWorkQueue;
 import org.apache.cxf.workqueue.WorkQueue;
 import org.apache.cxf.workqueue.WorkQueueManager;
@@ -49,26 +47,6 @@ public final class JMSFactory {
     }
 
     /**
-     * Retrieve connection factory from JNDI
-     * 
-     * @param jmsConfig
-     * @param jndiConfig
-     * @return
-     */
-    static ConnectionFactory getConnectionFactoryFromJndi(JMSConfiguration jmsConfig) {
-        if (jmsConfig.getJndiEnvironment() == null || jmsConfig.getConnectionFactoryName() == null) {
-            return null;
-        }
-        try {
-            ConnectionFactory cf = new JndiHelper(jmsConfig.getJndiEnvironment()).
-                lookup(jmsConfig.getConnectionFactoryName(), ConnectionFactory.class);
-            return cf;
-        } catch (NamingException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    
-    /**
      * Create JmsSender from configuration information. Most settings are taken from jmsConfig. The QoS
      * settings in messageProperties override the settings from jmsConfig
      *