Package org.jboss.resource.metadata.repository

Source Code of org.jboss.resource.metadata.repository.DefaultJCAMetaDataRepository

/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.resource.metadata.repository;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.resource.spi.ActivationSpec;

import org.jboss.aop.microcontainer.aspects.jmx.JMX;
import org.jboss.logging.Logger;
import org.jboss.resource.deployment.AdminObject;
import org.jboss.resource.metadata.ConnectorMetaData;
import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup;
import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData;


/**
* A JCAMetaDataRepository.
*
* @author <a href="weston.price@jboss.org">Weston Price</a>
* @version $Revision: 82920 $
*/
@JMX(exposedInterface=JCAMetaDataRepository.class,name="jboss.jca:service=JCAMetaDataRepository,name=DefaultJCAMetaDataRepository")
public class DefaultJCAMetaDataRepository implements JCAMetaDataRepository, Serializable
{
   private static final Logger log = Logger.getLogger(DefaultJCAMetaDataRepository.class);

   /** The serialVersionUID */
   private static final long serialVersionUID = 244233303934974673L;
  
   private static final String DEFAULT_FORMATTER = DefaultJCAEntryFormatter.class.getName();
     
   private String formatterClassName;
   private JCAMetaDataEntryFormatter formatter;
  
   private Map<JCAConnectorMetaDataKey, JCAConnectorMetaDataEntry> connectors = new ConcurrentHashMap<JCAConnectorMetaDataKey, JCAConnectorMetaDataEntry>();
     
   public void setFormatterClassName(String formatterClassName)
   {
      if(formatterClassName != null)
      {
         if(this.formatterClassName != null && !this.formatterClassName.equals(formatterClassName))
         {
            loadFormatter(formatterClassName);
            this.formatterClassName = formatter.getClass().getName();
         }
           
      }else
      {
         this.formatterClassName = "org.jboss.resource.metadata.repository.DefaultJCAEntryFormatter";
         loadFormatter(this.formatterClassName);
      }  
   }
  
   public String getFormatterClassName()
   {
      return this.formatterClassName;
     
   }
  
   public void create() throws Exception
   {
      if(formatter == null && formatterClassName != null)
      {
         loadFormatter(formatterClassName);
        
      }else if(formatter == null && formatterClassName == null)
      {
         loadFormatter(DEFAULT_FORMATTER);              
      }
     
   }
  
   public void addConnectorMetaData(String name, ConnectorMetaData cmd)
   {
      JCAConnectorMetaDataKey key = new JCAConnectorMetaDataKey(name);
      key.setName(name);

      JCAConnectorMetaDataEntry entry = connectors.get(key);
     
      if(entry != null)
      {           
         entry.setConnectorMetaData(cmd);                    
         log.debug("Updated ConnectorMetaData for: "+name);
      }
      else
      {
         entry = new JCAConnectorMetaDataEntry();
         entry.setConnectorMetaData(cmd);
         log.debug("Added ConnectorMetaData for: "+name);
         connectors.put(key, entry);
      }
     
   }

   public ConnectorMetaData getConnectorMetaData(String name)
   {
      JCAConnectorMetaDataKey entry = new JCAConnectorMetaDataKey(name);
      entry.setName(name);
      ConnectorMetaData md = getConnectorMetaData(entry);     
      return md;
   }

   private ConnectorMetaData getConnectorMetaData(JCAConnectorMetaDataKey key)
   {
      JCAConnectorMetaDataEntry entry = connectors.get(key);
      return entry.getConnectorMetaData();     
   }
  
   public void addActivationSpec(String rarName, ActivationSpec spec)
   {
     
      JCAConnectorMetaDataKey key = new JCAConnectorMetaDataKey(rarName);
      addDeployment(key, JCADeploymentType.ACTIVATION_SPEC, spec);
           
   }
  
   public void addAdminObject(String rarName, AdminObject adminObject)
   {
      JCAConnectorMetaDataKey key = new JCAConnectorMetaDataKey(rarName);
      addDeployment(key, JCADeploymentType.ADMIN_OBJECT, adminObject);
     
   }
  
   public void addManagedConnectionFactoryDeploymentGroup(ManagedConnectionFactoryDeploymentGroup group)
   {
      List<ManagedConnectionFactoryDeploymentMetaData> mcf = group.getDeployments();
     
      for (ManagedConnectionFactoryDeploymentMetaData deployment : mcf)
      {
         JCAConnectorMetaDataKey key = new JCAConnectorMetaDataKey(deployment.getRarName());
         addDeployment(key, JCADeploymentType.MCF, deployment);
      }
     
   }
  
   @SuppressWarnings("unchecked")
   public Object listDeploymentsForConnector(String rarName)
   {
      Object results = null;
      JCAConnectorMetaDataKey key = new JCAConnectorMetaDataKey(rarName);     
      JCAConnectorMetaDataEntry entry = connectors.get(key);
     
      if(entry != null)
      {
         List<JCADeploymentMetaDataEntry> deployments = entry.getDeployments();
         results = formatter.formatEntries(deployments);
        
      }
      else
      {
         results = "No entries for ConnectorMetaData " + rarName;
      }
     
      return results;
   }
  
  
   private void addDeployment(JCAConnectorMetaDataKey key, JCADeploymentType deploymentType, Object deployment)
   {
     
      JCAConnectorMetaDataEntry entry = connectors.get(key);
     
      if(entry == null)
      {
         entry = new JCAConnectorMetaDataEntry();
         entry.addDeployment(deploymentType,deployment);
        
         connectors.put(key, entry);        
      }
     
      else
      {
         entry.addDeployment(deploymentType, deployment);        
      }
   }
  
   public int getActivationSpecCount()
   {
      return getCount(JCADeploymentType.ACTIVATION_SPEC);
   }
  
   public int getAdminObjectCount()
   {
      return getCount(JCADeploymentType.ADMIN_OBJECT);
   }

   public int getConnectorMetaDataCount()
   {
      int count = 0;
     
      synchronized (connectors)
      {
         for(Iterator<JCAConnectorMetaDataEntry> iter = connectors.values().iterator(); iter.hasNext();)
         {
            JCAConnectorMetaDataEntry entry = iter.next();
           
            if(entry.getConnectorMetaData() != null)
            {
               count++;              
            }
           
         }
      }
     
      return count;
   }

   public int getManagedConnectionFactoryCount()
   {
      return getCount(JCADeploymentType.MCF);     
   }

   private int getCount(JCADeploymentType deploymentType)
   {
      int count = 0;
     
      synchronized (connectors)
      {
         for(Iterator<JCAConnectorMetaDataEntry> iter = connectors.values().iterator(); iter.hasNext();)
         {
            JCAConnectorMetaDataEntry entry = iter.next();
           
            List<JCADeploymentMetaDataEntry> deployments = entry.getDeployments();
           
            for (JCADeploymentMetaDataEntry deployment : deployments)
            {
               if(deployment.getDeploymentType().equals(deploymentType))
               {
                  count++;
               }
            }           
         }
      }
     
      return count;     
   }
  
   private void loadFormatter(String name)
   {
     
      if(name != null)
      { 
         try
         {
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            Class clz = cl.loadClass(formatterClassName);
            formatter = (JCAMetaDataEntryFormatter)clz.newInstance();
            formatterClassName = name;
           
         }catch(Exception e)
         {
            log.trace("Could not formatter for classname " + formatterClassName + " using default.");
            formatter = new DefaultJCAEntryFormatter();
            formatterClassName = formatter.getClass().getName();
         }
        
      }
           
   }
}
TOP

Related Classes of org.jboss.resource.metadata.repository.DefaultJCAMetaDataRepository

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.