001 /** 002 * 003 * Copyright 2005 Pawel Tucholski 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 **/ 018 package org.activemq.jndi; 019 020 import javax.naming.Context; 021 import javax.naming.NamingException; 022 import java.util.Hashtable; 023 import java.util.Iterator; 024 import java.util.Map; 025 026 /** 027 * This implementation of <CODE>InitialContextFactory</CODE> should be used 028 * when ActiveMQ is used as WebSphere Generic JMS Provider. It is proved that it 029 * works on WebSphere 5.1. The reason for using this class is that custom 030 * property defined for Generic JMS Provider are passed to InitialContextFactory 031 * only if it begins with java.naming or javax.naming prefix. Additionaly 032 * provider url for the JMS provider can not contain ',' character that is 033 * necessary when the list of nodes is provided. So the role of this class is to 034 * transform properties before passing it to <CODE>ActiveMQInitialContextFactory</CODE>. 035 */ 036 public class ActiveMQWASInitialContextFactory extends ActiveMQInitialContextFactory { 037 038 /** 039 * @see javax.naming.spi.InitialContextFactory#getInitialContext(java.util.Hashtable) 040 */ 041 public Context getInitialContext(Hashtable environment) throws NamingException { 042 043 return super.getInitialContext(transformEnvironment(environment)); 044 } 045 046 /** 047 * Performs following transformation of properties: 048 * <ul> 049 * <li>(java.naming.queue.xxx.yyy,value)=>(queue.xxx/yyy,value) 050 * <li>(java.naming.topic.xxx.yyy,value)=>(topic.xxx/yyy,value) 051 * <li>(java.naming.connectionFactoryNames,value)=>(connectionFactoryNames,value) 052 * <li>(java.naming.provider.url,url1;url2)=>java.naming.provider.url,url1,url1) 053 * <ul> 054 * 055 * @param environment 056 * properties for transformation 057 * @return environment after transformation 058 */ 059 protected Hashtable transformEnvironment(Hashtable environment) { 060 061 Hashtable environment1 = new Hashtable(); 062 063 Iterator it = environment.entrySet().iterator(); 064 065 while (it.hasNext()) { 066 Map.Entry entry = (Map.Entry) it.next(); 067 String key = (String) entry.getKey(); 068 String value = (String) entry.getValue(); 069 070 if (key.startsWith("java.naming.queue")) { 071 String key1 = key.substring("java.naming.queue.".length()); 072 key1 = key1.replace('.', '/'); 073 environment1.put("queue." + key1, value); 074 } 075 else if (key.startsWith("java.naming.topic")) { 076 String key1 = key.substring("java.naming.topic.".length()); 077 key1 = key1.replace('.', '/'); 078 environment1.put("topic." + key1, value); 079 } 080 else if (key.startsWith("java.naming.connectionFactoryNames")) { 081 String key1 = key.substring("java.naming.".length()); 082 environment1.put(key1, value); 083 } 084 else if (key.startsWith("java.naming.connection")) { 085 String key1 = key.substring("java.naming.".length()); 086 environment1.put(key1, value); 087 } 088 else if (key.startsWith(Context.PROVIDER_URL)) { 089 // websphere administration console does not exept , character 090 // in provider url, so ; must be used 091 // all ; to , 092 value = value.replace(';', ','); 093 environment1.put(Context.PROVIDER_URL, value); 094 } 095 else { 096 environment1.put(key, value); 097 } 098 } 099 100 return environment1; 101 } 102 }