[jboss-svn-commits] JBL Code SVN: r21191 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 23 10:43:06 EDT 2008


Author: kevin.conner at jboss.com
Date: 2008-07-23 10:43:06 -0400 (Wed, 23 Jul 2008)
New Revision: 21191

Modified:
   labs/jbossesb/trunk/product/docs/AdministrationGuide.odt
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JMSEpr.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/JMSEprUnitTest.java
Log:
Allow additional JNDI properties: JBESB-1717

Modified: labs/jbossesb/trunk/product/docs/AdministrationGuide.odt
===================================================================
(Binary files differ)

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -158,11 +158,15 @@
      * @param poolKey
      * @return
      */
-    public static Properties getJndiEnvironment(Map<String,String> poolKey) {
+    static Properties getJndiEnvironment(Map<String,String> poolKey) {
         Properties environment = new Properties();
+        final String[] jndiPrefixes = JMSEpr.getJndiPrefixes(environment.getProperty(JMSEpr.JNDI_PREFIXES)) ;
         for (String key: poolKey.keySet()) {
-            if (key.startsWith("java.naming.")) {
-                environment.setProperty(key, poolKey.get(key));
+            for(String jndiPrefix: jndiPrefixes) {
+                if (key.startsWith(jndiPrefix)) {
+                    environment.setProperty(key, poolKey.get(key));
+                    break ;
+                }
             }
         }
         return environment;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JMSEpr.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JMSEpr.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/addressing/eprs/JMSEpr.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -28,7 +28,11 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 import javax.jms.Session;
 import javax.naming.Context;
@@ -90,6 +94,8 @@
 	
 	public static final String TRANSACTED_TAG = "transacted";
 	
+	public static final String JNDI_PREFIXES = "jndi-prefixes";
+	
 	/**
 	 * JMS Client acknowledgment mode configuration tag
 	 */
@@ -160,7 +166,10 @@
 		NodeList nl = header.getChildNodes();
 		String uri = null;
 		String name = null;
+		String jndiPrefixesValue = null ;
 		
+		final Map<String, String> extensions = new TreeMap<String, String>() ;
+		
 		for (int i = 0; i < nl.getLength(); i++)
 		{
 			String prefix = nl.item(i).getPrefix();
@@ -170,55 +179,74 @@
 			{
 				if (tag != null)
 				{
+                    final String value = nl.item(i).getTextContent();
+
                     if (tag.startsWith("java.naming.")) {
-                        getAddr().addExtension(tag, nl.item(i).getTextContent());
+                        getAddr().addExtension(tag, value);
                     } else if (tag.equals(SPECIFICATION_VERSION_TAG)) {
-						getAddr().addExtension(SPECIFICATION_VERSION_TAG, nl.item(i).getTextContent());
+						getAddr().addExtension(SPECIFICATION_VERSION_TAG, value);
                     } else if (tag.equals(DESTINATION_NAME_TAG)) {
-						name = nl.item(i).getTextContent();
+						name = value;
                     } else if (tag.equals(CONNECTION_FACTORY_TAG)) {
-						getAddr().addExtension(CONNECTION_FACTORY_TAG, nl.item(i).getTextContent());
+						getAddr().addExtension(CONNECTION_FACTORY_TAG, value);
                     } else if (tag.equals(JNDI_CONTEXT_FACTORY_TAG)) {
-						getAddr().addExtension(Context.INITIAL_CONTEXT_FACTORY, nl.item(i).getTextContent());
+						getAddr().addExtension(Context.INITIAL_CONTEXT_FACTORY, value);
                     } else if (tag.equals(JNDI_PKG_PREFIX_TAG)) {
-						getAddr().addExtension(Context.URL_PKG_PREFIXES, nl.item(i).getTextContent());
+						getAddr().addExtension(Context.URL_PKG_PREFIXES, value);
                     } else if (tag.equals(JNDI_URL_TAG)) {
-                    	uri = nl.item(i).getTextContent();
+                    	uri = value;
                     	
                     	// remember to add this extension!
                 	getAddr().addExtension(Context.PROVIDER_URL, uri);
                     } else if (tag.equals(MESSAGE_SELECTOR_TAG)) {
-                    	getAddr().addExtension(MESSAGE_SELECTOR_TAG, nl.item(i).getTextContent());
+                    	getAddr().addExtension(MESSAGE_SELECTOR_TAG, value);
                     } else if (tag.equals(PERSISTENT_TAG)) {
                     	boolean persistent = true;
-                    	final String persistentStr = nl.item(i).getTextContent();
+                    	final String persistentStr = value;
                     	if ( persistentStr != null )
 	                    	persistent = Boolean.parseBoolean(persistentStr);
                     	
 				    	getAddr().addExtension(PERSISTENT_TAG, String.valueOf(persistent));
     				} else if (tag.equals(ACKNOWLEDGE_MODE_TAG)) {
-                    	String ackMode = nl.item(i).getTextContent();
+                    	String ackMode = value;
                     	getAddr().addExtension(ACKNOWLEDGE_MODE_TAG, String.valueOf(ackMode));
     				} else if (tag.equals(JMS_SECURITY_PRINCIPAL_TAG)) {
-                    	String username = nl.item(i).getTextContent();
+                    	String username = value;
                     	getAddr().addExtension(JMS_SECURITY_PRINCIPAL_TAG, String.valueOf(username));
     				} else if (tag.equals(JMS_SECURITY_CREDENTIAL_TAG)) {
-                    	String password = nl.item(i).getTextContent();
+                    	String password = value;
                     	getAddr().addExtension(JMS_SECURITY_CREDENTIAL_TAG, String.valueOf(password));
                     } else if (tag.equals(DESTINATION_TYPE_TAG)) { 
-                         getAddr().addExtension(DESTINATION_TYPE_TAG, nl.item(i).getTextContent()); 
+                         getAddr().addExtension(DESTINATION_TYPE_TAG, value); 
 					} else if (tag.equals(TRANSACTED_TAG)) {
 						boolean transacted = false;
-						final String transactedStr = nl.item(i).getTextContent();
+						final String transactedStr = value;
 						if ( transactedStr != null )
 							transacted = Boolean.parseBoolean(transactedStr);
 						                 	
 				    	getAddr().addExtension(TRANSACTED_TAG, String.valueOf(transacted));
-                   } 
+                    } else if (tag.equals(JNDI_PREFIXES)) {
+                    	jndiPrefixesValue = value ;
+                        getAddr().addExtension(JNDI_PREFIXES, value); 
+                    } else {
+                        extensions.put(tag, value);
+                    }
 				}
 			}
 		}
 		
+		if (jndiPrefixesValue != null) {
+			final String[] jndiPrefixes = getJndiPrefixes(jndiPrefixesValue) ;
+			for(Map.Entry<String, String> entry: extensions.entrySet()) {
+				for(String jndiPrefix: jndiPrefixes) {
+					final String tag = entry.getKey() ;
+					if (tag.startsWith(jndiPrefix)) {
+						getAddr().addExtension(tag, entry.getValue()) ;
+						break ;
+					}
+				}
+			}
+		}
 		if (uri != null)
 			setAddr(new PortReference(JMS_PROTOCOL + PROTOCOL_SEPARATOR + uri + "/" + name));
 	}
@@ -597,12 +625,24 @@
 
     public final Properties getJndiEnvironment()
     {
-        Properties properties = new Properties();
+        final Properties properties = new Properties();
+        final String jndiPrefixesValue = getAddr().getExtensionValue(JNDI_PREFIXES) ;
+        if (jndiPrefixesValue != null)
+        {
+            properties.put(JNDI_PREFIXES, jndiPrefixesValue) ;
+        }
+        final String[] jndiPrefixes = getJndiPrefixes(jndiPrefixesValue) ;
+        
         Iterator<Extension> iter = getAddr().getExtensions();
         while (iter.hasNext()) {
             Extension extension = iter.next();
-            if (extension.getTag().startsWith("java.naming.") && extension.getValue()!=null) {
-                properties.put(extension.getTag(), extension.getValue());
+            
+            for(String jndiPrefix: jndiPrefixes)
+            {
+                if (extension.getTag().startsWith(jndiPrefix) && extension.getValue()!=null) {
+                    properties.put(extension.getTag(), extension.getValue());
+                    break ;
+                }
             }
         }
 
@@ -615,6 +655,30 @@
 
         return properties;
     }
+    
+    /**
+     * Get the list of JNDI extension prefixes.
+     * @param jndiPrefixesValue The JNDI prefix list or null if default.
+     * @return The list of JNDI extension prefixes.
+     */
+    public static String[] getJndiPrefixes(final String jndiPrefixesValue)
+    {
+        final Set<String> jndiPrefixesSet = new TreeSet<String>();
+        jndiPrefixesSet.add("java.naming.") ;
+        if (jndiPrefixesValue != null)
+        {
+            final String[] values = jndiPrefixesValue.split(",") ;
+            for(String value: values)
+            {
+                final String trim = value.trim() ;
+                if (trim.length() > 0)
+                {
+                	jndiPrefixesSet.add(trim) ;
+                }
+            }
+        }
+        return jndiPrefixesSet.toArray(new String[jndiPrefixesSet.size()]) ;
+    }
 
 	/**
 	 * @return the message selector for this EPR, or <code>null</code> if none

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -141,9 +141,17 @@
 			String name = tree.getRequiredAttribute(JMSEpr.DESTINATION_NAME_TAG);
             Set<String> names=tree.getAttributeNames();
             Properties environment = new Properties();
+            final String jndiPrefixesValue = tree.getAttribute(JMSEpr.JNDI_PREFIXES) ;
+            if (jndiPrefixesValue != null) {
+                environment.put(JMSEpr.JNDI_PREFIXES, jndiPrefixesValue) ;
+            }
+            final String[] jndiPrefixes = JMSEpr.getJndiPrefixes(jndiPrefixesValue) ;
             for (String attributeName : names) {
-                if (attributeName.startsWith("java.naming.")) {
-                    environment.setProperty(attributeName, tree.getAttribute(attributeName));
+                for(String jndiPrefix: jndiPrefixes) {
+                    if (attributeName.startsWith(jndiPrefix)) {
+                        environment.setProperty(attributeName, tree.getAttribute(attributeName));
+                        break ;
+                    }
                 }
             }
 			String type = getAttrAndWarn(tree, JMSEpr.DESTINATION_TYPE_TAG,

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JmsGatewayListener.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -359,9 +359,17 @@
         if (sJndiPkgPrefix != null)
             environment.setProperty(Context.URL_PKG_PREFIXES, sJndiPkgPrefix);
         Set<String> names = _config.getAttributeNames();
+        final String jndiPrefixesValue = _config.getAttribute(JMSEpr.JNDI_PREFIXES) ;
+        if (jndiPrefixesValue != null) {
+            environment.setProperty(JMSEpr.JNDI_PREFIXES, jndiPrefixesValue) ;
+        }
+        final String[] jndiPrefixes = JMSEpr.getJndiPrefixes(jndiPrefixesValue) ;
         for (String name : names) {
-            if (name.startsWith("java.naming.")) {
-                environment.setProperty(name, _config.getAttribute(name));
+            for(String jndiPrefix: jndiPrefixes) {
+                if (name.startsWith(jndiPrefix)) {
+                    environment.setProperty(name, _config.getAttribute(name));
+                    break ;
+                }
             }
         }
         Context oJndiCtx = NamingContextPool.getNamingContext(environment);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/notification/NotifyJMS.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -411,9 +411,13 @@
                 String prefix = configTrees[i].getAttribute(JMSEpr.JNDI_PKG_PREFIX_TAG);
                 if (prefix!=null) environment.setProperty(Context.URL_PKG_PREFIXES, prefix);
                 List<KeyValuePair> properties=configTrees[i].childPropertyList();
+                final String[] jndiPrefixes = JMSEpr.getJndiPrefixes(KeyValuePair.getValue(JMSEpr.JNDI_PREFIXES, properties)) ;
                 for (KeyValuePair property : properties) {
-                    if (property.getKey().startsWith("java.naming.")) {
-                        environment.setProperty(property.getKey(), property.getValue());  
+                    for(String jndiPrefix: jndiPrefixes) {
+                        if (property.getKey().startsWith(jndiPrefix)) {
+                            environment.setProperty(property.getKey(), property.getValue());
+                            break ;
+                        }
                     }
                 }
                 

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/JMSEprUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/JMSEprUnitTest.java	2008-07-23 14:15:14 UTC (rev 21190)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/addressing/eprs/JMSEprUnitTest.java	2008-07-23 14:43:06 UTC (rev 21191)
@@ -32,6 +32,7 @@
 import junit.framework.JUnit4TestAdapter;
 
 import org.jboss.soa.esb.addressing.eprs.JMSEpr.AcknowledgeMode;
+import org.jboss.soa.esb.common.Configuration;
 import org.jboss.soa.esb.couriers.CourierException;
 import org.junit.Test;
 
@@ -231,6 +232,42 @@
 		assertEquals( transacted, jmsEpr.getTransacted() );
 	}
 	
+	@Test
+	public void eprWithJndiExtensions()
+		throws CourierException, URISyntaxException
+	{
+		final String testProviderURL = "test://provider" ;
+		final String testInitialContextFactory = "test.InitialContextFactory" ;
+		final String testPrefix1 = "test.prefix1." ;
+		final String testExtension1 = testPrefix1 + "extension" ;
+		final String testExtension1Value = "testExtension1Value" ;
+		final String testPrefix2 = "test.prefix2." ;
+		final String testExtension2 = testPrefix2 + "extension" ;
+		final String testExtension2Value = "testExtension2Value" ;
+		final String testPrefixes = testPrefix1 + ", " + testPrefix2 ;
+		
+		final Properties env = new Properties();
+		env.put(JMSEpr.JNDI_PREFIXES, testPrefixes);
+		env.put(Context.PROVIDER_URL, testProviderURL) ;
+		env.put(Context.INITIAL_CONTEXT_FACTORY, testInitialContextFactory) ;
+		env.put(testExtension1, testExtension1Value) ;
+		env.put(testExtension2, testExtension2Value) ;
+		env.put("exclude.extension", "excludeValue") ;
+		
+		JMSEpr jmsEpr = new JMSEpr( ONE_ONE_PROTOCOL, expectedDestinationType, expectedDestination , 
+				expectedConnectionFactory, env, expectedSelector, NON_PERSISTENT,
+				AcknowledgeMode.CLIENT_ACKNOWLEDGE.toString());
+		
+		final Properties eprProperties = jmsEpr.getJndiEnvironment() ;
+		
+		assertEquals("JNDI property count", 5, eprProperties.size()) ;
+		assertEquals("JNDI prefixes", testPrefixes, eprProperties.get(JMSEpr.JNDI_PREFIXES)) ;
+		assertEquals("JNDI provider URL", testProviderURL, eprProperties.get(Context.PROVIDER_URL)) ;
+		assertEquals("JNDI InitialContextFactory", testInitialContextFactory, eprProperties.get(Context.INITIAL_CONTEXT_FACTORY)) ;
+		assertEquals("First extension", testExtension1Value, eprProperties.get(testExtension1)) ;
+		assertEquals("Second extension", testExtension2Value, eprProperties.get(testExtension2)) ;
+	}
+	
 	private void assertDefaults(final String destination, final String connectionFactory, final String destinationType)
 	{
 		assertEquals( expectedDestination, destination );




More information about the jboss-svn-commits mailing list