package com.sforce.datasource;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import javax.naming.spi.InitialContextFactoryBuilder;
/**
* @author tmichels
*/
class LocalContext extends InitialContext implements InitialContextFactoryBuilder, InitialContextFactory {
Map<Object,Object> dataSources;
LocalContext() throws NamingException {
super();
dataSources = new HashMap<Object,Object>();
}
public void addDataSource(String name, String connectionString, String username, String password) {
this.
dataSources.put(name, new LocalDataSource(connectionString,username,password));
}
public InitialContextFactory createInitialContextFactory(
Hashtable<?, ?> hsh) throws NamingException {
dataSources.putAll(hsh);
return this;
}
public Context getInitialContext(Hashtable<?, ?> arg0)
throws NamingException {
return this;
}
@Override
public Object lookup(String name) throws NamingException {
Object ret = dataSources.get(name);
return (ret != null) ? ret : super.lookup(name);
}
}
package com.sforce.datasource;
import javax.naming.spi.NamingManager;
/**
* @author tmichels
*/
public class LocalContextFactory {
private LocalContextFactory() {}
public static LocalContext createLocalContext(String databaseDriver) {
try {
LocalContext ctx = new LocalContext();
Class.forName(databaseDriver);
NamingManager.setInitialContextFactoryBuilder(ctx);
return ctx;
}
catch(Exception e) {
}
return null;
}
}
package com.sforce.datasource;
import java.io.PrintWriter;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.sql.DataSource;
/**
* @author tmichels
*/
class LocalDataSource implements DataSource , Serializable {
private static final long serialVersionUID = 1L;
private String connectionString;
private String username;
private String password;
LocalDataSource(String connectionString, String username, String password) {
this.connectionString = connectionString;
this.username = username;
this.password = password;
}
public Connection getConnection() throws SQLException{
return DriverManager.getConnection(connectionString, username, password);
}
public Connection getConnection(String username, String password)
throws SQLException {return null;}
public PrintWriter getLogWriter() throws SQLException {return null;}
public int getLoginTimeout() throws SQLException {return 0;}
public void setLogWriter(PrintWriter out) throws SQLException { }
public void setLoginTimeout(int seconds) throws SQLException {}
@Override
public boolean isWrapperFor(Class<?> arg0) throws SQLException {
// TODO Auto-generated method stub
return false;
}
@Override
public <T> T unwrap(Class<T> arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
package com.sforce.datasource;
import java.sql.Driver;
import javax.inject.Inject;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import com.google.common.base.Preconditions;
/**
* @author tmichels
*/
@Configuration
public class DataSourceConfigImpl implements DataSourceConfig{
@Bean(name="jndiDwSetup")
public LocalContext setupJndiDataSource() {
LocalContext ctx = LocalContextFactory.createLocalContext("oracle.jdbc.driver.OracleDriver");
ctx.addDataSource("jdbc/devpool","jdbc:oracle:thin:@developer.localhost.com:1521:developer", "developer", "developer");
return ctx;
}
@Bean(name="jndiDwDataSource")
public DataSource dwJndiDataSource() throws NamingException{
try {
DataSource dataSource = (DataSource) new InitialContext().lookup("jdbc/devpool");
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
}
Like this:
Like Loading...