You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by Charles Souillard <Ch...@ext.bull.net> on 2006/04/05 15:53:43 UTC

Re: svn commit: r391596 - in /incubator/servicemix/trunk/servicemix-jms/src/main: java/org/apache/servicemix/jms/ java/org/apache/servicemix/jms/multiplexing/ resources/META-INF/services/ resources/META-INF/services/org/ resources/META-INF/services/org/apa...

Guillaume,

I am trying to understand the object of this commit but I am not sure to 
understand what is allowing different jms processors...
Can you explain me please ?
In addition, I saw that Multiplexing's are always using the same session 
into different threads... Can you correct that  ?
I think you only have to create a new session each time you need it...
Or perhaps I am missing something...
I ran my test on with these new modifications and I still get the 
"javax.jms.IllegalStateException"

Thanks
Charles

gnodet@apache.org wrote:
> Author: gnodet
> Date: Wed Apr  5 05:03:27 2006
> New Revision: 391596
>
> URL: http://svn.apache.org/viewcvs?rev=391596&view=rev
> Log:
> First step before SM-378 to allow different jms processors to be used
>
> Added:
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java
>       - copied, changed from r391398, incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingConsumerProcessor.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingProviderProcessor.java
>       - copied, changed from r391398, incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingProviderProcessor.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/
>     incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/multiplexing
> Removed:
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingConsumerProcessor.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingProviderProcessor.java
> Modified:
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfiguration.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfigurationMBean.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java
>     incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsLifeCycle.java
>
> Modified: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfiguration.java
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfiguration.java?rev=391596&r1=391595&r2=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfiguration.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfiguration.java Wed Apr  5 05:03:27 2006
> @@ -15,13 +15,16 @@
>   */
>  package org.apache.servicemix.jms;
>  
> -public class JmsConfiguration implements JmsConfigurationMBean {
> +import org.apache.servicemix.common.PersistentConfiguration;
> +
> +public class JmsConfiguration extends PersistentConfiguration implements JmsConfigurationMBean {
>  
>      private String userName;
>      private String password;
>      private String jndiInitialContextFactory;
>      private String jndiProviderUrl;
> -    private String jndiName;
> +    private String jndiConnectionFactoryName;
> +    private String processorName = "multiplexing";
>      
>      /**
>       * @return Returns the password.
> @@ -34,6 +37,7 @@
>       */
>      public void setPassword(String password) {
>          this.password = password;
> +        save();
>      }
>      /**
>       * @return Returns the userName.
> @@ -46,18 +50,20 @@
>       */
>      public void setUserName(String userName) {
>          this.userName = userName;
> +        save();
>      }
>      /**
>       * @return Returns the jndiName.
>       */
> -    public String getJndiName() {
> -        return jndiName;
> +    public String getJndiConnectionFactoryName() {
> +        return jndiConnectionFactoryName;
>      }
>      /**
>       * @param jndiName The jndiName to set.
>       */
> -    public void setJndiName(String jndiName) {
> -        this.jndiName = jndiName;
> +    public void setJndiConnectionFactoryName(String jndiName) {
> +        this.jndiConnectionFactoryName = jndiName;
> +        save();
>      }
>      /**
>       * @return Returns the jndiInitialContextFactory.
> @@ -70,6 +76,7 @@
>       */
>      public void setJndiInitialContextFactory(String jndiInitialContextFactory) {
>          this.jndiInitialContextFactory = jndiInitialContextFactory;
> +        save();
>      }
>      /**
>       * @return Returns the jndiProviderUrl.
> @@ -82,8 +89,56 @@
>       */
>      public void setJndiProviderUrl(String jndiProviderUrl) {
>          this.jndiProviderUrl = jndiProviderUrl;
> +        save();
> +    }
> +    /**
> +     * @return Returns the processorName.
> +     */
> +    public String getProcessorName() {
> +        return processorName;
> +    }
> +    /**
> +     * @param processorName The processorName to set.
> +     */
> +    public void setProcessorName(String processorName) {
> +        this.processorName = processorName;
> +        save();
>      }
>      
> +    public void save() {
> +        properties.setProperty("userName", userName);
> +        properties.setProperty("password", password);
> +        properties.setProperty("jndiInitialContextFactory", jndiInitialContextFactory);
> +        properties.setProperty("jndiProviderUrl", jndiProviderUrl);
> +        properties.setProperty("jndiName", jndiConnectionFactoryName);
> +        properties.setProperty("processorName", processorName);
> +        super.save();
> +    }
>      
> -    
> +    public boolean load() {
> +        if (super.load()) {
> +            if (properties.getProperty("userName") != null) {
> +                userName = properties.getProperty("userName");
> +            }
> +            if (properties.getProperty("password") != null) {
> +                password = properties.getProperty("password");
> +            }
> +            if (properties.getProperty("jndiInitialContextFactory") != null) {
> +                jndiInitialContextFactory = properties.getProperty("jndiInitialContextFactory");
> +            }
> +            if (properties.getProperty("jndiProviderUrl") != null) {
> +                jndiProviderUrl = properties.getProperty("jndiProviderUrl");
> +            }
> +            if (properties.getProperty("jndiName") != null) {
> +                jndiConnectionFactoryName = properties.getProperty("jndiName");
> +            }
> +            if (properties.getProperty("processorName") != null) {
> +                processorName = properties.getProperty("processorName");
> +            }
> +            return true;
> +        } else {
> +            return false;
> +        }
> +    }
> +
>  }
>
> Modified: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfigurationMBean.java
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfigurationMBean.java?rev=391596&r1=391595&r2=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfigurationMBean.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsConfigurationMBean.java Wed Apr  5 05:03:27 2006
> @@ -34,11 +34,35 @@
>       */
>      public void setUserName(String userName);
>      /**
> -     * @return Returns the jndiName.
> +     * @return Returns the jndiConnectionFactoryName.
>       */
> -    public String getJndiName();
> +    public String getJndiConnectionFactoryName();
>      /**
> -     * @param jndiName The jndiName to set.
> +     * @param jndiConnectionFactoryName The jndiName to set.
>       */
> -    public void setJndiName(String jndiName);
> +    public void setJndiConnectionFactoryName(String jndiConnectionFactoryName);
> +    /**
> +     * @return Returns the jndiInitialContextFactory.
> +     */
> +    public String getJndiInitialContextFactory();
> +    /**
> +     * @param jndiInitialContextFactory The jndiInitialContextFactory to set.
> +     */
> +    public void setJndiInitialContextFactory(String jndiInitialContextFactory);
> +    /**
> +     * @return Returns the jndiProviderUrl.
> +     */
> +    public String getJndiProviderUrl();
> +    /**
> +     * @param jndiProviderUrl The jndiProviderUrl to set.
> +     */
> +    public void setJndiProviderUrl(String jndiProviderUrl);
> +    /**
> +     * @return Returns the processName.
> +     */
> +    public String getProcessorName();
> +    /**
> +     * @param processorName The processorName to set.
> +     */
> +    public void setProcessorName(String processorName);
>  }
>
> Modified: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java?rev=391596&r1=391595&r2=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java Wed Apr  5 05:03:27 2006
> @@ -15,7 +15,10 @@
>   */
>  package org.apache.servicemix.jms;
>  
> +import java.io.InputStream;
> +import java.lang.reflect.Constructor;
>  import java.util.Iterator;
> +import java.util.Properties;
>  
>  import javax.jbi.servicedesc.ServiceEndpoint;
>  import javax.jms.ConnectionFactory;
> @@ -49,6 +52,7 @@
>      // Spring configuration
>      protected ConnectionFactory connectionFactory;
>      protected Destination destination;
> +    protected String processorName;
>      
>      public JmsEndpoint() {
>      }
> @@ -187,11 +191,62 @@
>      }
>  
>      protected ExchangeProcessor createProviderProcessor() {
> -        return new MultiplexingProviderProcessor(this);
> +        return createProcessor("provider");
>      }
>  
>      protected ExchangeProcessor createConsumerProcessor() {
> -        return new MultiplexingConsumerProcessor(this);
> +        return createProcessor("consumer");
> +    }
> +    
> +    protected ExchangeProcessor createProcessor(String type) {
> +        try {
> +            String procName = processorName;
> +            if (processorName == null) {
> +                JmsLifeCycle lf = (JmsLifeCycle) getServiceUnit().getComponent().getLifeCycle();
> +                procName = lf.getConfiguration().getProcessorName();
> +            }
> +            String uri = "META-INF/services/org/apache/servicemix/jms/" + procName;
> +            InputStream in = loadResource(uri);
> +            Properties props = new Properties();
> +            props.load(in);
> +            String className = props.getProperty(type);
> +            Class cl = loadClass(className);
> +            Constructor cns = cl.getConstructor(new Class[] { getClass() });
> +            return (ExchangeProcessor) cns.newInstance(new Object[] { this });
> +        } catch (Exception e) {
> +            throw new RuntimeException("Could not create processor of type " + type + " and name " + processorName, e);
> +        }
> +    }
> +
> +    /**
> +     * Attempts to load the class on the current thread context class loader or
> +     * the class loader which loaded us
> +     */
> +    protected Class loadClass(String name) throws ClassNotFoundException {
> +        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
> +        if (contextClassLoader != null) {
> +            try {
> +                return contextClassLoader.loadClass(name);
> +            }
> +            catch (ClassNotFoundException e) {
> +            }
> +        }
> +        return getClass().getClassLoader().loadClass(name);
> +    }
> +
> +    /**
> +     * Loads the resource from the given URI
> +     */
> +    protected InputStream loadResource(String uri) {
> +        // lets try the thread context class loader first
> +        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(uri);
> +        if (in == null) {
> +            in = getClass().getClassLoader().getResourceAsStream(uri);
> +            if (in == null) {
> +                logger.debug("Could not find resource: " + uri);
> +            }
> +        }
> +        return in;
>      }
>  
>      protected ServiceEndpoint createExternalEndpoint() {
> @@ -248,6 +303,20 @@
>                  "endpoint: " + endpoint + ", " + 
>                  "address: " + jndiDestinationName + "(" + destinationStyle + "), " + 
>                  "soap: " + soap + "]";
> +    }
> +
> +    /**
> +     * @return Returns the processorName.
> +     */
> +    public String getProcessorName() {
> +        return processorName;
> +    }
> +
> +    /**
> +     * @param processorName The processorName to set.
> +     */
> +    public void setProcessorName(String processorName) {
> +        this.processorName = processorName;
>      }
>  
>  }
>
> Modified: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsLifeCycle.java
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsLifeCycle.java?rev=391596&r1=391595&r2=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsLifeCycle.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsLifeCycle.java Wed Apr  5 05:03:27 2006
> @@ -34,6 +34,15 @@
>          return configuration;
>      }
>  
> +    /* (non-Javadoc)
> +     * @see org.apache.servicemix.common.BaseLifeCycle#doInit()
> +     */
> +    protected void doInit() throws Exception {
> +        super.doInit();
> +        configuration.setRootDir(context.getWorkspaceRoot());
> +        configuration.load();
> +    }
> +    
>      /**
>       * @return Returns the configuration.
>       */
>
> Copied: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java (from r391398, incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingConsumerProcessor.java)
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java?p2=incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java&p1=incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingConsumerProcessor.java&r1=391398&r2=391596&rev=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingConsumerProcessor.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java Wed Apr  5 05:03:27 2006
> @@ -13,7 +13,7 @@
>   * See the License for the specific language governing permissions and
>   * limitations under the License.
>   */
> -package org.apache.servicemix.jms;
> +package org.apache.servicemix.jms.multiplexing;
>  
>  import java.io.ByteArrayInputStream;
>  import java.io.ByteArrayOutputStream;
> @@ -39,6 +39,8 @@
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>  import org.apache.servicemix.common.BaseLifeCycle;
> +import org.apache.servicemix.jms.AbstractJmsProcessor;
> +import org.apache.servicemix.jms.JmsEndpoint;
>  import org.apache.servicemix.soap.Context;
>  import org.apache.servicemix.soap.SoapFault;
>  import org.apache.servicemix.soap.SoapHelper;
>
> Copied: incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingProviderProcessor.java (from r391398, incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingProviderProcessor.java)
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingProviderProcessor.java?p2=incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingProviderProcessor.java&p1=incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingProviderProcessor.java&r1=391398&r2=391596&rev=391596&view=diff
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/MultiplexingProviderProcessor.java (original)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingProviderProcessor.java Wed Apr  5 05:03:27 2006
> @@ -13,7 +13,7 @@
>   * See the License for the specific language governing permissions and
>   * limitations under the License.
>   */
> -package org.apache.servicemix.jms;
> +package org.apache.servicemix.jms.multiplexing;
>  
>  import java.io.ByteArrayInputStream;
>  import java.io.ByteArrayOutputStream;
> @@ -45,6 +45,8 @@
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>  import org.apache.servicemix.JbiConstants;
> +import org.apache.servicemix.jms.AbstractJmsProcessor;
> +import org.apache.servicemix.jms.JmsEndpoint;
>  import org.apache.servicemix.soap.marshalers.JBIMarshaler;
>  import org.apache.servicemix.soap.marshalers.SoapMarshaler;
>  import org.apache.servicemix.soap.marshalers.SoapMessage;
>
> Added: incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/multiplexing
> URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/multiplexing?rev=391596&view=auto
> ==============================================================================
> --- incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/multiplexing (added)
> +++ incubator/servicemix/trunk/servicemix-jms/src/main/resources/META-INF/services/org/apache/servicemix/jms/multiplexing Wed Apr  5 05:03:27 2006
> @@ -0,0 +1,2 @@
> +consumer=org.apache.servicemix.jms.multiplexing.MultiplexingConsumerProcessor
> +provider=org.apache.servicemix.jms.multiplexing.MultiplexingProviderProcessor
> \ No newline at end of file
>
>
>
>