whitlock    2002/06/21 06:17:07

  Modified:    java/test/org/apache/wsif/util/jms
                        NativeJMSRequestListener.java
               java/test/async AsyncTests.java
               java/src/org/apache/wsif/util/jms WSIFJMSFinderForJndi.java
  Log:
  Look JMS objects up in default JNDI as well as JNDI from the WSDL
  
  Revision  Changes    Path
  1.4       +5 -15     
xml-axis-wsif/java/test/org/apache/wsif/util/jms/NativeJMSRequestListener.java
  
  Index: NativeJMSRequestListener.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis-wsif/java/test/org/apache/wsif/util/jms/NativeJMSRequestListener.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NativeJMSRequestListener.java     20 Jun 2002 11:14:05 -0000      1.3
  +++ NativeJMSRequestListener.java     21 Jun 2002 13:17:06 -0000      1.4
  @@ -90,7 +90,6 @@
       static final String sampleName = null;
       static final String queueConnectionFactory = "WSIFSampleQCF";
       static final String readQueue = null;
  -    static final String httpUrlString = 
"http://localhost:8080/soap/servlet/rpcrouter";;
   
       private Thread listener;
   
  @@ -306,21 +305,12 @@
          return new Integer( inout.addNumbers( nums ) );
       }
       
  -    private void sendReply(Message msg, Object response) throws Exception {    
  -       Message replyMsg = session.createObjectMessage();
  -       ((ObjectMessage)replyMsg).setObject((Serializable) response );
  +    private void sendReply(Message msg, Object response) throws Exception {
  +        Message replyMsg = session.createObjectMessage();
  +        ((ObjectMessage) replyMsg).setObject((Serializable) response);
   
  -       String replyq = ((Queue)msg.getJMSReplyTo()).getQueueName().substring( 9 );
  -            
  -       WSIFJMSDestination dest = new WSIFJMSDestination(
  -          new WSIFJMSFinderForJndi(null,
  -                                   initialContextFactory, 
  -                                   jndiUrl,
  -                                   WSIFJMSFinder.STYLE_QUEUE,
  -                                   queueConnectionFactory,
  -                                   replyq )
  -          );
  -       dest.send( replyMsg, msg.getJMSMessageID() );
  +        setReplyToQueue((Queue)(msg.getJMSReplyTo()));
  +        send(replyMsg, msg.getJMSMessageID());
       }
   
       /**
  
  
  
  1.3       +56 -31    xml-axis-wsif/java/test/async/AsyncTests.java
  
  Index: AsyncTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/test/async/AsyncTests.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AsyncTests.java   21 Jun 2002 11:12:10 -0000      1.2
  +++ AsyncTests.java   21 Jun 2002 13:17:06 -0000      1.3
  @@ -57,31 +57,40 @@
   
   package async;
   
  -import junit.framework.*;
  -
  -import addressbook.wsiftypes.AddressBook;
  -import addressbook.wsiftypes.Address;
  -import addressbook.wsiftypes.Phone;
  -import stockquote.wsifservice.StockquotePT;
  -import stockquote.wsiftypes.StockQuote;
  -
  -import org.apache.wsif.*;
  -import org.apache.wsif.util.*;
  -import org.apache.wsif.base.*;
  -import org.apache.wsif.util.jms.*;
  +import javax.jms.JMSException;
  +import javax.jms.Message;
  +import javax.jms.Queue;
  +import javax.jms.QueueConnection;
  +import javax.jms.QueueConnectionFactory;
  +import javax.jms.QueueReceiver;
  +import javax.jms.QueueSession;
  +import javax.jms.Session;
  +import junit.framework.Test;
  +import junit.framework.TestCase;
  +import junit.framework.TestSuite;
  +
  +import org.apache.wsif.WSIFConstants;
  +import org.apache.wsif.WSIFCorrelationId;
  +import org.apache.wsif.WSIFCorrelationService;
  +import org.apache.wsif.WSIFException;
  +import org.apache.wsif.WSIFMessage;
  +import org.apache.wsif.WSIFOperation;
  +import org.apache.wsif.WSIFPort;
  +import org.apache.wsif.WSIFService;
  +import org.apache.wsif.WSIFServiceFactory;
  +import org.apache.wsif.base.WSIFDefaultMessage;
  +import org.apache.wsif.base.WSIFServiceImpl;
   import org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis;
  -
  -import javax.jms.*;
  -import javax.mail.MessagingException;
  -
  -import org.apache.wsif.providers.jms.*;
  -
  +import org.apache.wsif.util.WSIFCorrelationServiceLocator;
  +import org.apache.wsif.util.WSIFProperties;
  +import org.apache.wsif.util.jms.WSIFJMSFinderForJndi;
  +import org.apache.wsif.util.jms.WSIFJMSFinder;
   import util.TestUtilities;
   
  +import addressbook.wsiftypes.Address;
  +import addressbook.wsiftypes.Phone;
   import com.ibm.mq.jms.MQQueueConnectionFactory;
   
  -import java.util.HashMap;
  -
   /**
    * Junit test to test the NativeJMSProvider
    * 
  @@ -462,15 +471,31 @@
         return output;
     }
   
  -  private Message getJMSResponse(String id) throws JMSException {
  -     QueueConnectionFactory factory = new MQQueueConnectionFactory();
  -     MQQueueConnectionFactory mqfactory = (MQQueueConnectionFactory) factory;
  -     QueueConnection connection = factory.createQueueConnection();
  -     connection.start();
  -     QueueSession session = connection.createQueueSession(false, 
Session.AUTO_ACKNOWLEDGE);
  -     Queue readQ = session.createQueue( 
TestUtilities.getWsifProperty("wsif.async.replytoq2") );
  -     QueueReceiver receiver = session.createReceiver( readQ, 
"JMSCorrelationID='"+id+"'" );
  -     return receiver.receive( WSIFProperties.getAsyncTimeout() );
  -  }
  -
  +    private Message getJMSResponse(String id) throws WSIFException, JMSException {
  +        String initialContextFactory = "com.sun.jndi.fscontext.RefFSContextFactory";
  +        String jndiUrl = "file:///JNDI-Directory";
  +        String queueConnectionFactory = "WSIFSampleQCF";
  +    
  +        WSIFJMSFinder finder =
  +            new WSIFJMSFinderForJndi(
  +                null,
  +                initialContextFactory,
  +                jndiUrl,
  +                WSIFJMSFinder.STYLE_QUEUE,
  +                queueConnectionFactory,
  +                null);
  +    
  +        QueueConnectionFactory factory = finder.getFactory();
  +        QueueConnection connection = factory.createQueueConnection();
  +        connection.start();
  +        QueueSession session =
  +            connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
  +        Queue readQ =
  +            session.createQueue(
  +                TestUtilities.getWsifProperty("wsif.async.replytoq2"));
  +        QueueReceiver receiver =
  +            session.createReceiver(readQ, "JMSCorrelationID='" + id + "'");
  +        return receiver.receive(WSIFProperties.getAsyncTimeout());
  +    }
  +    
   }
  
  
  
  1.2       +80 -38    
xml-axis-wsif/java/src/org/apache/wsif/util/jms/WSIFJMSFinderForJndi.java
  
  Index: WSIFJMSFinderForJndi.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/util/jms/WSIFJMSFinderForJndi.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WSIFJMSFinderForJndi.java 6 Jun 2002 08:28:52 -0000       1.1
  +++ WSIFJMSFinderForJndi.java 21 Jun 2002 13:17:06 -0000      1.2
  @@ -72,9 +72,10 @@
    * Finds JMS objects by looking them up in JNDI.
    * @author Mark Whitlock <[EMAIL PROTECTED]>
    */
  -class WSIFJMSFinderForJndi extends WSIFJMSFinder {
  +public class WSIFJMSFinderForJndi extends WSIFJMSFinder {
       
  -    private InitialDirContext jndiContext;
  +    private InitialDirContext namedJndiContext = null;
  +    private InitialDirContext containersJndiContext = null;
       private QueueConnectionFactory factory;
       private Destination initialDestination = null;
       private String style;
  @@ -89,7 +90,7 @@
        * @param jndiDestinationName is the JNDI name of the initial queue.
        * @param jmsproviderDestinationName is the JMS implementation's name of the 
initial queue.
        */
  -    WSIFJMSFinderForJndi(
  +    public WSIFJMSFinderForJndi(
           String jmsVendorURL,
           String initialContextFactory,
           String jndiProviderURL,
  @@ -110,38 +111,40 @@
               throw new WSIFException("Style must either be queue or topic");
           this.style = style;
   
  +        if (((initialContextFactory == null) && (jndiProviderURL != null))
  +            || ((initialContextFactory != null) && (jndiProviderURL == null)))
  +            throw new WSIFException(
  +                "Either both initialContextFactory and jndiProviderURL "
  +                    + "must be specified or neither of them must be specified");
  +
           if (initialContextFactory != null && jndiProviderURL != null) {
               Hashtable environment = new Hashtable();
               environment.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
               environment.put(Context.PROVIDER_URL, jndiProviderURL);
   
               try {
  -                jndiContext = new InitialDirContext(environment);
  +                namedJndiContext = new InitialDirContext(environment);
               } catch (NamingException ne) {
                   throw new WSIFException(
                       "WSIFJMSFinderForJndi caught '"
                           + ne
  -                        + "'. "
  -                        + "InitialContextFactory was '"
  +                        + "'. InitialContextFactory was '"
                           + initialContextFactory
  -                        + "' "
  -                        + "ProviderUrl was '"
  +                        + "' ProviderUrl was '"
                           + jndiProviderURL
                           + "'");
               }
  -        } else if (initialContextFactory == null && jndiProviderURL == null)
  -            try {
  -                jndiContext = new InitialDirContext();
  -            } catch (NamingException ne) {
  +        } 
  +
  +        try {
  +            containersJndiContext = new InitialDirContext();
  +        } catch (NamingException ne) {
  +            if (initialContextFactory == null && jndiProviderURL == null) 
                   throw new WSIFException(
                       "WSIFJMSFinderForJndi caught '"
                           + ne
  -                        + "' "
  -                        + "using the default JNDI repository.");
  -            } else
  -            throw new WSIFException(
  -                "Either both initialContextFactory and jndiProviderURL "
  -                    + "must be specified or neither of them must be specified");
  +                        + "' using the default JNDI repository.");
  +        }
   
           if (STYLE_TOPIC.equals(style))
               throw new WSIFException("Topics not implemented");
  @@ -154,36 +157,40 @@
           if (jndiConnectionFactory == null)
               throw new WSIFException("jndiConnectionFactory must be specified");
           try {
  -            factory = (QueueConnectionFactory) 
jndiContext.lookup(jndiConnectionFactory);
  +            factory = (QueueConnectionFactory) lookup(jndiConnectionFactory);
  +            if (factory == null)
  +                throw new WSIFException(
  +                    "WSIFJMSFinderForJndi was not able to lookup the 
ConnectionFactory "
  +                        + jndiConnectionFactory
  +                        + " in JNDI.");
           } catch (ClassCastException cce) {
               throw new WSIFException(
  -                "WSIFJMSFinderForJndi caught ClassCastException. "
  -                    + "The ConnectionFactory "
  +                "WSIFJMSFinderForJndi caught ClassCastException. The 
ConnectionFactory "
                       + jndiConnectionFactory
  -                    + " in JNDI was not "
  -                    + "defined to be a connection factory.");
  +                    + " in JNDI was not defined to be a connection factory.");
           } catch (NamingException ne) {
               throw new WSIFException(
  -                "WSIFJMSFinderForJndi caught NamingException. "
  -                    + "The ConnectionFactory "
  +                "WSIFJMSFinderForJndi caught NamingException. The ConnectionFactory 
"
                       + jndiConnectionFactory
  -                    + " in JNDI was not "
  -                    + "defined to be a connection factory.");
  +                    + " in JNDI was not defined to be a connection factory.");
           }
   
           if (jndiDestinationName != null)
               try {
  -                initialDestination = (Destination) 
jndiContext.lookup(jndiDestinationName);
  +                initialDestination = (Destination) lookup(jndiDestinationName);
  +                if (initialDestination == null)
  +                    throw new WSIFException(
  +                        "WSIFJMSFinderForJndi was not able to lookup the 
Destination "
  +                            + jndiDestinationName
  +                            + " in JNDI.");
               } catch (ClassCastException cce) {
                   throw new WSIFException(
  -                    "WSIFJMSFinderForJndi caught ClassCastException. "
  -                        + "The Destination "
  +                    "WSIFJMSFinderForJndi caught ClassCastException. The 
Destination "
                           + jndiDestinationName
                           + " in JNDI was not defined to be a destination.");
               } catch (NamingException cce) {
                   throw new WSIFException(
  -                    "WSIFJMSFinderForJndi caught NamingException. "
  -                        + "The Destination "
  +                    "WSIFJMSFinderForJndi caught NamingException. The Destination "
                           + jndiDestinationName
                           + " in JNDI was not defined to be a destination.");
               }
  @@ -213,17 +220,20 @@
           Tr.entry(this, name);
           Queue q = null;
           try {
  -            q = (Queue) jndiContext.lookup(name);
  +            q = (Queue) lookup(name);
  +            if (q == null)
  +                throw new WSIFException(
  +                    "WSIFJMSFinderForJndi was not able to lookup the Destination "
  +                        + name
  +                        + " in JNDI.");
           } catch (ClassCastException cce) {
               throw new WSIFException(
  -                "WSIFJMSFinderForJndi caught ClassCastException. "
  -                    + "The Queue "
  +                "WSIFJMSFinderForJndi caught ClassCastException. The Queue "
                       + name
                       + " in JNDI was not defined to be a queue.");
           } catch (NamingException cce) {
               throw new WSIFException(
  -                "WSIFJMSFinderForJndi caught NamingException. "
  -                    + "The Queue "
  +                "WSIFJMSFinderForJndi caught NamingException. The Queue "
                       + name
                       + " in JNDI was not defined to be a queue.");
           }
  @@ -231,11 +241,43 @@
           return q;
       }
   
  +    /**
  +     * There is at least one and at most two JNDI databases to look 
  +     * objects up in :- the container's default JNDI database and the 
  +     * one specified in the WSDL. This code looks objects up in the
  +     * container's JNDI first (if running in a container), and then 
  +     * looks the object up in the JNDI pointed at by the WSDL (assuming
  +     * there is a JNDI mentioned in the WSDL). This allows a client
  +     * administrator to override the JNDI specified in the WSDL. If 
  +     * both fail, then the first error is returned.
  +     */
  +    private Object lookup(String name) throws NamingException {
  +        Tr.entry(name);
  +        Object result = null;
  +        if (containersJndiContext != null) {
  +            try {
  +                result = containersJndiContext.lookup(name);
  +            } catch (NamingException ne) {
  +                if (namedJndiContext != null) {
  +                    try {
  +                        result = namedJndiContext.lookup(name);
  +                    } catch (NamingException ignored) {
  +                        throw ne;
  +                    }
  +                }
  +            }
  +        } else
  +            result = namedJndiContext.lookup(name);
  +        Tr.exit(result);
  +        return result;
  +    }
  +    
       public String deep() {
           String buff = "";
           try {
               buff = new String(this.toString() + "\n");
  -            buff += "jndiContext: " + jndiContext;
  +            buff += "containersJndiContext: " + containersJndiContext;
  +            buff += " namedJndiContext: " + namedJndiContext;
               buff += " factory: " + factory;
               buff += " initialDestination: " + initialDestination;
               buff += " style: " + style;
  
  
  


Reply via email to