Package railo.runtime.services

Source Code of railo.runtime.services.DataSourceServiceImpl

package railo.runtime.services;

import java.io.IOException;
import java.sql.SQLException;

import railo.commons.io.res.Resource;
import railo.commons.io.res.filter.ExtensionResourceFilter;
import railo.commons.io.res.util.ResourceUtil;
import railo.runtime.PageContext;
import railo.runtime.config.ConfigWebAdmin;
import railo.runtime.db.DataSourceManager;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.exp.SecurityException;
import railo.runtime.functions.list.ListFirst;
import railo.runtime.type.Array;
import railo.runtime.type.ArrayImpl;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.util.KeyConstants;
import coldfusion.server.DataSourceService;
import coldfusion.server.ServiceException;
import coldfusion.sql.DataSource;

public class DataSourceServiceImpl extends ServiceSupport implements DataSourceService {

  private Number maxQueryCount=new Double(500);
 


  public Struct getDefaults() {
    Struct sct=new StructImpl();
    sct.setEL("alter",Boolean.TRUE);
    sct.setEL("blob_buffer",new Double(64000));
    sct.setEL("buffer",new Double(64000));
    sct.setEL("create",Boolean.TRUE);
    sct.setEL("delete",Boolean.TRUE);
    sct.setEL("disable",Boolean.FALSE);
    sct.setEL("disable_blob",Boolean.TRUE);
    sct.setEL("disable_clob",Boolean.TRUE);
    sct.setEL("drop",Boolean.TRUE);
    sct.setEL("grant",Boolean.TRUE);
    sct.setEL("insert",Boolean.TRUE);
    sct.setEL("pooling",Boolean.TRUE);
    sct.setEL("revoke",Boolean.TRUE);
    sct.setEL("select",Boolean.TRUE);
    sct.setEL("storedproc",Boolean.TRUE);
    sct.setEL("update",Boolean.TRUE);
    sct.setEL("",Boolean.TRUE);
    sct.setEL("",Boolean.TRUE);
    sct.setEL("",Boolean.TRUE);
    sct.setEL("interval",new Double(420));
    sct.setEL("login_timeout",new Double(30));
    sct.setEL("timeout",new Double(1200));

    return sct;
  }

  public Number getMaxQueryCount() {
    return maxQueryCount;
  }

  public void setMaxQueryCount(Number maxQueryCount) {
    this.maxQueryCount=maxQueryCount;
  }

  public String encryptPassword(String pass) {
    throw new PageRuntimeException(new ServiceException("method [encryptPassword] is not supported for datasource service"));
    //return pass;
  }

  @Override
  public String getDbdir() {
    Resource db = config().getConfigDir().getRealResource("db");
    if(!db.exists())db.createNewFile();
    return db.getPath();
  }

  @Override
  public Object getCachedQuery(String key) {
    throw new PageRuntimeException(new ServiceException("method [getQueryCache] is not supported for datasource service"));
    //pageContext.getQueryCache().getQuery(sql,datasource,username,password,cachedafter)
    // return null;
  }

  @Override
  public void setCachedQuery(String arg0, Object arg1) {
    throw new PageRuntimeException(new ServiceException("method [setQueryCache] is not supported for datasource service"));
  }

  @Override
  public void purgeQueryCache() throws IOException {
    PageContext pc = pc();
    if(pc!=null)pc.getQueryCache().clearUnused(pc);

  }

  @Override
  public boolean disableConnection(String name) {return false;}

  @Override
  public boolean isJadoZoomLoaded() {return false;}



  public Struct getDrivers() throws ServiceException, SecurityException {
    checkReadAccess();
    Struct rtn=new StructImpl();
    Struct driver;
   
    try {
      Resource railoContext = ResourceUtil.toResourceExisting(pc() ,"/railo-context/admin/dbdriver/");
      Resource[] children = railoContext.listResources(new ExtensionResourceFilter("cfc"));
        
        String name;
        for(int i=0;i<children.length;i++) {
          driver=new StructImpl();
          name=ListFirst.call(pc(),children[i].getName(),".");
          driver.setEL(KeyConstants._name,name);
          driver.setEL("handler",children[i].getName());
          rtn.setEL(name,driver);
        }
   
   
    } catch (ExpressionException e) {
      throw new ServiceException(e.getMessage());
    }
     
     
   
    return rtn;
  }
 
  public Struct getDatasources() throws SecurityException {// MUST muss struct of struct zur�ckgeben!!!
    checkReadAccess();
    railo.runtime.db.DataSource[] sources = config().getDataSources();
    Struct rtn=new StructImpl();
    for(int i=0;i<sources.length;i++) {
      rtn.setEL(sources[i].getName(),new DataSourceImpl(sources[i]));
    }
    return rtn;
  }
 
  public Array getNames() throws SecurityException {
    checkReadAccess();
    railo.runtime.db.DataSource[] sources = config().getDataSources();
    Array names=new ArrayImpl();
    for(int i=0;i<sources.length;i++) {
      names.appendEL(sources[i].getName());
    }
    return names;
  }

  public void removeDatasource(String name) throws SQLException, SecurityException {
    checkWriteAccess();
    try {
      ConfigWebAdmin admin = ConfigWebAdmin.newInstance(config(),"");
      admin.removeDataSource(name);
    } catch (Exception e) {
      // ignoriert wenn die db nicht existiert
    }
  }



  public boolean verifyDatasource(String name) throws SQLException, SecurityException {
    checkReadAccess();
    railo.runtime.db.DataSource d = _getDatasource(name);
    PageContext pc = pc();
    DataSourceManager manager = pc.getDataSourceManager();
      try {
      manager.releaseConnection(pc,manager.getConnection(pc,name, d.getUsername(), d.getPassword()));
      return true;
    } catch (PageException e) {
      return false;
    }
  }
 
  public DataSource getDatasource(String name) throws SQLException, SecurityException {
    return new DataSourceImpl(_getDatasource(name));
  }

  private railo.runtime.db.DataSource _getDatasource(String name) throws SQLException, SecurityException {
    checkReadAccess();
    name=name.trim();
    railo.runtime.db.DataSource[] sources = config().getDataSources();
    for(int i=0;i<sources.length;i++) {
      if(sources[i].getName().equalsIgnoreCase(name))return sources[i];
    }
    throw new SQLException("no datasource with name ["+name+"] found");
  }
}
TOP

Related Classes of railo.runtime.services.DataSourceServiceImpl

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.