Author: veithen
Date: Wed Aug 13 07:58:35 2008
New Revision: 685578
URL: http://svn.apache.org/viewvc?rev=685578&view=rev
Log:
JMS transport: improved logging in cases where a JNDI lookup doesn't return an
object of the expected class.
Modified:
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSConnectionFactory.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSOutTransportInfo.java
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSUtils.java
Modified:
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSConnectionFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSConnectionFactory.java?rev=685578&r1=685577&r2=685578&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSConnectionFactory.java
(original)
+++
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSConnectionFactory.java
Wed Aug 13 07:58:35 2008
@@ -213,7 +213,7 @@
// get the CF reference freshly [again] from JNDI
context = new InitialContext(jndiProperties);
- conFactory = (ConnectionFactory) context.lookup(connFactoryJNDIName);
+ conFactory = JMSUtils.lookup(context, ConnectionFactory.class,
connFactoryJNDIName);
log.info("Connected to the JMS connection factory : " +
connFactoryJNDIName);
try {
@@ -311,7 +311,7 @@
Destination destination = null;
try {
- destination = (Destination)
context.lookup(destinationJNDIname);
+ destination = JMSUtils.lookup(context, Destination.class,
destinationJNDIname);
} catch (NameNotFoundException e) {
log.warn("Cannot find destination : " + destinationJNDIname +
". Creating a Queue");
@@ -406,18 +406,18 @@
Destination destination = null;
try {
- destination = (Destination) context.lookup(destinationJndi);
+ destination = JMSUtils.lookup(context, Destination.class,
destinationJndi);
} catch (NamingException e) {
// if we are using ActiveMQ, check for dynamic Queues and Topics
String provider =
jndiProperties.get(Context.INITIAL_CONTEXT_FACTORY);
if (provider.indexOf("activemq") != -1) {
try {
- destination = (Destination) context.lookup(
+ destination = JMSUtils.lookup(context, Destination.class,
JMSConstants.ACTIVEMQ_DYNAMIC_QUEUE + destinationJndi);
} catch (NamingException ne) {
try {
- destination = (Destination) context.lookup(
+ destination = JMSUtils.lookup(context,
Destination.class,
JMSConstants.ACTIVEMQ_DYNAMIC_TOPIC +
destinationJndi);
} catch (NamingException e1) {
log.warn("Error looking up destination for JNDI name :
" + destinationJndi);
@@ -540,7 +540,7 @@
public Destination getDestination(String destinationJNDIName) {
try {
- return (Destination) context.lookup(destinationJNDIName);
+ return JMSUtils.lookup(context, Destination.class,
destinationJNDIName);
} catch (NamingException ignore) {}
return null;
}
Modified:
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSOutTransportInfo.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSOutTransportInfo.java?rev=685578&r1=685577&r2=685578&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSOutTransportInfo.java
(original)
+++
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSOutTransportInfo.java
Wed Aug 13 07:58:35 2008
@@ -141,7 +141,7 @@
String conFacJndiName =
props.get(JMSConstants.CONFAC_JNDI_NAME_PARAM);
if (conFacJndiName != null) {
- return (ConnectionFactory) context.lookup(conFacJndiName);
+ return JMSUtils.lookup(context, ConnectionFactory.class,
conFacJndiName);
} else {
handleException("Connection Factory JNDI name cannot be
determined");
}
@@ -161,7 +161,7 @@
private Destination getDestination(Context context, String url) {
String destinationName = JMSUtils.getDestination(url);
try {
- return (Destination) context.lookup(destinationName);
+ return JMSUtils.lookup(context, Destination.class,
destinationName);
} catch (NameNotFoundException e) {
if (log.isDebugEnabled()) {
log.debug("Cannot locate destination : " + destinationName + "
using " + url);
@@ -185,7 +185,7 @@
return null;
}
try {
- return (Destination) context.lookup(replyDestinationName);
+ return JMSUtils.lookup(context, Destination.class,
replyDestinationName);
} catch (NameNotFoundException e) {
if (log.isDebugEnabled()) {
log.debug("Cannot locate destination : " +
replyDestinationName + " using " + url);
@@ -203,7 +203,8 @@
*/
public Destination getReplyDestination(String replyDest) {
try {
- return (Destination)
jmsConnectionFactory.getContext().lookup(replyDest);
+ return JMSUtils.lookup(jmsConnectionFactory.getContext(),
Destination.class,
+ replyDest);
} catch (NameNotFoundException e) {
if (log.isDebugEnabled()) {
log.debug("Cannot locate reply destination : " + replyDest, e);
Modified:
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSUtils.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSUtils.java?rev=685578&r1=685577&r2=685578&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSUtils.java
(original)
+++
synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/jms/JMSUtils.java
Wed Aug 13 07:58:35 2008
@@ -30,6 +30,9 @@
import javax.jms.*;
import javax.jms.Queue;
import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
@@ -827,4 +830,27 @@
} catch (JMSException ignore) {}
return length;
}
+
+ public static <T> T lookup(Context context, Class<T> clazz, String name)
+ throws NamingException {
+
+ Object object = context.lookup(name);
+ try {
+ return clazz.cast(object);
+ } catch (ClassCastException ex) {
+ // Instead of a ClassCastException, throw an exception with some
+ // more information.
+ if (object instanceof Reference) {
+ Reference ref = (Reference)object;
+ handleException("JNDI failed to de-reference Reference with
name " +
+ name + "; is the factory " + ref.getFactoryClassName()
+
+ " in your classpath?");
+ return null;
+ } else {
+ handleException("JNDI lookup of name " + name + " returned a "
+
+ object.getClass().getName() + " while a " + clazz + "
was expected");
+ return null;
+ }
+ }
+ }
}