http://thread.gmane.org/gmane.comp.web.click.user/1034
http://article.gmane.org/gmane.comp.web.click.user/1034
Thanks J.F. Zarama.
Replace Spring with Guice.
MyModule.java
import static com.google.inject.name.Names.named; import com.google.inject.AbstractModule; import com.google.inject.Scopes; import com.ibatis.sqlmap.client.SqlMapClient; public class MyModule extends AbstractModule { @Override protected void configure() { bind(MyDao.class).to(MyDaoImpl.class).in(Scopes.SINGLETON); bind(SqlMapClient.class).toProvider(SqlMapClientP.class).in( Scopes.SINGLETON); bindConstant().annotatedWith(named("ibatis.configXml")) .to("myapp/xml/SqlMapConfig.xml"); //from classpath } }
SqlMapClientP.java
import java.io.IOException; import java.io.Reader; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.name.Named; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class SqlMapClientP implements Provider<SqlMapClient> { private static SqlMapClient sqlMapClient; @Inject @Named("ibatis.configXml") String configXml; public SqlMapClient get() { if(sqlMapClient != null){ return sqlMapClient; } try { Reader reader = Resources.getResourceAsReader(configXml); sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); }catch (IOException e) { e.printStackTrace(); throw new RuntimeException("SqlMapClientP unable to create instance." + e); } return sqlMapClient; } }
MyDao.java
public interface MyDao { int getSomething() throws SQLException; }
MyDaoImpl.java
import java.sql.SQLException; import com.google.inject.Inject; public class MyDaoImpl implements MyDao { @Inject private SqlMapClientP client; public int getSomething() throws SQLException { return ((Integer)client.get().queryForObject("getSomething")).intValue(); } }
MyPage.java
import com.google.inject.Inject; public class MyPage extends WebPage { @Inject protected MyDao myDao; public MyPage() { super(); System.out.println("something: "+myDao.getSomething()); } }
MyApp.java
public class MyApp extends WebApplication { ... @Override public void init() { ... addComponentInstantiationListener(new GuiceComponentInjector(this, new MyModule())); ... } ... }
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <typeAlias alias="My" type="myapp.My"/> <transactionManager type="JDBC" commitRequired="false"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}"/> <property name="JDBC.ConnectionURL" value="${url}"/> <property name="JDBC.Username" value="${username}"/> <property name="JDBC.Password" value="${password}"/> </dataSource> </transactionManager> <sqlMap resource="myapp/xml/My.xml"/> </sqlMapConfig>
That should basically be it.