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;
+            }
+        }
+    }
 }


Reply via email to