blob: bd6cfd4363999984ed5ee84b04aec7695a03e52d [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.qpid.tools;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.qpid.client.AMQConnectionFactory;
import org.apache.qpid.client.AMQDestination;
import org.apache.qpid.jms.FailoverPolicy;
public class JNDICheck
{
private static final String QUEUE = "queue.";
private static final String TOPIC = "topic.";
private static final String DESTINATION = "destination.";
private static final String CONNECTION_FACTORY = "connectionfactory.";
public static void main(String[] args)
{
if (args.length != 1)
{
usage();
}
String propertyFile = args[0];
new JNDICheck(propertyFile);
}
private static void usage()
{
exit("Usage: JNDICheck <JNDI Config file>", 0);
}
private static void exit(String message, int exitCode)
{
System.err.println(message);
System.exit(exitCode);
}
private static String JAVA_NAMING = "java.naming.factory.initial";
private Context _context = null;
private Hashtable _environment = null;
public JNDICheck(String propertyFile)
{
// Load JNDI properties
Properties properties = new Properties();
try(FileInputStream propertiesStream = new FileInputStream(new File(propertyFile)))
{
properties.load(propertiesStream);
}
catch (IOException e)
{
exit("Unable to open property file:" + propertyFile + ". Due to:" + e.getMessage(), 1);
}
//Create the initial context
try
{
System.setProperty(JAVA_NAMING, properties.getProperty(JAVA_NAMING));
_context = new InitialContext(properties);
_environment = _context.getEnvironment();
Enumeration keys = _environment.keys();
List<String> queues = new LinkedList<String>();
List<String> topics = new LinkedList<String>();
List<String> destinations = new LinkedList<String>();
List<String> connectionFactories = new LinkedList<String>();
while (keys.hasMoreElements())
{
String key = keys.nextElement().toString();
if (key.startsWith(QUEUE))
{
queues.add(key);
}
else if (key.startsWith(TOPIC))
{
topics.add(key);
}
else if (key.startsWith(DESTINATION))
{
destinations.add(key);
}
else if (key.startsWith(CONNECTION_FACTORY))
{
connectionFactories.add(key);
}
}
printHeader(propertyFile);
printEntries(QUEUE, queues);
printEntries(TOPIC, topics);
printEntries(DESTINATION, destinations);
printEntries(CONNECTION_FACTORY, connectionFactories);
}
catch (NamingException e)
{
exit("Unable to load JNDI Context due to:" + e.getMessage(), 1);
}
}
private void printHeader(String file)
{
print("JNDI file :" + file);
}
private void printEntries(String type, List<String> list)
{
if (list.size() > 0)
{
String name = type.substring(0, 1).toUpperCase() + type.substring(1, type.length() - 1);
print(name + " elements in file:");
printList(list);
print("");
}
}
private void printList(List<String> list)
{
for (String item : list)
{
String key = item.substring(item.indexOf('.') + 1);
try
{
print(key, _context.lookup(key));
}
catch (NamingException e)
{
exit("Error: item " + key + " no longer in context.", 1);
}
}
}
private void print(String key, Object object)
{
if (object instanceof AMQDestination)
{
print(key + ":" + object);
}
else if (object instanceof AMQConnectionFactory)
{
AMQConnectionFactory factory = (AMQConnectionFactory) object;
print(key + ":Connection");
print("ConnectionURL:");
print(factory.getConnectionURL().toString());
print("FailoverPolicy");
print(new FailoverPolicy(factory.getConnectionURL(),null).toString());
print("");
}
}
private void print(String msg)
{
System.out.println(msg);
}
}