blob: 1c9d8b0fd52163cd1dab4920df5909fa988d671c [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.jndi.referenceable;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Looksup a reference from a JNDI source.
* Given a properties file with the JNDI information and a binding string.
*/
public class Lookup
{
private static final String USAGE = "USAGE: java lookup <JNDI Properties file> -b <binding>";
private Properties _properties;
private Object _object;
public Lookup(String propertiesFile, String bindingValue) throws NamingException
{
// Set up the environment for creating the initial context
String qpid_home = System.getProperty("QPID_HOME");
if (qpid_home == null || qpid_home.equals(""))
{
System.out.println("QPID_HOME is not set");
System.exit(1);
}
if (qpid_home.charAt(qpid_home.length() - 1) != '/')
{
qpid_home += "/";
}
try
{
InputStream inputStream = new FileInputStream(qpid_home + propertiesFile);
Properties properties = new Properties();
properties.load(inputStream);
_properties = properties;
lookup(bindingValue);
}
catch (IOException ioe)
{
System.out.println("Unable to access properties file:" + propertiesFile + " Due to:" + ioe);
}
}
public Object lookup(String bindingValue) throws NamingException
{
// Create the initial context
Context ctx = new InitialContext(_properties);
// Perform the binds
_object = ctx.lookup(bindingValue);
// Close the context when we're done
ctx.close();
return getObject();
}
public Object getObject()
{
return _object;
}
private static String parse(String[] args, int index, String what)
{
try
{
return args[index];
}
catch (IndexOutOfBoundsException ioobe)
{
System.out.println("ERROR: No " + what + " specified.");
System.out.println(USAGE);
System.exit(1);
}
// The path is either return normally or exception.. which calls system exit so keep the compiler happy
return "Never going to happen";
}
public static void main(String[] args) throws NamingException
{
boolean exit = false;
String qpid_home = System.getProperty("QPID_HOME");
if (qpid_home == null || qpid_home.equals(""))
{
System.out.println("QPID_HOME is not set");
exit = true;
}
if (args.length <= 2)
{
System.out.println("At least a connection or connection factory must be requested to be bound.");
exit = true;
}
else
{
if ((args.length - 1) % 2 != 0)
{
System.out.println("Not all values have full details");
exit = true;
}
}
if (exit)
{
System.out.println(USAGE);
System.exit(1);
}
if (qpid_home.charAt(qpid_home.length() - 1) != '/')
{
qpid_home += "/";
}
for (int index = 1; index < args.length; index ++)
{
String obj = args[index];
if (obj.equals("-b"))
{
String binding = parse(args, ++index, "binding");
if (binding == null)
{
System.out.println("Binding not specified.");
System.exit(1);
}
else
{
System.out.print("Looking up:" + binding);
try
{
Lookup l = new Lookup(args[0], binding);
Object object = l.getObject();
if (object instanceof Connection)
{
try
{
((Connection) object).close();
}
catch (JMSException jmse)
{
;
}
}
}
catch (NamingException nabe)
{
System.out.println("Problem unbinding " + binding + " continuing with other values.");
}
}
}// if -b
else
{
System.out.println("Continuing with other bindings option not known:" + obj);
}
}//for
}//main
}//class