blob: 1c86aea56c7dd3273f9ee0bdb522a8df08287e7d [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.config;
import org.apache.qpid.config.ConnectionFactoryInitialiser;
import org.apache.qpid.config.ConnectorConfig;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.MBeanException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NameNotFoundException;
import java.util.Hashtable;
public class JBossConnectionFactoryInitialiser implements ConnectionFactoryInitialiser
{
public ConnectionFactory getFactory(ConnectorConfig config) throws JMSException
{
ConnectionFactory cf = null;
InitialContext ic = null;
Hashtable ht = new Hashtable();
ht.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
String jbossHost = System.getProperty("jboss.host", "eqd-lxamq01");
String jbossPort = System.getProperty("jboss.port", "1099");
ht.put(InitialContext.PROVIDER_URL, "jnp://" + jbossHost + ":" + jbossPort);
ht.put(InitialContext.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
try
{
ic = new InitialContext(ht);
if (!doesDestinationExist("topictest.messages", ic))
{
deployTopic("topictest.messages", ic);
}
if (!doesDestinationExist("topictest.control", ic))
{
deployTopic("topictest.control", ic);
}
cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");
return cf;
}
catch (NamingException e)
{
JMSException jmse = new JMSException("Unable to lookup object: " + e);
jmse.setLinkedException(e);
jmse.initCause(e);
throw jmse;
}
catch (Exception e)
{
JMSException jmse = new JMSException("Error creating topic: " + e);
jmse.setLinkedException(e);
jmse.initCause(e);
throw jmse;
}
}
private boolean doesDestinationExist(String name, InitialContext ic) throws Exception
{
try
{
ic.lookup("/" + name);
}
catch (NameNotFoundException e)
{
return false;
}
return true;
}
private void deployTopic(String name, InitialContext ic) throws Exception
{
MBeanServerConnection mBeanServer = lookupMBeanServerProxy(ic);
ObjectName serverObjectName = new ObjectName("jboss.messaging:service=ServerPeer");
String jndiName = "/" + name;
try
{
mBeanServer.invoke(serverObjectName, "createTopic",
new Object[]{name, jndiName},
new String[]{"java.lang.String", "java.lang.String"});
}
catch (MBeanException e)
{
System.err.println("Error: " + e);
System.err.println("Cause: " + e.getCause());
}
}
private MBeanServerConnection lookupMBeanServerProxy(InitialContext ic) throws NamingException
{
return (MBeanServerConnection) ic.lookup("jmx/invoker/RMIAdaptor");
}
}