[Seasar-user:20589] Re: jdbcManagerのDIがエラー「ESSR0080」で失敗する

佐竹雅央 [E-MAIL ADDRESS DELETED]
2011年 2月 14日 (月) 00:17:56 JST


こんばんは。

SingletonS2Container経由で正常にDBアクセスできているのであればs2jdbc.diconやjdbc.diconには問題ないと思われます。

TestComp はどのように定義(コンポーネントとして登録)していますか?
クラス名から察するにSMARTデプロイでの登録ではないと思うのですが、
TestCompを定義したdiconファイルからs2jdbc.diconのincludeが定義されていないということはありませんか?

SingletonS2Containerから取れるコンテナはルートのコンテナ(通常はapp.dicon)なので、登録された全てのコンポーネントを取り出せますが、
コンポーネントへのインジェクションはそのコンポーネントが定義されたdiconファイルから参照可能なコンポーネントしか自動設定できません。
(SMARTデプロイで登録されたコンポーネントならルートのコンテナに登録されるので、全コンポーネントが見えるはずですが)

#参照可能なコンポーネント=同diconファイル内またはそのdiconファイルから直接または間接的にincludeされたdiconファイルに定義されているコンポーネント


(参考になりそうな過去の投稿)
http://ml.seasar.org/archives/seasar-user/2009-May/017523.html


佐竹


2011年2月13日15:05 松崎一夫 <[E-MAIL ADDRESS DELETED]>:
> 松崎と申します。
> お世話になります。
> jdbcManagerのDIでエラー「ESSR0080」について質問させていただきます。
> 下記のように、SingletonS2Containerクラスからだと、JdbcManagerを取得でき、
> データベースからAdminConfigを取得できます。
>   JdbcManager jdbcManager =
> SingletonS2Container.getComponent(JdbcManager.class);
>   AdminConfig adminConfig =
> jdbcManager.from(AdminConfig.class).getSingleResult();
> しかしながら、下記のように@Resourceを指定してDIしようとすると、「org.seasar.framework.container.IllegalAutoBindingPropertyRuntimeException:
> [ESSR0080]クラス(com.nekotopic.batch.component.TestComp)のプロパティ(jdbcManager)の自動設定に失敗しました」でエラーとなってDIできません。
>  @Component(name="testBatch")
>  public class TestComp implements Batch {
>    @Resource
> protected AdminConfigService adminConfigService;
> @Resource
> protected JdbcManager jdbcManager;
> この現象はどのような原因が考えられるでしょうか?
> よろしくお願いします。
> --- s2jdbc.dicon ---
> <components>
> <include path="jdbc.dicon"/>
> <include path="s2jdbc-internal.dicon"/>
> <component name="jdbcManager"
> class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
> <property name="maxRows">0</property>
> <property name="fetchSize">0</property>
> <property name="queryTimeout">0</property>
> <property name="dialect">mysqlDialect</property>
> </component>
> </components>
> --- jdbc.dicon ---
> <components namespace="jdbc">
> <include path="jta.dicon"/>
> <component name="xaDataSource"
> class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
> <property name="driverClassName">
> "com.mysql.jdbc.Driver"
> </property>
> <property name="URL">
> "jdbc:mysql://localhost:3306/nekotopic"
> </property>
> <property name="user">"root"</property>
> <property name="password">"aaa111"</property>
> </component>
> <component name="connectionPool"
> class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
> <property name="timeout">600</property>
> <property name="maxPoolSize">1</property>
> <property name="allowLocalTx">true</property>
> <destroyMethod name="close"/>
> </component>
> <component name="DataSource"
> class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
> </components>
> [環境]
>
> S2-tiger:2.4.43
> JDK1.6.0_18
> MySQL5.5
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>


Seasar-user メーリングリストの案内