• ベストアンサー

Struts2、Spring、iBATIS splMapClientについて

Struts2、Spring、iBATIS で勤務管理サイトを 勉強の為に作成しているのですが、どうしても わからないエラーが発生してしまい、質問させて いただきました。 【事象】 ・eclipseよりサーバでの実行を起動させた際ですが、  @ResourceでDAOのBeanを注入時にエラーが発生してしまいます。  ※@Resourceを外せば当事象のエラーは発生しませんでした。 【applicationContext.xml】抜粋 <bean id="splMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean" scope="singleton"> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id="loginDao" class="login.LoginDao" scope="singleton"> <property name="splMapClient" ref="splMapClient"></property> </bean> 【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> <settings cacheModelsEnabled="true" statementCachingEnabled="true" enhancementEnabled="true" classInfoCacheEnabled="true" lazyLoadingEnabled="false" /> <sqlMap url="file:c:/eclipse/workspace/tiles/WebContent/WEB-INF/sql/login.xml" /> </sqlMapConfig> 【Login.java】 package login; import java.util.Map; import javax.annotation.Resource; import jp.co.hershe.struts2.util.Struts2Action; import com.opensymphony.xwork2.ActionSupport; @Struts2Action("Login") public class Login extends ActionSupport { private static final long serialVersionUID = 1L; @Resource private LoginDao loginDao; @Override public String execute() throws Exception { (もろもろ処理が入ります) } } 【エラーログ】 情報: Loaded JDBC driver: oracle.jdbc.driver.OracleDriver 2009/06/26 1:05:28 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 情報: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@269997: defining beans [org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,Login,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,login,transactionManager,dataSource,TransactionInterceptor,splMapClient,loginDao]; root of factory hierarchy 2009/06/26 1:05:28 org.springframework.web.context.ContextLoader initWebApplicationContext 致命的: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'splMapClient' of bean class [login.LoginDao]: No property 'splMapClient' found at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) at …… ================================================== sqlMapClientのあたりで記述がおかしいのかと思いまして 見直しや検索などしてみたのですが、わからず、、 わかる方いらっしゃいましたらご教授ください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tamtam180
  • ベストアンサー率100% (1/1)
回答No.2

ただのtypoだと思います。 splMapClient(えすぴーえる)ではなく、sqlMapClient(えすきゅーえる)ではないでしょうか?

moritakos
質問者

お礼

ご指摘ありがとうございます。 お恥ずかしい限りです。ご指摘の通り修正した ところ直りました。ありがとうございました。

moritakos
質問者

補足

すいません。。 勉強の為にご教授いただきたいのですが、 ちなみに、applicationContext.xmlで指定して いるBean idのsqlMapClientというのは固定で どこかに定義されているものなのでしょうか、、  ※クラス名の頭文字を小文字にしたidを定義   する決まりがどこかに記載されているので   しょうか? applicationContext.xml内では、誤った 「splMapClient」で一致していたので問題 無いのかな、、と思っていたのが問題でした。。 度々で申し訳ありませんが、ご存知でしたら 教えてください。

その他の回答 (2)

  • tamtam180
  • ベストアンサー率100% (1/1)
回答No.3

きちんと動作したようで何よりです。 下の補足の件ですが、Idは自由につけて問題ありません。 今回問題になったのは下記の記述のproperty="splMapClient"です。 <bean id="loginDao" class="login.LoginDao" scope="singleton"> <property name="splMapClient" ref="splMapClient"></property> </bean> Daoはあるクラスを継承して作成していますよね? そのクラスにはsetSqlMapClientというメソッドがあるはずです。最初の記述のままですと、 loginDao.setSplMapClient(refで記述したBean) という意味になるのでそんなSetterは無くてエラーになったというわけです。 property name="sqlMapClient"と修正するだけで動くはずです。

moritakos
質問者

お礼

ご回答いただきありがとうございます。 DaoはSqlMapClientDaoSupportクラスを継承 していました(APIも確認しました)。 propertyのnameとrefについて理解いたしました。 この度は本当にありがとうございました。

  • hatimiti
  • ベストアンサー率68% (26/38)
回答No.1

私もこの構成(Struts2/Spring/iBatis)で自分なりのフレームワーク作ってますよ Invalid property 'splMapClient' of bean class [login.LoginDao]: No property 'splMapClient' found と言われているので、LoginDao のフィールドに splMapClient がないか、 そのsetterがないとかではないでしょうか?

moritakos
質問者

お礼

回答いただきありがとうございます。 tamtam180さんのご指摘のあった箇所を修正した ところ動きました。ありがとうございました。

関連するQ&A

専門家に質問してみよう