blob: a89f9c47b89f24c040b560b8a17327666572817c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.util;
import java.util.Hashtable;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* A JMS 1.1 log4j appender which uses JNDI to locate a JMS ConnectionFactory to
* use for logging events.
*
*
*/
public class JndiJmsLogAppender extends JmsLogAppenderSupport {
private String jndiName;
private String userName;
private String password;
private String initialContextFactoryName;
private String providerURL;
private String urlPkgPrefixes;
private String securityPrincipalName;
private String securityCredentials;
public JndiJmsLogAppender() {
}
public String getJndiName() {
return jndiName;
}
public void setJndiName(String jndiName) {
this.jndiName = jndiName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// to customize the JNDI context
// -------------------------------------------------------------------------
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 getUrlPkgPrefixes() {
return urlPkgPrefixes;
}
public void setUrlPkgPrefixes(String urlPkgPrefixes) {
this.urlPkgPrefixes = urlPkgPrefixes;
}
public String getSecurityPrincipalName() {
return securityPrincipalName;
}
public void setSecurityPrincipalName(String securityPrincipalName) {
this.securityPrincipalName = securityPrincipalName;
}
public String getSecurityCredentials() {
return securityCredentials;
}
public void setSecurityCredentials(String securityCredentials) {
this.securityCredentials = securityCredentials;
}
// Implementation methods
// -------------------------------------------------------------------------
protected Connection createConnection() throws JMSException, NamingException {
InitialContext context = createInitialContext();
// LogLog.debug("Looking up ConnectionFactory with jndiName: " + jndiName);
ConnectionFactory factory = (ConnectionFactory)context.lookup(jndiName);
if (factory == null) {
throw new JMSException("No such ConnectionFactory for name: " + jndiName);
}
if (userName != null) {
return factory.createConnection(userName, password);
} else {
return factory.createConnection();
}
}
protected InitialContext createInitialContext() throws NamingException {
if (initialContextFactoryName == null) {
return new InitialContext();
} else {
Hashtable<String, String> env = new Hashtable<String, String>();
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.");
}
}
// LogLog.debug("Looking up JNDI context with environment: " + env);
return new InitialContext(env);
}
}
}