- - PR -
Spring applicationContext.xmlのdataSourceの定義
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-07-15 13:24
トランザクション制御をするために
dataSoruce の定義を以下のようにすると起動時に、「org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoTarget' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'dataSource' of bean class [dao.JDBCdao]: Property 'dataSource' is not writable org.springframework.beans.NotWritablePropertyException: Invalid property 'dataSource' of bean class [dao.JDBCdao]: Property 'dataSource' is not writable」 とうエラーになります。原因がわかりません。 Springのソースを追っていくと、DriverManagerDataSourceクラスに それぞれのpropertyにvalueで設定した値は設定されているようです。 どなたかわかる方、ご教授願います。 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@XXXX:9999:XXXXX</value> </property> <property name="username"><value>XXX</value> </property> <property name="password"><value>XXX</value> </property> </bean> <bean id="daoTarget" class="dao.JDBCdao"> <property name="dataSource"><ref="dataSource"/></property> </bean> | ||||
|
投稿日時: 2004-07-15 14:05
Springは触ったことないのですが、エラーメッセージから推測すると、
dao.JDBCdaoクラスにpublicなsetDataSourceメソッドがないのではないですか? または引数の型が間違っていませんか? | ||||
|
投稿日時: 2004-07-16 09:04
同じapplicationContext.xml内の場合、
<ref local="dataSource" /> じゃなかったでしたっけ? | ||||
|
投稿日時: 2004-07-16 10:55
ukさん
<bean id="daoTarget" class="dao.JDBCdao"> で指定したdao.JDBCdaoクラスで継承するクラス(org.springframework.jdbc.core.support.JdbcDaoSupport)を指定してませんでした。 ご指摘どおり、親クラスでsetDataSourceメソッドがあるので、 起動するようになりました。ありがとうございます。 | ||||
|
投稿日時: 2004-07-16 11:10
latteさん
実際のapplicationContext.xmlは以下のようになっています。 私のここに載せるための編集ミスです。すみません。 <ref local="dataSource" /> | ||||
|
投稿日時: 2004-07-16 11:13
UKさんのおかげで、起動はするようにはなったのですが、 アクションクラスで、beanの"manager"のインスタンスを取得する個所で 「 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXManager' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: 1 constructor arguments specified but no matching constructor found in bean 'XXXManager' (hint: specify index arguments for simple parameters to avoid type ambiguities) 」 のエラーになります。 コードは以下のようにして XXXManager logic = (XXXManager)WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet().getServletContext()).getBean("XXXManager"); インスタンスを取得しています。 <bean id="XXXManager" の <constructor-arg index="0" type="dao.manageDao"> <ref bean="daoTarget" /> </constructor-arg> の指定が間違っているのでしょうか? 指定したクラスパスはすべて合っています。 ============================================================================================= apalicationContext.xml 全文です。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-lazy-init="false" default-dependency-check="none" default-autowire="no"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@XXXX:9999:XXXXX</value> </property> <property name="username"><value>XXX</value> </property> <property name="password"><value>XXX</value> </property> </bean> <bean id="XXXManager" class="logic.XXXManager" singleton="false" lazy-init="default" autowire="default" dependency-check="default" > <constructor-arg index="0" type="dao.manageDao"> <ref bean="daoTarget" /> </constructor-arg> </bean> <bean id="daoTarget" class="dao.JDBCdao"> <property name="dataSource"><ref="dataSource"/></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"><ref local="dataSource"/></property> </bean> <bean id="XXXDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="target"><ref bean ="daoTarget"/></property> <property name="transactionManager"><ref local="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED , readOnly</prop> <prop key="update*">PROPAGATION_REQUIRED , -java.lang.Exception</prop> </props> </property> </bean> ============================================================================================= | ||||
|
投稿日時: 2004-07-16 13:24
またまたエラーメッセージからの推測なんですが、logic.XXXManagerクラスのコンストラクタに、
この設定に該当するものがない、といっているようです。要するにdao.manageDao型の引数を 一つ取るコンストラクタが必要なはずですが、logic.XXXManagerクラスのコードはどうなって いるのでしょうか。 | ||||
|
投稿日時: 2004-07-16 16:24
ukさん
ご指摘のとおり、dao.manageDao型の引数とるコンストラクタを追加したところ、 うまく動きました。 とっても助かりました。 本当に、ありがとうございました。 | ||||
1
