Package org.jboss.resource.deployers

Source Code of org.jboss.resource.deployers.DataSourceDeployerHelper

/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt 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.deployers;

import java.util.ArrayList;
import java.util.List;

import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.logging.Logger;
import org.jboss.metadata.javaee.spec.DataSourceMetaData;
import org.jboss.metadata.javaee.spec.PropertyMetaData;
import org.jboss.reloaded.naming.deployers.javaee.JavaEEComponentInformer;
import org.jboss.resource.metadata.mcf.ConnectionPoolMetaData;
import org.jboss.resource.metadata.mcf.DataSourceConnectionPropertyMetaData;
import org.jboss.resource.metadata.mcf.DataSourceDeploymentMetaData;
import org.jboss.resource.metadata.mcf.LocalDataSourceDeploymentMetaData;
import org.jboss.resource.metadata.mcf.NoTxDataSourceDeploymentMetaData;
import org.jboss.resource.metadata.mcf.NonXADataSourceDeploymentMetaData;

/**
* Simple helper class for generating DataSourceDeploymentMetaData from a DataSourceDefinition as provided by EE5.17.
* @author Weston M. Price
*
*/
public class DataSourceDeployerHelper {

  private static final Logger logger = Logger.getLogger(DataSourceDeployerHelper.class);

  private static final List<String> scopes = new ArrayList<String>();
 
  static
  {
    scopes.add("app");
    scopes.add("global");
    scopes.add("module");
    scopes.add("comp");
   
  }
 
   public static String normalizeJndiName(DataSourceMetaData dsmd, DeploymentUnit unit, JavaEEComponentInformer informer)
   {
      // If it starts with some namespace (like java:comp, java:module, java:app or java:global)
      // then return as is
      String refName = dsmd.getName();
      if (refName.startsWith("java:comp/") || refName.startsWith("java:module/") || refName.startsWith("java:app/")
            || refName.startsWith("java:global/"))
      {
         return normalizeJndiName(refName, unit, informer);
      }
      else
      {
         // the reference name *doesn't* start with any namespace. So prefix a "env" before the
         // name and return
         return normalizeJndiName("env/" + refName, unit, informer);
      }

   }
 
  public static String normalizeJndiName(String dsJndiName, DeploymentUnit unit, JavaEEComponentInformer informer)
    {
        String jndiName = normalizeJndiName(dsJndiName);
        StringBuffer internalJndiName = new StringBuffer();
        String dsName = jndiName;
       
        if(jndiName.indexOf("/") != -1 && scopes.contains(jndiName.substring(0, jndiName.indexOf("/"))))
        {                      
            dsName = jndiName.substring(jndiName.indexOf("/") + 1, jndiName.length());
        }
        internalJndiName.append("internal/" + informer.getApplicationName(unit) + "/" + informer.getModuleName(unit) + "/");
       
        if(informer.isJavaEEComponent(unit))
        {
            internalJndiName.append(informer.getComponentName(unit) + "/");
        }
                   
        return internalJndiName.append(dsName).toString();
       
    }
 
   
  public static DataSourceDeploymentMetaData createDeployment(final DataSourceMetaData dsmd)
  {
    NonXADataSourceDeploymentMetaData deploymentMetaData = null;
   
    if(dsmd.isTransactional())
    {
      deploymentMetaData= new LocalDataSourceDeploymentMetaData();
    }
    else
    {
      deploymentMetaData = new NoTxDataSourceDeploymentMetaData();
    }
   
    List<DataSourceConnectionPropertyMetaData> connectionProps = deploymentMetaData.getDataSourceConnectionProperties();

    boolean useUrl = true;

    String serverName = dsmd.getServerName();
    String dataBaseName = dsmd.getDatabaseName();
    int portNumber = dsmd.getPortNumber();
    String url = dsmd.getUrl();
   
    DataSourceConnectionPropertyMetaData connectionProp = null;
   
    if(serverName != null && !serverName.isEmpty())
    {
      useUrl = false;
      connectionProp = new DataSourceConnectionPropertyMetaData();
      connectionProp.setName("serverName");
      connectionProp.setValue(serverName);
      connectionProps.add(connectionProp);
    }
   
    if(dataBaseName != null && !dataBaseName.isEmpty())
    {
      useUrl = false;
      connectionProp = new DataSourceConnectionPropertyMetaData();
      connectionProp.setName("databaseName");
      connectionProp.setValue(dataBaseName);         
      connectionProps.add(connectionProp);
    }
   
    if(portNumber > -1)
    {
      useUrl = false;
      connectionProp = new DataSourceConnectionPropertyMetaData();
      connectionProp.setName("portNumber");
      connectionProp.setValue(String.valueOf(portNumber));         
      connectionProps.add(connectionProp);     
    }
   
    connectionProp = new DataSourceConnectionPropertyMetaData();
    connectionProp.setName("loginTimeout");
    connectionProp.setValue(String.valueOf(dsmd.getLoginTimeout()));
    connectionProps.add(connectionProp);
           
    if(useUrl)
    {
      deploymentMetaData.setConnectionUrl(url);
    }
    else
    {
      //Hack for EE5.17 we are going to use the new DataSource rar to manage data sources that do not specify a Url, or specify properties
      //within the deployment ie serverName, dataBaseName etc. This is largely to reduce the number of changes required to support
      //this particular section in the spec.
      deploymentMetaData.setUseDataSource(true);
      logger.debug("Creating data source using standard JDBC4 based properties.");
    }

    deploymentMetaData.setDriverClass(dsmd.getClassName());
    deploymentMetaData.setUserName(dsmd.getUser());
    deploymentMetaData.setPassWord(dsmd.getPassword());
   
    if(dsmd.getIsolationLevel() != null)
    {
      deploymentMetaData.setTransactionIsolation(dsmd.getIsolationLevel().toString());       
    }
   
    if(dsmd.getMaxStatements() > -1)
    {
      deploymentMetaData.setPreparedStatementCacheSize(dsmd.getMaxStatements());       
    }
   
    ConnectionPoolMetaData cpmd = (ConnectionPoolMetaData)deploymentMetaData;
   
    if(dsmd.getMinPoolSize() != -1)
    {
      cpmd.setMinSize(dsmd.getMinPoolSize());       
    }
    if(dsmd.getMaxPoolSize() != -1)
    {
      cpmd.setMaxSize(dsmd.getMaxPoolSize());       
    }

    cpmd.setIdleTimeoutMinutes(dsmd.getMaxIdleTime() / 60);     

   
    if(dsmd.getProperties() != null && dsmd.getProperties().keySet().size() > 0)
    {
      for(String key: dsmd.getProperties().keySet())
      {
        PropertyMetaData pmd = dsmd.getProperties().get(key);
        connectionProp = new DataSourceConnectionPropertyMetaData();
        connectionProp.setName(pmd.getName());
        connectionProp.setValue(pmd.getValue());
        connectionProps.add(connectionProp);
      }
     
    }
   
   
    return deploymentMetaData;
  }
 
  private static String normalizeJndiName(String jndiName)
  {

    if(jndiName != null)
    {
      if(jndiName.contains("java:"))
      {
        return jndiName.replace("java:", "").trim();
      }
    }
   
    return jndiName;
   
  }
 
}
TOP

Related Classes of org.jboss.resource.deployers.DataSourceDeployerHelper

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.