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
*