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のあたりで記述がおかしいのかと思いまして
見直しや検索などしてみたのですが、わからず、、
わかる方いらっしゃいましたらご教授ください。
よろしくお願いいたします。
お礼
>通常Webアプリケーションでは、アプリケーション起動時に設定ファイルをキャッシュして使用します。 >(毎回ファイルを読みに行くのであれば、パフォーマンスが悪すぎます。) XMLに定義したSQLを修正したら即時反映されるものだと思っており、この辺を理解していませんでした。パフォーマンスも考慮するとAPサーバの再起動は必須なんですね。 ありがとうございました。