Hello,
My WebApplication extends SpringWebApplication and I use proxy-based
approach for bean instantiation.
I'm using JDK1.4, so I'm unable to just annotate the beans, but have to do
it in the following way:
MyWebApplication {
private UserDao userDao;
...
public UserDao getUserDao() {
if (userDao == null) {
userDao = (JdbcUserDao) createSpringBeanProxy(
JdbcUserDao.class, "userDao");
}
return userDao;
}
}
However, I get the following exception:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean
named 'userDao' must be of type [com.myapp.user.JdbcUserDao], but was
actually of type [$Proxy9]
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:309)
...
My configurations are pretty much taken from wicket-phonebook example, the
only major difference is that phonebook uses Wicket 1.2 with Wicket is
configured as servlet, while I use it as filter to enable Acegi support.
If you're still with me, here're related entries from web.xml...:
<filter>
<filter-name>Spring Application Factory Filter</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter
</filter-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>
org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring Application Factory Filter</filter-name>
<url-pattern>/myapp/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
...and from applicationContext.xml:
<bean id="userDaoTarget" class="com.myapp.user.JdbcUserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionManager" class="
org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- this is a transactional proxy for userdetails dao which ensures
proper transaction handling -->
<bean id="userDao" class="
org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="userDaoTarget"/>
<property name="transactionAttributes">
<props>
<prop key="save">PROPAGATION_REQUIRED</prop>
<prop
key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
I'd be happy if someone could point me on where to look at since I'm a
little afraid to dig into the whole Spring's proxy instantiation thing.
I use Wicket 1.3, Wicket-Spring 1.3 and Spring 2.5.
--
sp