T2でコンストラクタインジェクションを使ってみる

コンストラクタインジェクションを実装されたSNAPSHOTが出来たらしいので
さっそく試してみる。


lucy-config.dtdのmethodが#REQUIREDになってたので、
使い方に少し迷ったがテストケースを見たらすんなり解決。


コンストラクタインジェクションの場合は、injectにmethodなどの属性は
いらないみたい。


早速試してみる。

・lucy-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE lucy-config PUBLIC "-//LUCY//DTD LUCY//EN" "http://www.lucy.org/dtd/lucy-config.dtd">
<lucy-config>
	
    <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
        <inject method="setDriverClassName">"org.h2.Driver"</inject>
        <inject method="setURL">t2DbUrl.object</inject>
        <inject method="setUser">"sa"</inject>
        <!-- <inject method="setPassword"></inject> -->
    </component>
 	
    <component name="t2DbUrl" class="org.t2framework.samples.todo.EmbeddedH2UrlFactoryBean">
    	<inject method="setUrlSuffix">"/t2db/t2db"</inject>
    	<inject method="setReferenceClassName">"org.t2framework.samples.todo.dbflute.allcommon.Entity"</inject>
    </component>
    
    <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
    	<destroy method="close" />
        <inject method="setTransactionManager">transactionManager</inject>
        <inject method="setXADataSource">xaDataSource</inject>
    </component>
    
    <component name="transactionManager" class="org.seasar.extension.jta.TransactionManagerImpl"/>

    <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl">
        <inject>connectionPool</inject>
    </component>

    <component name="dbfluteInitializer" class="org.t2framework.samples.todo.dbflute.allcommon.DBFluteInitializer">
    	<inject>xaDataSource</inject>
    </component>
    <component name="behaviorCommandInvoker" class="org.t2framework.samples.todo.dbflute.allcommon.bhv.core.BehaviorCommandInvoker">
        <inject method="setDataSource">dataSource</inject>
        <inject method="setBeanMetaDataFactory">beanMetaDataFactory</inject>
        <inject method="setValueTypeFactory">valueTypeFactory</inject>
    </component>
	
    <component name="invokerAssistant" class="org.t2framework.samples.todo.dbflute.allcommon.ImplementedInvokerAssistant"/>
    <component name="commonColumnAutoSetupper" class="org.t2framework.samples.todo.dbflute.allcommon.ImplementedCommonColumnAutoSetupper"/>
    <component name="behaviorSelector" class="org.t2framework.samples.todo.dbflute.allcommon.CacheBehaviorSelector">
        <destroy method="destroy" />
    </component>

    <component name="beanMetaDataFactory" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.BeanMetaDataFactoryExtension"/>
    <component name="propertyTypeFactoryBuilder" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.PropertyTypeFactoryBuilderExtension"/>
    <component name="latestSqlProvider" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.SqlLogRegistryLatestSqlProvider"/>
    <component name="annotationReaderFactory" class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/>
    <component name="valueTypeFactory" class="org.seasar.dao.impl.ValueTypeFactoryImpl"/>
    <component name="daoNamingConvention" class="org.seasar.dao.impl.DaoNamingConventionImpl"/>
    <component name="beanEnhancer" class="org.seasar.dao.impl.NullBeanEnhancer"/>
    <component name="dtoMetaDataFactory" class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/>
    <component name="relationPropertyTypeFactoryBuilder" class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/>
    <component name="tableNaming" class="org.seasar.dao.impl.DefaultTableNaming"/>
    <component name="columnNaming" class="org.seasar.dao.impl.DefaultColumnNaming"/>
    <component name="procedureMetaDataFactory" class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/>

    <component name="dbfluteStringClobType" class="org.seasar.extension.jdbc.types.StringClobType"/>
    <component name="dbfluteBytesOidType" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.internal.valuetype.InternalBytesOidType" />

    <component name="memberBhv" class="org.t2framework.samples.todo.dbflute.exbhv.MemberBhv"/>

</lucy-config>


・Lucyでコンポーネントを呼び出すテスト

@SingletonScope
public class LucyDBFluteTest extends LucyTestCase {

	private Lucy lucy;

	public void setUp() throws Exception {
		lucy = getLucy();
		lucy.load("org/t2framework/samples/lucy/dbflute/config.xml");
	}

	public void testComponent() throws Exception {
		DataSourceImpl dataSourceImpl = lucy.get("dataSource");
		assertNotNull(dataSourceImpl);
	}
}

あっさり成功!!
あとはDBFluteとLucyの連携だー。