openesb-components/ojc-core/databasebc/databasebcimpl/src/org/glassfish/openesb/databasebc/model/runtime/DataBases.java

302 lines
12 KiB
Java

/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://open-jbi-components.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://open-jbi-components.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(#)DataBases.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package org.glassfish.openesb.databasebc.model.runtime;
import com.sun.jbi.internationalization.Messages;
import java.lang.reflect.InvocationTargetException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.component.ComponentContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.*;
import javax.sql.XADataSource;
public enum DataBases {
DERBY,ORACLE,DB2,SQLSERVER,VSAM,MYSQL;
DBConnectionInfo mdbConnectionInfo = null;
private static final Logger mLogger = Logger.getLogger(DataBases.class.getName());
private static final Messages mMessages = Messages.getMessages(DataBases.class);
public int dbType() {
return ordinal();
}
@Override
public String toString() {
switch (this) {
case DERBY:
return "DERBY";
case ORACLE:
return "ORACLE";
case DB2:
return "DB2";
case SQLSERVER:
return "SQLSERVER";
case VSAM:
return "VSAM";
case MYSQL:
return "MYSQL";
}
return null;
}
public Class getXADataSourceClass() throws ClassNotFoundException {
switch (this) {
case DERBY:
return Class.forName("org.apache.derby.jdbc.ClientXADataSource");
case ORACLE:
return Class.forName("oracle.jdbc.xa.client.OracleXADataSource");
case DB2:
return Class.forName("com.ibm.db2.jdbc.DB2XADataSource");
case SQLSERVER:
return Class.forName("com.ddtek.jdbcx.sqlserver.SQLServerDataSource");
}
return null;
}
public Class getDataSourceClass() throws ClassNotFoundException {
switch (this) {
case DERBY:
return Class.forName("org.apache.derby.jdbc.ClientDataSource");
case ORACLE:
return Class.forName("oracle.jdbc.pool.OracleDataSource");
case DB2:
return Class.forName("com.SeeBeyond.db2.jdbcx.db2.DB2DataSource");
case SQLSERVER:
return Class.forName("com.SeeBeyond.sqlserver.jdbcx.sqlserver.SQLServerDataSource");
}
return null;
}
public Object buildDataSource() throws ClassNotFoundException , Exception{
Class dsClass = null;
if (mdbConnectionInfo.getXAEnabled().equalsIgnoreCase("XATransaction"))
dsClass = getXADataSourceClass();
else
dsClass = getDataSourceClass();
return buildDataSource(dsClass);
}
public Object buildDataSource(final Class dsclass) throws ClassNotFoundException, Exception {
try {
final Object dataSourceInstance = dsclass.newInstance();
final Class[] stringParam = new Class[] {String.class};
final Class[] intParam = new Class[]{int.class};
if (this == DERBY) {
dsclass.getMethod("setServerName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getServerName() });
dsclass
.getMethod("setPortNumber", new Class[] { int.class })
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPortNumber() });
dsclass.getMethod("setDatabaseName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getDatabaseOrSchemaName() });
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPassword() });
} else if (this == ORACLE) {
dsclass.getMethod("setURL", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getDbUrl()});
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPassword() });
} else if (this == DB2) {
dsclass.getMethod("setServerName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getServerName()});
dsclass.getMethod("setPortNumber", intParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPortNumber()});
dsclass.getMethod("setDatabaseName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getDatabaseOrSchemaName()});
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPassword() });
} else if (this == SQLSERVER) {
dsclass.getMethod("setServerName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getServerName()});
dsclass.getMethod("setPortNumber", intParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPortNumber()});
dsclass.getMethod("setDatabaseName", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getDatabaseOrSchemaName()});
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { mdbConnectionInfo.getPassword() });
}
return dataSourceInstance;
} catch (final IllegalAccessException iae) {
mLogger.log(Level.SEVERE,"Illegal Access Exception While Dealing with Driver class",iae);
} catch (final NoSuchMethodException nsme) {
mLogger.log(Level.SEVERE,"No Such Method Exception While Dealing with Driver class",nsme);
} catch (final InvocationTargetException ite) {
mLogger.log(Level.SEVERE,"Invocation Target Exception While Dealing with Driver class",ite);
} catch (final InstantiationException ie) {
mLogger.log(Level.SEVERE," Exception While Instantiating the Driver class",ie);
}
return null;
}
/*public Object buildXADataSource() {
try {
final Class dsclass = getXADataSourceClass();
final Object dataSourceInstance = dsclass.newInstance();
final Class[] stringParam = new Class[] { String.class };
final Class[] stringParams = new Class[] {String.class,String.class};
if (this == DERBY) {
dsclass.getMethod("setServerName", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getServerName() });
dsclass.getMethod("setPortNumber", new Class[] { int.class })
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getPortNumber() });
dsclass.getMethod("setDatabaseName", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getDatabaseOrSchemaName() });
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getPassword() });
} else if (this == ORACLE) {
dsclass.getMethod("setURL", stringParam).invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getDbUrl()});
dsclass.getMethod("setUser", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getUsername() });
dsclass.getMethod("setPassword", stringParam)
.invoke(dataSourceInstance,
new Object[] { dbConnectionInfo.getPassword() });
}
return dataSourceInstance;
} catch (final ClassNotFoundException cnfe) {
cnfe.getMessage();
} catch (final IllegalAccessException iae) {
} catch (final NoSuchMethodException nsme) {
} catch (final InvocationTargetException ite) {
} catch (final InstantiationException ie) {
}
return null;
}
*/
public void setDBConnectionInfo(final DBConnectionInfo dbConnectionInfo) {
this.mdbConnectionInfo = dbConnectionInfo;
}
public DataBases getValue(final String value) {
if (value.equalsIgnoreCase("DERBY")) {
return DERBY;
} else if (value.equalsIgnoreCase("ORACLE")) {
return ORACLE;
} else if (value.equalsIgnoreCase("VSAM")) {
return VSAM;
} else if (value.equalsIgnoreCase("DB2")) {
return DB2;
} else if (value.equalsIgnoreCase("SQLSERVER")) {
return SQLSERVER;
} else if (value.equalsIgnoreCase("MYSQL")) {
return MYSQL;
} else {
return null;
}
}
public DatabaseModel getDatabaseModel() {
switch (this) {
case DERBY:
return DerbyDataAccess.getInstance();
case ORACLE:
return OracleDataAccess.getInstance();
case DB2:
return Db2DataAccess.getInstance();
case SQLSERVER:
return SqlServerDataAccess.getInstance();
}
return DatabaseModelImpl.getInstance();
}
public String createAndBindJNDIDS(final ComponentContext componentContext,
Object datasource, final String jndiname, final String xaEnabled)
throws NamingException {
final InitialContext namingContext = componentContext.getNamingContext();
if(mdbConnectionInfo.getXAEnabled().equalsIgnoreCase("XATransaction")){
datasource =(XADataSource)datasource;
}else{
datasource =(DataSource)datasource;
}
if(lookup(jndiname,namingContext)){
namingContext.bind(jndiname, datasource);
}
return jndiname;
}
public boolean lookup(final String jndiname,final InitialContext namingContext) throws NamingException{
try{
namingContext.lookup(jndiname);
}catch(javax.naming.NameNotFoundException e){
return true;
}
return false;
}
}