Great article! I just wish I could run the example! I've got everything running, and the build.xml seemed to create the database just fine, however, I'm getting the following error when creating an order (any ideas?):
org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'orderService' defined in resource [/WEB-INF/applicationContext-hibernate.xml] of ServletContext: Class that bean class [org.springframework.transaction.interceptor.TransactionProxyFactoryBean] depends on not found; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinition(DefaultXmlBeanDefinitionParser.java:304)
org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.loadBeanDefinition(DefaultXmlBeanDefinitionParser.java:200)
org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:152)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:161)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:127)
org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
org.springframework.context.support.AbstractXmlApplicationContext.refreshBeanFactory(AbstractXmlApplicationContext.java:62)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:226)
org.springframework.web.context.support.XmlWebApplicationContext.refresh(XmlWebApplicationContext.java:125)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:154)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:95)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:80)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683)
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
org.apache.catalina.startup.HostConfig.start(HostConfig.java:964)
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
org.apache.catalina.startup.Catalina.start(Catalina.java:556)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422)
You will need to use the AOPAlliance jar file. http://sourceforge.net/projects/aopalliance
Place this file into your web-inf/lib directory. You can also download Spring 1.0.2 with dependencies if you want to get the jar from that source as well.
I had same prob. and I had aopalliance.jar in web-inf/lib but I carelessy put a duplicate copy of spring.jar in tomcat/server/lib and I got a very similiar message you had. Remove duplicate, AOK.
<!-- Descomentar solo cuando su servidor use el servlet 2.0 y comentar el listener -->
<!-- servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet-->
Mi spring-context-dataSource.xml esta configurado asi:
=================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- Archivo de configuración de datasources, servidores de correo y plantillas de email -->
<beans>
<!-- DATASOURCES -->
<bean id="dataSourceGeneral" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>sun.jdbc.odbc.JdbcOdbcDriver</value></property>
<property name="url"><value>jdbc:odbc:cnxSQLServer2000</value></property>
<property name="defaultCatalog"><value>general</value></property>
<property name="username"><value></value></property>
<property name="password"><value></value></property>
</bean>
</beans>
Mi spring-context-dao.xml esta configurado asi:
===============================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- Archivo de configuración de daos beans, que pueden ser invocados desde un facade -->
<beans>
<!-- DAOS BEANS -->
<bean id="ubigeoDao" class="com.empresa.web.administracion.modelo.spring.daoimpl.UbigeoDaoImpl">
<property name="dataSourceGeneral"><ref bean="dataSourceGeneral" /></property>
</bean>
</beans>
Mi clase storeProcedures "ListarUbigeosSP.java"
===============================================
package com.empresa.web.administracion.modelo.spring.dao.sp;
declareParameter(new SqlReturnResultSet("rsUbigeos", new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
ubigeoDTO = new UbigeoDTO();
ubigeoDTO.setCodigoUbigeo(rs.getString("COD_UBI"));
ubigeoDTO.setCodigoDepartamento(rs.getString("COD_DEP_UBI"));
ubigeoDTO.setCodigoProvincia(rs.getString("COD_PRO_UBI"));
ubigeoDTO.setCodigoDistrito(rs.getString("COD_DIS_UBI"));
ubigeoDTO.setNombreUbigeo(rs.getString("NOM_UBI"));
return ubigeoDTO;
}
}));
declareParameter(new SqlParameter("P_CODIGO_DEPARTAMENTO", Types.CHAR));
declareParameter(new SqlParameter("P_CODIGO_PROVINCIA", Types.CHAR));
compile();
}
public List executeProcedure(String codigoDepartamento, String codigoProvincia) {
logger.debug("Inicia el método executeProcedure de ListarUbigeosSP");
Map paramHashMap = new HashMap();
paramHashMap.put("P_CODIGO_DEPARTAMENTO", codigoDepartamento);
paramHashMap.put("P_CODIGO_PROVINCIA", codigoProvincia);
listaUbigeos = (List) super.execute(paramHashMap).get("rsUbigeos");
return listaUbigeos;
}
}
Mi interface "UbigeoDao.java"
============================
package com.empresa.web.administracion.modelo.spring.dao;
import java.util.List;
public interface UbigeoDao {
public List listarUbigeo(String codigoDepartamento, String codigoProvincia) throws Exception;
}
Mi clase que implementa dicah interface "UbigeoDaoImpl"
=================================================
package com.empresa.web.administracion.modelo.spring.daoimpl;
public class UbigeoDaoImpl extends MasterDBConnections implements UbigeoDao {
public List listarUbigeo(String codigoDepartamento, String codigoProvincia) throws Exception {
ListarUbigeosSP sp = new ListarUbigeosSP(getDataSourceGeneral());
List listaUbigeo = sp.executeProcedure(codigoDepartamento, codigoProvincia);
return listaUbigeo;
}
}
Mi ServletController que exiende ActionServlet:
===============================================
package com.empresa.web.administracion.vc.struts.controller;
try {
rutaLog4J = this.getServletContext().getRealPath(config.getInitParameter("log4j"));
if (rutaLog4J == null || rutaLog4J.length() == 0 || !(new File(rutaLog4J)).isFile()) {
System.out.println("ERROR: No se puede leer el archivo de configuración. Por favor revise el parámetro de inicialización de la ruta del archivo de configuración en el web.xml");
throw new ServletException();
}
watch = config.getInitParameter("watch");
if (watch != null && watch.equalsIgnoreCase("true")) {
PropertyConfigurator.configureAndWatch(rutaLog4J);
}
else {
PropertyConfigurator.configure(rutaLog4J);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
Ejecuto mi aplicativo con tomcat 5.0 y sale el siguiente error en el log del tomcat:
================================================
2006-05-27 18:19:33 StandardContext[/balancer]org.apache.webapp.balancer.BalancerFilter: init(): ruleChain: [org.apache.webapp.balancer.RuleChain: [org.apache.webapp.balancer.rules.URLStringMatchRule: Target string: News / Redirect URL: http://www.cnn.com], [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http://www.yahoo.com], [org.apache.webapp.balancer.rules.AcceptEverythingRule: Redirect URL: http://jakarta.apache.org]]
2006-05-27 18:19:44 StandardContext[/jsp-examples]ContextListener: contextInitialized()
2006-05-27 18:19:44 StandardContext[/jsp-examples]SessionListener: contextInitialized()
2006-05-27 18:19:45 StandardContext[/servlets-examples]ContextListener: contextInitialized()
2006-05-27 18:19:45 StandardContext[/servlets-examples]SessionListener: contextInitialized()
2006-05-27 18:19:48 StandardContext[/WebSiteAdministracion]Loading Spring root WebApplicationContext
2006-05-27 18:19:50 StandardContext[/WebSiteAdministracion]Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name 'ubigeoDao' defined in ServletContext resource [/WEB-INF/spring-context-dao.xml]: Bean class [com.empresa.web.administracion.modelo.spring.daoimpl.UbigeoDaoImpl] not found; nested exception is java.lang.ClassNotFoundException: com.empresa.web.administracion.modelo.spring.daoimpl.UbigeoDaoImpl
java.lang.ClassNotFoundException: com.empresa.web.administracion.modelo.spring.daoimpl.UbigeoDaoImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1340)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:109)
at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.createBeanDefinition(BeanDefinitionReaderUtils.java:65)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:466)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitionElement(DefaultXmlBeanDefinitionParser.java:432)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.parseBeanDefinitions(DefaultXmlBeanDefinitionParser.java:347)
at org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.registerBeanDefinitions(DefaultXmlBeanDefinitionParser.java:197)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:295)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:223)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:173)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:129)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:145)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:126)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:262)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4343)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
at org.apache.catalina.core.StandardService.start(StandardService.java:480)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
2006-05-27 18:19:50 StandardContext[/WebSiteAdministracion]Closing Spring root WebApplicationContext
==============================================
Nota: este tomcat usa el servlet 4.0 y jsp 2.0
==============================================
Place this file into your web-inf/lib directory. You can also download Spring 1.0.2 with dependencies if you want to get the jar from that source as well.