Is it expected that JNDI datasources should work using the Multiple Datasources configuration advice given at
http://mybatis.github.com/guice/core.html
??
We spent a great deal of time reading doc and forums - both before and after we encountered the problem described below - but could find nothing related.
We needed to add an additional datasource to the application that has been running fine with a single JNDI connection configured using the MyBatisModule directly.
When we used a PrivateModule to wrap each of our MyBatisModules for the two datasources we get the message:
null returned by binding at org.mybatis.guice.MyBatisModule.bindDataSourceProviderType(MyBatisModule.java:215) ... while locating javax.sql.DataSource
After tracing and checking for hours, we finally got this to work by using direct JDBC with the PooledDataSourceProvider.class.
I've attached three files:
- the log from Tomcat showing the detailed exceptions we get.
- The AppListener module configured with JNDI that fails.
- The AppListener module configured with direct JDBC
The two modules are identical except for the lines I've commented out by each. A quick diff will show.
Thank you.
Log from Tomcat showing the detailed exceptions we get:
Mar 23, 2013 12:14:48 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.23 using APR version 1.4.6.
Mar 23, 2013 12:14:48 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Mar 23, 2013 12:14:48 PM org.apache.catalina.startup.SetAllPropertiesRule begin
WARNING: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'clientAuth' to 'false' did not find a matching property.
Mar 23, 2013 12:14:48 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:extranet' did not find a matching property.
Mar 23, 2013 12:14:48 PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized with version OpenSSL 1.0.0g 18 Jan 2012
Mar 23, 2013 12:14:49 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Mar 23, 2013 12:14:49 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8443
Mar 23, 2013 12:14:49 PM org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
Mar 23, 2013 12:14:49 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 789 ms
Mar 23, 2013 12:14:49 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Mar 23, 2013 12:14:49 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.36
[DEBUG] 2013-03-23 12:14:49,487 (AppListener.java:getInjector:122) sm1=com.trumpetinc.environment.AppListener$1@2322bce
[DEBUG] 2013-03-23 12:14:49,489 (AppListener.java:getInjector:123) pm1=com.trumpetinc.environment.AppListener$2@1664023c
[DEBUG] 2013-03-23 12:14:49,489 (AppListener.java:getInjector:124) pm2=com.trumpetinc.environment.AppListener$3@7fcebc9f
[DEBUG] 2013-03-23 12:14:49,668 (LogFactory.java:setImplementation:120) Logging initialized using 'org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
Mar 23, 2013 12:14:49 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class com.trumpetinc.environment.AppListener
com.google.inject.CreationException: Guice creation errors:
1) null returned by binding at org.mybatis.guice.MyBatisModule.bindDataSourceProviderType(MyBatisModule.java:215)
but org.mybatis.guice.environment.EnvironmentProvider.dataSource is not @Nullable
while locating org.mybatis.guice.datasource.builtin.JndiDataSourceProvider
at org.mybatis.guice.MyBatisModule.bindDataSourceProviderType(MyBatisModule.java:215)
while locating javax.sql.DataSource
for field at org.mybatis.guice.environment.EnvironmentProvider.dataSource(EnvironmentProvider.java:57)
at org.mybatis.guice.environment.EnvironmentProvider.class(EnvironmentProvider.java:32)
while locating org.mybatis.guice.environment.EnvironmentProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:105)
while locating org.apache.ibatis.mapping.Environment
for parameter 0 at org.mybatis.guice.configuration.ConfigurationProvider.<init>(ConfigurationProvider.java:116)
at org.mybatis.guice.configuration.ConfigurationProvider.class(ConfigurationProvider.java:43)
while locating org.mybatis.guice.configuration.ConfigurationProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:106)
while locating org.apache.ibatis.session.Configuration
for parameter 0 at org.mybatis.guice.session.SqlSessionFactoryProvider.createNewSqlSessionFactory(SqlSessionFactoryProvider.java:64)
at org.mybatis.guice.session.SqlSessionFactoryProvider.class(SqlSessionFactoryProvider.java:31)
while locating org.mybatis.guice.session.SqlSessionFactoryProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:107)
while locating org.apache.ibatis.session.SqlSessionFactory
for parameter 0 at org.mybatis.guice.session.SqlSessionManagerProvider.createNewSqlSessionManager(SqlSessionManagerProvider.java:55)
at org.mybatis.guice.session.SqlSessionManagerProvider.class(SqlSessionManagerProvider.java:31)
while locating org.mybatis.guice.session.SqlSessionManagerProvider
at org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:51)
while locating org.apache.ibatis.session.SqlSessionManager
for field at org.mybatis.guice.mappers.MapperProvider.sqlSessionManager(MapperProvider.java:40)
while locating org.mybatis.guice.mappers.MapperProvider
at com.google.inject.util.Providers$3.initialize(Providers.java:101)
at org.mybatis.guice.AbstractMyBatisModule.bindMapper(AbstractMyBatisModule.java:76)
2) null returned by binding at org.mybatis.guice.MyBatisModule.bindDataSourceProviderType(MyBatisModule.java:215)
but org.mybatis.guice.environment.EnvironmentProvider.dataSource is not @Nullable
while locating org.mybatis.guice.datasource.builtin.JndiDataSourceProvider
at org.mybatis.guice.MyBatisModule.bindDataSourceProviderType(MyBatisModule.java:215)
while locating javax.sql.DataSource
for field at org.mybatis.guice.environment.EnvironmentProvider.dataSource(EnvironmentProvider.java:57)
at org.mybatis.guice.environment.EnvironmentProvider.class(EnvironmentProvider.java:32)
while locating org.mybatis.guice.environment.EnvironmentProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:105)
while locating org.apache.ibatis.mapping.Environment
for parameter 0 at org.mybatis.guice.configuration.ConfigurationProvider.<init>(ConfigurationProvider.java:116)
at org.mybatis.guice.configuration.ConfigurationProvider.class(ConfigurationProvider.java:43)
while locating org.mybatis.guice.configuration.ConfigurationProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:106)
while locating org.apache.ibatis.session.Configuration
for parameter 0 at org.mybatis.guice.session.SqlSessionFactoryProvider.createNewSqlSessionFactory(SqlSessionFactoryProvider.java:64)
at org.mybatis.guice.session.SqlSessionFactoryProvider.class(SqlSessionFactoryProvider.java:31)
while locating org.mybatis.guice.session.SqlSessionFactoryProvider
at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:107)
while locating org.apache.ibatis.session.SqlSessionFactory
for parameter 0 at org.mybatis.guice.session.SqlSessionManagerProvider.createNewSqlSessionManager(SqlSessionManagerProvider.java:55)
at org.mybatis.guice.session.SqlSessionManagerProvider.class(SqlSessionManagerProvider.java:31)
while locating org.mybatis.guice.session.SqlSessionManagerProvider
at org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:51)
while locating org.apache.ibatis.session.SqlSessionManager
for field at org.mybatis.guice.transactional.TransactionalMethodInterceptor.sqlSessionManager(TransactionalMethodInterceptor.java:61)
at org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:56)
2 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:175)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at com.trumpetinc.environment.AppListener.getInjector(AppListener.java:126)
at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Mar 23, 2013 12:14:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Mar 23, 2013 12:14:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/extranet] startup failed due to previous errors
Mar 23, 2013 12:14:50 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/extranet] appears to have started a thread named [com.google.inject.internal.util.$Finalizer] but has failed to stop it. This is very likely to create a memory leak.
Mar 23, 2013 12:14:50 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/extranet] created a ThreadLocal with key of type [com.google.inject.internal.InjectorImpl$1] (value [com.google.inject.internal.InjectorImpl$1@37b82d69]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1cad6513]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Mar 23, 2013 12:14:50 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Mar 23, 2013 12:14:50 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8443
Mar 23, 2013 12:14:50 PM org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
Mar 23, 2013 12:14:50 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1068 ms
AppListener module configured with JNDI that fails:
package com.trumpetinc.environment;
import static com.google.inject.name.Names.bindProperties;
import java.io.IOException;
import java.util.Map.Entry;
import java.util.Properties;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import com.google.inject.Binding;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.log4j.Logger;
import org.mybatis.guice.MyBatisModule;
import org.mybatis.guice.datasource.builtin.JndiDataSourceProvider;
import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider;
import org.mybatis.guice.datasource.helper.JdbcHelper;
import com.google.inject.PrivateModule;
import com.google.inject.name.Names;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
import com.trumpetinc.goldmine.GoldMineMapper;
import com.trumpetinc.goldmine.GoldMineService;
import com.trumpetinc.goldmine.GoldMineServiceImplMyBatis;
import com.trumpetinc.livelookup.TimeZoneMapper;
import com.trumpetinc.timezone.TimeZoneLookupServlet;
import com.trumpetinc.timezone.ZipCodeTimeZoneLookupService;
import com.trumpetinc.timezone.ZipCodeTimeZoneLookupServiceImpl;
/**
* Application Lifecycle Listener implementation class AppListener
*
*/
// public class AppListener extends GuiceServletContextListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, HttpSessionBindingListener, ServletRequestListener, ServletRequestAttributeListener
public class AppListener extends GuiceServletContextListener {
private static final Logger log = Logger
.getLogger(TimeZoneLookupServlet.class);
/**
* @see GuiceServletContextListener#GuiceServletContextListener()
*/
public AppListener() {
super();
// TODO Auto-generated constructor stub
}
@Override
protected Injector getInjector() {
ServletModule sm1 =
new ServletModule() {
@Override
protected void configureServlets() {
filter("/livelookup/goldmine2").through(createTransactionFilter());
serve("/livelookup/goldmine2").with(com.trumpetinc.livelookup.GoldmineLiveLookupServlet2.class);
filter("/upload").through(createTransactionFilter());
serve("/upload").with(com.trumpetinc.uploads.HandleUploadRequest.class);
filter("/timezonelookup").through(createTransactionFilter());
serve("/timezonelookup").with(com.trumpetinc.timezone.TimeZoneLookupServlet.class);
}
};
PrivateModule pm1 =
new PrivateModule() {
@Override
protected void configure() {
install(new MyBatisModule() {
@Override
protected void initialize() {
install(JdbcHelper.SQL_Server_jTDS);
bindDataSourceProviderType(JndiDataSourceProvider.class);
// bindDataSourceProviderType(PooledDataSourceProvider.class);
bindTransactionFactoryType(JdbcTransactionFactory.class);
addMapperClass(GoldMineMapper.class);
// bindProperties(binder(),getJNDIConnectionProperties("TrumpetGM"));
}
});
Names.bindProperties(this.binder(),getJNDIConnectionProperties("TrumpetGM"));
// Names.bindProperties(this.binder(),getJDBCConnectionProperties("GoldMineTpt"));
bind(GoldMineServiceImplMyBatis.class);
bind(GoldMineService.class).to(GoldMineServiceImplMyBatis.class);
expose(GoldMineMapper.class);
expose(GoldMineService.class);
expose(GoldMineServiceImplMyBatis.class);
}
};
PrivateModule pm2 =
new PrivateModule() {
@Override
protected void configure() {
install(new MyBatisModule() {
@Override
protected void initialize() {
install(JdbcHelper.SQL_Server_jTDS);
bindDataSourceProviderType(JndiDataSourceProvider.class);
// bindDataSourceProviderType(PooledDataSourceProvider.class);
bindTransactionFactoryType(JdbcTransactionFactory.class);
addMapperClass(TimeZoneMapper.class);
// bindProperties(binder(),getJNDIConnectionProperties("TimeZoneLookup"));
}
});
Names.bindProperties(this.binder(),getJNDIConnectionProperties("TimeZoneLookup"));
// Names.bindProperties(this.binder(),getJDBCConnectionProperties("TimeZoneLookup"));
bind(ZipCodeTimeZoneLookupServiceImpl.class);
bind(ZipCodeTimeZoneLookupService.class).to(ZipCodeTimeZoneLookupServiceImpl.class);
expose(TimeZoneMapper.class);
expose(ZipCodeTimeZoneLookupService.class);
expose(ZipCodeTimeZoneLookupServiceImpl.class);
}
};
log.debug("sm1="+sm1);
log.debug("pm1="+pm1);
log.debug("pm2="+pm2);
Injector inj = Guice.createInjector(sm1,pm1, pm2 );
for (Entry<Key<?>, Binding<?>> binding : inj.getBindings().entrySet() ) {
log.debug(binding.getKey() + " -> " + binding.getValue());
}
return inj;
}
protected static Properties getJNDIConnectionProperties(String dataSrcName) {
Properties myBatisProperties = new Properties();
myBatisProperties.setProperty("mybatis.environment.id", "production");
myBatisProperties.setProperty("jndi.initialContext", "java:comp/env");
myBatisProperties.setProperty("jndi.dataSource", "jdbc/"+dataSrcName);
return myBatisProperties;
}
protected static Properties getJDBCConnectionProperties(String dbName) {
Properties myBatisProperties = new Properties();
myBatisProperties.setProperty("mybatis.environment.id", "production");
myBatisProperties.setProperty("JDBC.host", "TrumpetDB.trumpetinc.local");
// myBatisProperties.setProperty("JDBC.port", "1433");
myBatisProperties.setProperty("JDBC.schema", dbName);
myBatisProperties.setProperty("JDBC.username", "username_removed");
myBatisProperties.setProperty("JDBC.password", "password_removed");
// myBatisProperties.setProperty("JDBC.autoCommit", "false;Trusted_Connection=False");
myBatisProperties.setProperty("sqlserver.domain", "trumpetinc");
return myBatisProperties;
}
protected Filter createTransactionFilter() {
return new Filter() {
@Override
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
GoldMineService gmSvc;
ZipCodeTimeZoneLookupService timeZoneLookup;
// pass the request along the filter chain
chain.doFilter(request, response);
// TODO - need to clean up and handle exceptions better.
}
};
}
}
AppListener module configured with direct JDBC:
package com.trumpetinc.environment;
import static com.google.inject.name.Names.bindProperties;
import java.io.IOException;
import java.util.Map.Entry;
import java.util.Properties;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import com.google.inject.Binding;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.log4j.Logger;
import org.mybatis.guice.MyBatisModule;
import org.mybatis.guice.datasource.builtin.JndiDataSourceProvider;
import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider;
import org.mybatis.guice.datasource.helper.JdbcHelper;
import com.google.inject.PrivateModule;
import com.google.inject.name.Names;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
import com.trumpetinc.goldmine.GoldMineMapper;
import com.trumpetinc.goldmine.GoldMineService;
import com.trumpetinc.goldmine.GoldMineServiceImplMyBatis;
import com.trumpetinc.livelookup.TimeZoneMapper;
import com.trumpetinc.timezone.TimeZoneLookupServlet;
import com.trumpetinc.timezone.ZipCodeTimeZoneLookupService;
import com.trumpetinc.timezone.ZipCodeTimeZoneLookupServiceImpl;
/**
* Application Lifecycle Listener implementation class AppListener
*
*/
// public class AppListener extends GuiceServletContextListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, HttpSessionBindingListener, ServletRequestListener, ServletRequestAttributeListener
public class AppListener extends GuiceServletContextListener {
private static final Logger log = Logger
.getLogger(TimeZoneLookupServlet.class);
/**
* @see GuiceServletContextListener#GuiceServletContextListener()
*/
public AppListener() {
super();
// TODO Auto-generated constructor stub
}
@Override
protected Injector getInjector() {
ServletModule sm1 =
new ServletModule() {
@Override
protected void configureServlets() {
filter("/livelookup/goldmine2").through(createTransactionFilter());
serve("/livelookup/goldmine2").with(com.trumpetinc.livelookup.GoldmineLiveLookupServlet2.class);
filter("/upload").through(createTransactionFilter());
serve("/upload").with(com.trumpetinc.uploads.HandleUploadRequest.class);
filter("/timezonelookup").through(createTransactionFilter());
serve("/timezonelookup").with(com.trumpetinc.timezone.TimeZoneLookupServlet.class);
}
};
PrivateModule pm1 =
new PrivateModule() {
@Override
protected void configure() {
install(new MyBatisModule() {
@Override
protected void initialize() {
install(JdbcHelper.SQL_Server_jTDS);
// bindDataSourceProviderType(JndiDataSourceProvider.class);
bindDataSourceProviderType(PooledDataSourceProvider.class);
bindTransactionFactoryType(JdbcTransactionFactory.class);
addMapperClass(GoldMineMapper.class);
// bindProperties(binder(),getJNDIConnectionProperties("TrumpetGM"));
}
});
// Names.bindProperties(this.binder(),getJNDIConnectionProperties("TrumpetGM"));
Names.bindProperties(this.binder(),getJDBCConnectionProperties("GoldMineTpt"));
bind(GoldMineServiceImplMyBatis.class);
bind(GoldMineService.class).to(GoldMineServiceImplMyBatis.class);
expose(GoldMineMapper.class);
expose(GoldMineService.class);
expose(GoldMineServiceImplMyBatis.class);
}
};
PrivateModule pm2 =
new PrivateModule() {
@Override
protected void configure() {
install(new MyBatisModule() {
@Override
protected void initialize() {
install(JdbcHelper.SQL_Server_jTDS);
// bindDataSourceProviderType(JndiDataSourceProvider.class);
bindDataSourceProviderType(PooledDataSourceProvider.class);
bindTransactionFactoryType(JdbcTransactionFactory.class);
addMapperClass(TimeZoneMapper.class);
// bindProperties(binder(),getJNDIConnectionProperties("TimeZoneLookup"));
}
});
// Names.bindProperties(this.binder(),getJNDIConnectionProperties("TimeZoneLookup"));
Names.bindProperties(this.binder(),getJDBCConnectionProperties("TimeZoneLookup"));
bind(ZipCodeTimeZoneLookupServiceImpl.class);
bind(ZipCodeTimeZoneLookupService.class).to(ZipCodeTimeZoneLookupServiceImpl.class);
expose(TimeZoneMapper.class);
expose(ZipCodeTimeZoneLookupService.class);
expose(ZipCodeTimeZoneLookupServiceImpl.class);
}
};
log.debug("sm1="+sm1);
log.debug("pm1="+pm1);
log.debug("pm2="+pm2);
Injector inj = Guice.createInjector(sm1,pm1, pm2 );
for (Entry<Key<?>, Binding<?>> binding : inj.getBindings().entrySet() ) {
log.debug(binding.getKey() + " -> " + binding.getValue());
}
return inj;
}
protected static Properties getJNDIConnectionProperties(String dataSrcName) {
Properties myBatisProperties = new Properties();
myBatisProperties.setProperty("mybatis.environment.id", "production");
myBatisProperties.setProperty("jndi.initialContext", "java:comp/env");
myBatisProperties.setProperty("jndi.dataSource", "jdbc/"+dataSrcName);
return myBatisProperties;
}
protected static Properties getJDBCConnectionProperties(String dbName) {
Properties myBatisProperties = new Properties();
myBatisProperties.setProperty("mybatis.environment.id", "production");
myBatisProperties.setProperty("JDBC.host", "TrumpetDB.trumpetinc.local");
// myBatisProperties.setProperty("JDBC.port", "1433");
myBatisProperties.setProperty("JDBC.schema", dbName);
myBatisProperties.setProperty("JDBC.username", "username_removed");
myBatisProperties.setProperty("JDBC.password", "password_removed");
// myBatisProperties.setProperty("JDBC.autoCommit", "false;Trusted_Connection=False");
myBatisProperties.setProperty("sqlserver.domain", "trumpetinc");
return myBatisProperties;
}
protected Filter createTransactionFilter() {
return new Filter() {
@Override
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
GoldMineService gmSvc;
ZipCodeTimeZoneLookupService timeZoneLookup;
// pass the request along the filter chain
chain.doFilter(request, response);
// TODO - need to clean up and handle exceptions better.
}
};
}
}