Between release 5.0.5 and 5.0.6 Tapestry switched from commons-logging to SLF4J. You want to be injecting an org.slf4j.Logger instead.
On Dec 21, 2007 7:44 AM, <[EMAIL PROTECTED]> wrote: > Joel, > > Simplifying is, of course, a good suggestion. So I reduced my DAO to a > plain POJO (no longer extends SqlMapClientDaoSupport, or has any > dependencies). Now I'm getting a different error. > > When I attempt to retrieve the 'safe' page; the original start page from > the tutorial, to which I added a link to my new test page I get this error: > > 2007-12-21 10:36:28,362 5ERROR [httpWorkerThread-9090-1] > (DefaultRequestExceptionHandler.java:50) - Processing of request failed > with uncaught exception: Exception constructing service 'TimingFilter': > Error invoking service builder method > org.apache.tapestry.tutorial.services.AppModule.buildTimingFilter(Log) (at > AppModule.java:65) (for service 'TimingFilter'): No service implements the > interface org.apache.commons.logging.Log. > java.lang.RuntimeException: Exception constructing service 'TimingFilter': > Error invoking service builder method > org.apache.tapestry.tutorial.services.AppModule.buildTimingFilter(Log) (at > AppModule.java:65) (for service 'TimingFilter'): No service implements the > interface org.apache.commons.logging.Log. > > Any hints on how to get around this? > > Dave > > We must begin not just to act, but to think, for there is no better slave > than the one who believes his slavery to be freedom, and we are in > no greater peril than when we cannot see the chains on our minds > because there are yet no chains on our feet. > -- Michael Reid > > > > > > "Joel Wiegman" > <[EMAIL PROTECTED] > nc.com> To > "Tapestry users" > 12/19/2007 01:58 <users@tapestry.apache.org> > PM cc > > Subject > Please respond to RE: Can't get Tapestry5 to work > "Tapestry users" with Spring > <[EMAIL PROTECTED] > pache.org> > > > > > > > > > > Dave, > > I have Tapestry 5.0.5, Spring 2.0.4, and Sun Appserver 9 all working in > harmony. Haven't really had any problems at all. > > Based on your post, it sounds like Tapestry is finding and initializing > the beans. That's the toughest part, so if that's true, I might suggest > to just simplify things a little: > > * Put one simple named bean in your applicationContext.xml > * Then instead of using the @Service annotation, just name your member > variable the same as the bean name > * Make sure your @Inject annotations are in a page or component class > (NOTE: this is important, because Tapestry doesn't just scan your entire > classpath and look for these annotations, it only looks in the > "Component Packages" (see here: > http://tapestry.formos.com/nightly/tapestry5/tapestry-core/guide/compone > nt-classes.html )). > > Hope that helps. Here's some sample source: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> > <bean name="serviceDao" class="com.foo.ServiceDaoImpl"/> > </beans> > > public class Target > { > @Inject > private ServiceDao serviceDao; // <-- NOTE CHANGE > > public List<String> getOptions() > { > return dao.getOptions(); /// NPE here!! > getOptions() > in the dao returns a hard-coded list at this time > } > > public void setDao(final ServiceDao _dao) > { > this.dao = _dao; > } > public ServiceDao getDao() > { > return dao; > } > } > > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: Wednesday, December 19, 2007 1:27 PM > To: users@tapestry.apache.org > Subject: Can't get Tapestry5 to work with Spring > > > I'm new to Tapestry. I've been wanting to take a look at it for some > time, and have a bit of time here at the end of the year. I've started > with Howard's tutorial for Tap5 and got the first stage of that working > easily. > So then I created another simple page, and linked to that. Still working > fine, so time to start getting into something 'real'. Since we use > Spring for all our projects here I figured that should be my next step. > I created an iBatis DAO that accesses one of our existing JNDI > datasources, with the intent of having my page retrieve data from it for > displaying. > > I followed the steps described here: > http://tapestry.apache.org/tapestry5/tapestry-spring/, but the dao is > not getting injected; I get a NPE when it comes time to access it. My > logs show the initialization completing correctly, with the Spring beans > being created. Is there anything missing fom this description to > complete the wiring? > > I'm using Tapestry5.0.6, Spring2.0.1 (though I also tried 1.2.8), > iBatis2.3.0.677, running in Sun Appserver8.2 > > Here's my web.xml: > > <web-app> > <display-name>tapestry-tutorial1 Tapestry 5 Application</ > display-name> > <context-param> > <!-- The only significant configuration for Tapestry 5, > this > informs Tapestry > of where to look for pages, components > and mixins. > --> > <param-name>tapestry.app-package</param-name> > <param-value>org.apache.tapestry.tutorial</param-value> > </context-param> > > <context-param> > <param-name>contextConfigLocation</param-name> > <param-value> > > classpath:org/apache/tapestry/tutorial/applicationContext.xml > </param-value> > </context-param> > > <filter> > <filter-name>app</filter-name> > <!-- > <filter-class>org.apache.tapestry.TapestryFilter</filter-class> > --> > <filter-class> > org.apache.tapestry.spring.TapestrySpringFilter</filter-class> > </filter> > <filter-mapping> > <filter-name>app</filter-name> > <url-pattern>/*</url-pattern> > </filter-mapping> > > <listener> > <listener-class> > org.springframework.web.context.ContextLoaderListener</listener-class> > </listener> > </web-app> > > > org/apache/tapestry/tutorial/applicationContext.xml: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> > > <import resource= > "classpath:org/apache/tapestry/tutorial/dao/applicationContext-jndi.xml" > /> > <import resource= > "classpath:org/apache/tapestry/tutorial/dao/ibatis/applicationContext.xm > l" > /> > </beans> > > > org/apache/tapestry/tutorial/dao/applicationContext-jndi.xml: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> > > <bean id="serviceDataSource" class= > "org.springframework.jndi.JndiObjectFactoryBean"> > <property name="jndiName" value="srServiceDataSource"/> > </bean> > </beans> > > > org/apache/tapestry/tutorial/dao/ibatis/applicationContext.xml: > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> > > <bean id="sqlMapClient" class= > "org.springframework.orm.ibatis.SqlMapClientFactoryBean"> > <property name="configLocation" value= > "classpath:org/apache/tapestry/tutorial/dao/ibatis/sql-map-config.xml" > /> > <property name="dataSource" ref="serviceDataSource" /> > </bean> > > <bean name="serviceDao" class= > "org.apache.tapestry.tutorial.dao.ibatis.ServiceDaoImpl"> > <property name="sqlMapClient" ref="sqlMapClient" /> > </bean> > </beans> > > > And in my page class: > > public class Target > { > @Inject > @Service("serviceDao") > private ServiceDao dao; > > public List<String> getOptions() > { > return dao.getOptions(); /// NPE here!! > getOptions() > in the dao returns a hard-coded list at this time > } > > public void setDao(final ServiceDao _dao) > { > this.dao = _dao; > } > public ServiceDao getDao() > { > return dao; > } > } > > I haven't tried the alternate methods presented, but just by looking at > them I know that I will not be able to convince the other developers to > give Tapestry a try if it's necessary to go through that in order to use > Spring. Hopefully I'm just missing something simple and I'll be able to > get this method working. But I've been struggling with it for the better > part of 2 days now. > > Dave > > We must begin not just to act, but to think, for there is no better > slave than the one who believes his slavery to be freedom, and we are in > no greater peril than when we cannot see the chains on our minds because > there are yet no chains on our feet. > -- Michael Reid > > > This message contains information from Equifax Inc. which may be > confidential and privileged. If you are not an intended recipient, > please refrain from any disclosure, copying, distribution or use of this > information and note that such actions are prohibited. If you have > received this transmission in error, please notify by e-mail > [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Howard M. Lewis Ship TWD Consulting, Inc. Creator Apache Tapestry and Apache HiveMind --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]