| 
					
				 | 
			
			
				@ -25,14 +25,7 @@ import org.apache.log4j.helpers.LogLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.log4j.spi.ErrorCode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.log4j.spi.LoggingEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.JMSException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.ObjectMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.Session; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.Topic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.TopicConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.TopicConnectionFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.TopicPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.TopicSession; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.jms.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.naming.Context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.naming.InitialContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.naming.NameNotFoundException; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -45,270 +38,240 @@ import java.util.Properties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * A simple appender that publishes events to a JMS Topic. The events 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * are serialized and transmitted as JMS message type {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * ObjectMessage}. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>JMS {@link Topic topics} and {@link TopicConnectionFactory topic 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * connection factories} are administered objects that are retrieved 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * using JNDI messaging which in turn requires the retrieval of a JNDI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * {@link Context}. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>There are two common methods for retrieving a JNDI {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Context}. If a file resource named <em>jndi.properties</em> is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * available to the JNDI API, it will use the information found 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * therein to retrieve an initial JNDI context. To obtain an initial 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * context, your code will simply call: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   <pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   InitialContext jndiContext = new InitialContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * InitialContext jndiContext = new InitialContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>Calling the no-argument <code>InitialContext()</code> method 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * will also work from within Enterprise Java Beans (EJBs) because it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * is part of the EJB contract for application servers to provide each 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * bean an environment naming context (ENC). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>In the second approach, several predetermined properties are set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * and these properties are passed to the <code>InitialContext</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * constructor to connect to the naming service provider. For example, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * to connect to JBoss naming service one would write: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				<pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Properties env = new Properties( ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   env.put(Context.PROVIDER_URL, "jnp://hostname:1099"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   InitialContext jndiContext = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				</pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * where <em>hostname</em> is the host where the JBoss application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * server is running. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * <p>To connect to the the naming service of Weblogic application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * server one would write: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				<pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Properties env = new Properties( ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   env.put(Context.PROVIDER_URL, "t3://localhost:7001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   InitialContext jndiContext = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				</pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * <p>Other JMS providers will obviously require different values. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * The initial JNDI context can be obtained by calling the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * no-argument <code>InitialContext()</code> method in EJBs. Only 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * clients running in a separate JVM need to be concerned about the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * <em>jndi.properties</em> file and calling {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * InitialContext#InitialContext()} or alternatively correctly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * setting the different properties before calling {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * InitialContext#InitialContext(java.util.Hashtable)} method. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   @author Ceki Gülcü */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Properties env = new Properties( ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * env.put(Context.PROVIDER_URL, "jnp://hostname:1099"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * InitialContext jndiContext = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * where <em>hostname</em> is the host where the JBoss application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * server is running. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>To connect to the the naming service of Weblogic application 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * server one would write: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Properties env = new Properties( ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * env.put(Context.PROVIDER_URL, "t3://localhost:7001"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * InitialContext jndiContext = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * </pre> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p>Other JMS providers will obviously require different values. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <p> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * The initial JNDI context can be obtained by calling the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * no-argument <code>InitialContext()</code> method in EJBs. Only 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * clients running in a separate JVM need to be concerned about the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * <em>jndi.properties</em> file and calling {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * InitialContext#InitialContext()} or alternatively correctly 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * setting the different properties before calling {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * InitialContext#InitialContext(java.util.Hashtable)} method. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * @author Ceki Gülcü 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class JMSAppender extends AppenderSkeleton { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  boolean locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  TopicConnection  topicConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  TopicSession topicSession; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  TopicPublisher  topicPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  JMSAppender() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     The <b>TopicConnectionFactoryBindingName</b> option takes a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     string value. Its value will be used to lookup the appropriate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <code>TopicConnectionFactory</code> from the JNDI context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  void setTopicConnectionFactoryBindingName(String tcfBindingName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.tcfBindingName = tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Returns the value of the <b>TopicConnectionFactoryBindingName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String getTopicConnectionFactoryBindingName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     The <b>TopicBindingName</b> option takes a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     string value. Its value will be used to lookup the appropriate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     <code>Topic</code> from the JNDI context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  void setTopicBindingName(String topicBindingName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.topicBindingName = topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Returns the value of the <b>TopicBindingName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String getTopicBindingName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Returns value of the <b>LocationInfo</b> property which 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     determines whether location (stack) info is sent to the remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     subscriber. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  boolean getLocationInfo() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   *  Options are activated and become effective only after calling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   *  this method.*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void activateOptions() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    TopicConnectionFactory  topicConnectionFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Context jndi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Getting initial context."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      if(initialContextFactoryName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					Properties env = new Properties( ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactoryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					if(providerURL != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  env.put(Context.PROVIDER_URL, providerURL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  LogLog.warn("You have set InitialContextFactoryName option but not the " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						     +"ProviderURL. This is likely to cause problems."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					if(urlPkgPrefixes != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  env.put(Context.URL_PKG_PREFIXES, urlPkgPrefixes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					if(securityPrincipalName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  env.put(Context.SECURITY_PRINCIPAL, securityPrincipalName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  if(securityCredentials != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    env.put(Context.SECURITY_CREDENTIALS, securityCredentials); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					    LogLog.warn("You have set SecurityPrincipalName option but not the " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							+"SecurityCredentials. This is likely to cause problems."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					jndi = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					jndi = new InitialContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private boolean locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private TopicConnection topicConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private TopicSession topicSession; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private TopicPublisher topicPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JMSAppender() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Looking up ["+tcfBindingName+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      topicConnectionFactory = (TopicConnectionFactory) lookup(jndi, tcfBindingName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("About to create TopicConnection."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      if(userName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					topicConnection = topicConnectionFactory.createTopicConnection(userName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
												       password); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					topicConnection = topicConnectionFactory.createTopicConnection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the value of the <b>TopicConnectionFactoryBindingName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getTopicConnectionFactoryBindingName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Creating TopicSession, non-transactional, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
						   +"in AUTO_ACKNOWLEDGE mode."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      topicSession = topicConnection.createTopicSession(false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
											Session.AUTO_ACKNOWLEDGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Looking up topic name ["+topicBindingName+"]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Topic topic = (Topic) lookup(jndi, topicBindingName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Creating TopicPublisher."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      topicPublisher = topicSession.createPublisher(topic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.debug("Starting TopicConnection."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      topicConnection.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      jndi.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(JMSException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error("Error while activating options for appender named ["+name+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							 "].", e, ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(NamingException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error("Error while activating options for appender named ["+name+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							 "].", e, ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error("Error while activating options for appender named ["+name+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							 "].", e, ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * The <b>TopicConnectionFactoryBindingName</b> option takes a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * string value. Its value will be used to lookup the appropriate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * <code>TopicConnectionFactory</code> from the JNDI context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setTopicConnectionFactoryBindingName(String tcfBindingName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.tcfBindingName = tcfBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected Object lookup(Context ctx, String name) throws NamingException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      return ctx.lookup(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(NameNotFoundException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.error("Could not find name ["+name+"]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      throw e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the value of the <b>TopicBindingName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getTopicBindingName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected boolean checkEntryConditions() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    String fail = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * The <b>TopicBindingName</b> option takes a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * string value. Its value will be used to lookup the appropriate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * <code>Topic</code> from the JNDI context. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setTopicBindingName(String topicBindingName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.topicBindingName = topicBindingName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if(this.topicConnection == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      fail = "No TopicConnection"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } else if(this.topicSession == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      fail = "No TopicSession"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } else if(this.topicPublisher == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      fail = "No TopicPublisher"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns value of the <b>LocationInfo</b> property which 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * determines whether location (stack) info is sent to the remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * subscriber. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean getLocationInfo() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if(fail != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error(fail +" for JMSAppender named ["+name+"]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * If true, the information sent to the remote subscriber will 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * include caller's location information. By default no location 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * information is sent to the subscriber. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setLocationInfo(boolean locationInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.locationInfo = locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Close this JMSAppender. Closing releases all resources used by the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     appender. A closed appender cannot be re-opened. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public synchronized void close() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // The synchronized modifier avoids concurrent append and close operations 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Options are activated and become effective only after calling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * this method. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void activateOptions() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        TopicConnectionFactory topicConnectionFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Context jndi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Getting initial context."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (initialContextFactoryName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                Properties env = new Properties(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactoryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (providerURL != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    env.put(Context.PROVIDER_URL, providerURL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    LogLog.warn("You have set InitialContextFactoryName option but not the " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + "ProviderURL. This is likely to cause problems."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (urlPkgPrefixes != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    env.put(Context.URL_PKG_PREFIXES, urlPkgPrefixes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (securityPrincipalName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    env.put(Context.SECURITY_PRINCIPAL, securityPrincipalName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if (securityCredentials != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        env.put(Context.SECURITY_CREDENTIALS, securityCredentials); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        LogLog.warn("You have set SecurityPrincipalName option but not the " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                + "SecurityCredentials. This is likely to cause problems."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                jndi = new InitialContext(env); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                jndi = new InitialContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Looking up [" + tcfBindingName + "]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            topicConnectionFactory = (TopicConnectionFactory) lookup(jndi, tcfBindingName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("About to create TopicConnection."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (userName != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                topicConnection = topicConnectionFactory.createTopicConnection(userName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        password); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                topicConnection = topicConnectionFactory.createTopicConnection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Creating TopicSession, non-transactional, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    + "in AUTO_ACKNOWLEDGE mode."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            topicSession = topicConnection.createTopicSession(false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    Session.AUTO_ACKNOWLEDGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Looking up topic name [" + topicBindingName + "]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Topic topic = (Topic) lookup(jndi, topicBindingName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Creating TopicPublisher."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            topicPublisher = topicSession.createPublisher(topic); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.debug("Starting TopicConnection."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            topicConnection.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            jndi.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (JMSException | NamingException | RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            errorHandler.error("Error while activating options for appender named [" + name + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "].", e, ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if(this.closed) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Close this JMSAppender. Closing releases all resources used by the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * appender. A closed appender cannot be re-opened. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public synchronized void close() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // The synchronized modifier avoids concurrent append and close operations 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (this.closed) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        LogLog.debug("Closing appender [" + name + "]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.closed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (topicSession != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                topicSession.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (topicConnection != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                topicConnection.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (JMSException | RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.error("Error while closing JMSAppender [" + name + "].", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // Help garbage collection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        topicPublisher = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        topicSession = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        topicConnection = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    LogLog.debug("Closing appender ["+name+"]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.closed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * This method called by {@link AppenderSkeleton#doAppend} method to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * do most of the real appending work. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void append(LoggingEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      if(topicSession != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					topicSession.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      if(topicConnection != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
					topicConnection.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(JMSException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.error("Error while closing JMSAppender ["+name+"].", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      LogLog.error("Error while closing JMSAppender ["+name+"].", e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // Help garbage collection 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    topicPublisher = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    topicSession = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    topicConnection = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     This method called by {@link AppenderSkeleton#doAppend} method to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     do most of the real appending work.  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void append(LoggingEvent event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    if(!checkEntryConditions()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!checkEntryConditions()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      if (StringUtil.isEmpty(event.getMDC("camel.messageId"))) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -341,125 +304,140 @@ public class JMSAppender extends AppenderSkeleton { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        msg.setObject(JSONObject.fromObject(map).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        topicPublisher.publish(msg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(JMSException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error("Could not publish message in JMSAppender ["+name+"].", e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							 ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } catch(JMSException | RuntimeException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      errorHandler.error("Could not publish message in JMSAppender ["+name+"].", e, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
							 ErrorCode.GENERIC_FAILURE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * Returns the value of the <b>InitialContextFactoryName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * See {@link #setInitialContextFactoryName} for more details on the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * meaning of this option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getInitialContextFactoryName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setInitialContextFactoryName(String initialContextFactoryName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.initialContextFactoryName = initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getProviderURL() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setProviderURL(String providerURL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.providerURL = providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  String getURLPkgPrefixes( ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setURLPkgPrefixes(String urlPkgPrefixes ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.urlPkgPrefixes = urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getSecurityCredentials() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setSecurityCredentials(String securityCredentials) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.securityCredentials = securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getSecurityPrincipalName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setSecurityPrincipalName(String securityPrincipalName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.securityPrincipalName = securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getUserName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * The user name to use when {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * TopicConnectionFactory#createTopicConnection(String, String) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * creating a topic session}.  If you set this option, you should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * also set the <b>Password</b> option. See {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * #setPassword(String)}. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setUserName(String userName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.userName = userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public String getPassword() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * The paswword to use when creating a topic session.   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setPassword(String password) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      If true, the information sent to the remote subscriber will 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      include caller's location information. By default no location 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      information is sent to the subscriber.  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public void setLocationInfo(boolean locationInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    this.locationInfo = locationInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * Returns the TopicConnection used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected TopicConnection  getTopicConnection() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return topicConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * Returns the TopicSession used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected TopicSession  getTopicSession() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return topicSession; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * Returns the TopicPublisher used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  protected TopicPublisher  getTopicPublisher() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return topicPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * The JMSAppender sends serialized events and consequently does not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * require a layout. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public boolean requiresLayout() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the value of the <b>InitialContextFactoryName</b> option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * See {@link #setInitialContextFactoryName} for more details on the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * meaning of this option. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getInitialContextFactoryName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setInitialContextFactoryName(String initialContextFactoryName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.initialContextFactoryName = initialContextFactoryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getProviderURL() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setProviderURL(String providerURL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.providerURL = providerURL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getSecurityCredentials() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setSecurityCredentials(String securityCredentials) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.securityCredentials = securityCredentials; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getSecurityPrincipalName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setSecurityPrincipalName(String securityPrincipalName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.securityPrincipalName = securityPrincipalName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getUserName() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * The user name to use when {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * TopicConnectionFactory#createTopicConnection(String, String) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * creating a topic session}.  If you set this option, you should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * also set the <b>Password</b> option. See {@link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * #setPassword(String)}. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setUserName(String userName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.userName = userName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getPassword() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * The paswword to use when creating a topic session. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setPassword(String password) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * The JMSAppender sends serialized events and consequently does not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * require a layout. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean requiresLayout() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    protected Object lookup(Context ctx, String name) throws NamingException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return ctx.lookup(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (NameNotFoundException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            LogLog.error("Could not find name [" + name + "]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw e; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    protected boolean checkEntryConditions() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String fail = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (this.topicConnection == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fail = "No TopicConnection"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (this.topicSession == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fail = "No TopicSession"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (this.topicPublisher == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fail = "No TopicPublisher"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (fail != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            errorHandler.error(fail + " for JMSAppender named [" + name + "]."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the TopicConnection used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    protected TopicConnection getTopicConnection() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return topicConnection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the TopicSession used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    protected TopicSession getTopicSession() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return topicSession; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * Returns the TopicPublisher used for this appender.  Only valid after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * activateOptions() method has been invoked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    protected TopicPublisher getTopicPublisher() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return topicPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    String getURLPkgPrefixes() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void setURLPkgPrefixes(String urlPkgPrefixes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        this.urlPkgPrefixes = urlPkgPrefixes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |