I am having troubles getting a delegate declared for the primary business controller to instantiate and allow the controller to start. Here is the code.
The DispatcherServlet configuration file is called icarabineer-servlet.xml
The Application Context file is called: applicationContext-hibernate.xml I am following the example in PetClinic using Hibernate rather than JPetStore, which uses iBatis.
I have the following controller defined in icarabineer-servlet.xml:
<bean id="tomController" class="org.fin_it.icarabineer.icaraorder.tom.contr ollers.TomController">
<property name="methodNameResolver"><ref local="tomControllerResolver"/></property>
<property name=" tom "><ref bean="tom"/></property>
</bean>
I have the following transaction proxy set up in applicationContext-hibernate.xml:
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="store*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
The following is the primary business object referenced in the Controller.
<!--
- TOM primary business object: Hibernate implementation, as an inner bean
- wrapped by an outer transactional proxy. The two bean definitions could have been
- separate, but this is cleaner as there is no need to ever access the unwrapped object.
-->
<bean id=" tom " parent="baseTransactionProxy">
<property name="target">
<bean class="org.fin_it.icarabineer.icaraorder.tom.hiber nate.HibernateTOM">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
</property>
</bean>
web.xml:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>icarabineer.root</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoade rlistener</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>icarabineer</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<!-- Maps the icarabineer dispatcher to /*.htm -->
<servlet-name>icarabineer</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<!-- Maps the icarabineer dispatcher to /*.form -->
<servlet-mapping>
<servlet-name>icarabineer</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
The error stated in the stack traces says the bean "tomController" can't be created because it can not resolve the bean "tom". Could the problem be with my configuration of "tom" or in the code for "tom"'s target HibernateTOM?
Here's the code in HibernateTOM:
package org.fin_it.icarabineer.icaraorder.tom.hibernate;
import java.util.Collection;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate.support.Hibernat eDaoSupport;
import org.fin_it.icarabineer.icaraorder.tom.domain.ITom;
import org.fin_it.icarabineer.icaraorder.tom.domain.order s.Order;
public class HibernateTOM extends HibernateDaoSupport implements ITom
{
public Collection findOrders(String tr_CIOrdID) throws DataAccessException {
return getHibernateTemplate().find("from Owner order where order.tr_CIOrdID like ?", tr_CIOrdID + "%");
}
public Order loadOrder(int id) throws DataAccessException {
return (Order) getHibernateTemplate().load(Order.class, new Integer(id));
}
public void storeOrder(Order order) throws DataAccessException {
getHibernateTemplate().saveOrUpdate(order);
}
}
HibernateTOM implements ITom. Here is the code for ITom:
package org.fin_it.icarabineer.icaraorder.tom.domain;
import java.util.Collection;
import org.fin_it.icarabineer.icaraorder.tom.domain.order s.Order;
import org.springframework.dao.DataAccessException;
public interface ITom {
public Collection findOrders(String tr_CIOrdID) throws DataAccessException;
public Order loadOrder(int id) throws DataAccessException;
public void storeOrder(Order order) throws DataAccessException;
}
I followed the example in JPetStore. When I try and load the app I get the following stack trace - all suggestions would be much appreciated:
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'tomController' defined in resource [/WEB-INF/icarabineer-servlet.xml] of ServletContext: Can't resolve reference to bean 'tom' while setting property 'tom'; nested exception is org.springframework.beans.factory.NoSuchBeanDefini tionException: No bean named 'tom' is defined: org.springframework.beans.factory.support.DefaultL istableBeanFactory defining beans [viewResolver,tomController,tomControllerResolver,f indOrdersForm,addOrderForm,editOrderForm,orderVali dator,changeAccountTypeForm,changeAccountTypeValid ator,orderMan,order1,order2,order3,messageSource,e xceptionResolver,urlMapping]; Root of BeanFactory hierarchy org.springframework.beans.factory.NoSuchBeanDefini tionException: No bean named 'tom' is defined: org.springframework.beans.factory.support.DefaultL istableBeanFactory defining beans [viewResolver,tomController,tomControllerResolver,f indOrdersForm,addOrderForm,editOrderForm,orderVali dator,changeAccountTypeForm,changeAccountTypeValid ator,orderMan,order1,order2,order3,messageSource,e xceptionResolver,urlMapping]; Root of BeanFactory hierarchy at org.springframework.beans.factory.support.DefaultL istableBeanFactory.getBeanDefinition(DefaultListab leBeanFactory.java:291) at org.springframework.beans.factory.support.Abstract BeanFactory.getMergedBeanDefinition(AbstractBeanFa ctory.java:554) at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:165) at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:136) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.resolveReference(Abstra ctAutowireCapableBeanFactory.java:903) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.resolveValueIfNecessary (AbstractAutowireCapableBeanFactory.java:844) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.applyPropertyValues(Abs tractAutowireCapableBeanFactory.java:785) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:637) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:271) at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:208) at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:204) at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:136) at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:230) at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:284) at org.springframework.web.context.support.XmlWebAppl icationContext.refresh(XmlWebApplicationContext.ja va:131) at org.springframework.web.servlet.FrameworkServlet.c reateWebApplicationContext(FrameworkServlet.java:2 82) at org.springframework.web.servlet.FrameworkServlet.i nitWebApplicationContext(FrameworkServlet.java:230 ) at org.springframework.web.servlet.FrameworkServlet.i nitServletBean(FrameworkServlet.java:200) at org.springframework.web.servlet.HttpServletBean.in it(HttpServletBean.java:102) at javax.servlet.GenericServlet.init(GenericServlet.j ava:211) at org.apache.catalina.core.StandardWrapper.loadServl et(StandardWrapper.java:1029) at org.apache.catalina.core.StandardWrapper.allocate( StandardWrapper.java:687) at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java:144) at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invo keInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117) at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(Co yoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConnection(Http11Protocol.jav a:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534) Cookies:


Reply With Quote