/* * Licensed 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 hermes.ext.arjuna; import hermes.Domain; import hermes.Hermes; import hermes.HermesAdmin; import hermes.HermesException; import hermes.JNDIConnectionFactory; import hermes.config.DestinationConfig; import hermes.ext.HermesAdminSupport; import java.util.ArrayList; import java.util.Collection; import java.util.Hashtable; import java.util.Map; import javax.jms.JMSException; import javax.jms.QueueConnectionFactory; import javax.jms.TopicConnectionFactory; import javax.naming.Context; import javax.naming.NamingException; import org.apache.log4j.Logger; import com.arjuna.ams.admin.Admin; import com.arjuna.ams.admin.AdminException; import com.arjuna.ams.admin.AuthorizationAdminException; import com.arjuna.ams.admin.StatisticalProperties; /** * Administration plugin for ArjunaMS. * * @author arnaud.simon@arjuna.com, colincrist@hermesjms.com last changed by: $Author: colincrist $ * @version $Id: ArjunaMSAdmin.java,v 1.8 2005/08/15 20:37:32 colincrist Exp $ */ public class ArjunaMSAdmin extends HermesAdminSupport implements HermesAdmin { private static final Logger log = Logger.getLogger(ArjunaMSAdmin.class); private static final String NAME = "Name"; private Context context; private Admin admin; private ArjunaMSAdminFactory factory; /** * */ public ArjunaMSAdmin(Hermes hermes, ArjunaMSAdminFactory factory, Context context) { super(hermes); this.context = context; this.factory = factory; } /** * Lookup the admin from JNDI as needed. * * @return * @throws JMSException */ protected synchronized Admin getAdmin() throws JMSException { try { if (admin == null) { admin = (Admin) context.lookup(factory.getAdminBinding()); } } catch (NamingException ex) { throw new HermesException(ex); } return admin ; } /* (non-Javadoc) * @see hermes.HermesAdmin#getDepth(javax.jms.Destination) */ public int getDepth(DestinationConfig dest) throws JMSException { try { final Map stats = getAdmin().getDestinationStatistics(getRealDestinationName(dest)); return ((Integer) stats.get(StatisticalProperties.NUM_MESSAGES_OUTSTANDING)).intValue(); } catch (AdminException e) { throw new HermesException(e); } } /* (non-Javadoc) * @see hermes.HermesAdmin#close() */ public void close() throws JMSException { if (admin != null) { admin.close(); admin = null; } } public Map getStatistics(DestinationConfig destination) throws JMSException { try { return getAdmin().getDestinationStatistics(getRealDestinationName(destination)); } catch (Exception e) { throw new HermesException(e); } } private DestinationConfig createDestinationConfig(Hashtable info, Domain domain) { DestinationConfig dConfig = new DestinationConfig(); String name = (String) info.get(NAME); dConfig.setName(name); dConfig.setDomain(domain.getId()); return dConfig ; } public Collection discoverDestinationConfigs() throws JMSException { try { if (getHermes().getConnectionFactory() instanceof JNDIConnectionFactory) { return super.discoverDestinationConfigs() ; } Collection rval = new ArrayList(); if (getHermes().getConnectionFactory() instanceof QueueConnectionFactory) { Hashtable[] queueDetails = getAdmin().getAllQueuesDetails(); for (int i = 0; i < queueDetails.length; i++) { Hashtable t = (Hashtable) queueDetails[i]; rval.add(createDestinationConfig(t, Domain.QUEUE)); } } else if (getHermes().getConnectionFactory() instanceof TopicConnectionFactory) { Hashtable[] topicDetails = getAdmin().getAllTopicsDetails(); for (int i = 0; i < topicDetails.length; i++) { Hashtable t = (Hashtable) topicDetails[i]; rval.add(createDestinationConfig(t, Domain.TOPIC)); rval.addAll(discoverDurableSubscriptions((String) t.get(NAME), null)) ; } } return rval; } catch (AuthorizationAdminException e) { throw new HermesException(e); } catch (AdminException e) { throw new HermesException(e); } } }