One use of injecting Tapestry services into Spring beans would be to take advantage of Spring's transaction management. Or convenience features for setting up a Quartz scheduler. Or making Tapestry services available via JMS or SOAP or whatever. Spring does have a rich feature set.
Some services I write need to work within a T5 app, and also from command-line support utilities. I tend to use just Spring for those situations, but what if I want to include an optional (autowired) reference to a service only available in the web application? I wind up duplicating service configurations. There have been a few cases where it would have been really handy to have it NOT MATTER where I set up the service. I'm hoping there is some perfect solution that comes to Howard in a moment of inspiration. If not, supporting two libraries or at least configuration modes would seem to be necessary. Another 2 cents. Jonathan > -----Original Message----- > From: Otho [mailto:taa...@googlemail.com] > Sent: Saturday, January 03, 2009 10:59 > To: Tapestry users > Subject: Re: spring context troubles > > Hmm, the question is, how important it is to inject Tapestry IOC services > into Spring beans compared to just being able to use the Spring beans as > usual. > > I would think the latter option is much less effort overall. If I want to > inject something into a spring bean I have to define it as a bean and wire > it up as usual. And I can use it in Tapestry just like a service. I can't > really think of a scenario where it would really be needed to @Inject > something into a spring bean. Sure it would be nice to have, but if I have > to mix different versions of Tapestry libraries for that it is probably > not > worth it. > > Just my 2cts > > I guess it is mainly for the Web Flow integration, but if the price is, > that > > > 2009/1/2 Howard Lewis Ship <hls...@gmail.com> > > > Seems like I'm faced with two evils: breaking compatibility on the one > > hand, maintaining two different sets of Spring integration on the > > other. > > > > On Fri, Jan 2, 2009 at 10:50 AM, Fernando Padilla <f...@alum.mit.edu> > > wrote: > > > That's alright to keep them separate, but I'm just worried that the > > 5.0.18 > > > will stop working at some point.. > > > > > > That is why I proposed that you should really have two different > > pacakges.. > > > one for each direction of integration, and people can explicitly > choose > > > which one to use. It just seems kind of brittle saying never to > upgrade > > > your spring package, that strategy will fail at some point, and could > > just > > > confuse people in the interim... > > > > > > Howard Lewis Ship wrote: > > >> > > >> Actually, I'm liking the idea that compatibility on this comes from > > >> continuing to use the old version of tapestry-spring. I haven't found > > >> a way to do both: allow injection of Tapestry services into Spring > > >> beans and expose Spring beans as Tapestry services. The lifecycles of > > >> the two containers do not mesh easily. > > >> > > >> On Thu, Jan 1, 2009 at 3:23 PM, Fernando Padilla <f...@alum.mit.edu> > > >> wrote: > > >>> > > >>> nice work around. but I want to make sure, this will be a temporary > > work > > >>> around until you get the latest spring module working as you desire, > > with > > >>> two-way integration?? > > >>> > > >>> Howard Lewis Ship wrote: > > >>>> > > >>>> I think the best option for you is to use Tapestry 5.1, but revert > > >>>> tapestry-spring to 5.0.18. This allows you to benefit from the > > >>>> improvements to tapestry-core without having any compatibility > > >>>> problems with the changes to tapestry-spring. I'm adding > documentation > > >>>> to the web site to explain this. > > >>>> > > >>>> On Mon, Dec 29, 2008 at 4:20 PM, Fernando Padilla > <f...@alum.mit.edu> > > >>>> wrote: > > >>>>> > > >>>>> I'm sorry that I'm hammering on this code, while it's still > probably > > a > > >>>>> work > > >>>>> in progress.. (always available through im) > > >>>>> > > >>>>> but I commented out the spring ContextLoaderListener, moved the > > filter > > >>>>> up > > >>>>> to > > >>>>> be first, and this seems to initialize properly at least for Jetty > > >>>>> (within > > >>>>> eclipse). The next issue, it looks like it did not register the > > spring > > >>>>> beans in the TapestryIoC.. so now I'm getting exceptions saying > that > > it > > >>>>> can't find particular beans: > > >>>>> > > >>>>> > > >>>>> .... > > >>>>> Caused by: java.lang.RuntimeException: Service id > > >>>>> 'common-conf-properties' > > >>>>> is not defined by any module. Defined services: > > >>>>> ActionRenderResponseGenerator, AjaxComponentEventRequestHandler, > > >>>>> AjaxComponentEventResultProcessor, AjaxPartialResponseRenderer, > > Alias, > > >>>>> AliasOverrides, AppSubscriptionHandler, ApplicationContext, > > >>>>> ApplicationDefaults, ApplicationGlobals, ApplicationInitializer, > > >>>>> ApplicationStateManager, > ApplicationStatePersistenceStrategySource, > > >>>>> AspectDecorator, AssetBindingFactory, AssetObjectProvider, > > AssetSource, > > >>>>> BaseURLSource, BeanBlockOverrideSource, BeanBlockSource, > > >>>>> BeanModelSource, > > >>>>> BindingSource, ChainBuilder, ClassNameLocator, > > >>>>> ClasspathAssetAliasManager, > > >>>>> ClasspathAssetFactory, ClasspathURLConverter, > > >>>>> ClientPersistentFieldStorage, > > >>>>> ClientPersistentFieldStrategy, ComponentClassCache, > > >>>>> ComponentClassFactory, > > >>>>> ComponentClassResolver, ComponentClassTransformWorker, > > >>>>> ComponentClassTransformer, ComponentClassesInvalidationEventHub, > > >>>>> ComponentDefaultProvider, ComponentEventRequestHandler, > > >>>>> ComponentEventResultProcessor, ComponentInstanceResultProcessor, > > >>>>> ComponentInstantiatorSource, ComponentInvocationMap, > > >>>>> ComponentMessagesInvalidationEventHub, ComponentMessagesSource, > > >>>>> ComponentPageElementResourcesSource, ComponentSource, > > >>>>> ComponentTemplateSource, ComponentTemplatesInvalidationEventHub, > > >>>>> Context, > > >>>>> ContextAssetFactory, ContextPathEncoder, ContextValueEncoder, > > >>>>> CookieSink, > > >>>>> CookieSource, Cookies, CtClassSource, DataTypeAnalyzer, > > >>>>> DefaultDataTypeAnalyzer, DefaultFileItemFactory, > > >>>>> DefaultImplementationBuilder, EndOfRequestListenerHub, > Environment, > > >>>>> EnvironmentalShadowBuilder, ExceptionAnalyzer, ExceptionTracker, > > >>>>> FacebookAuthFilterImpl, FactoryDefaults, FbForceModeFilter, > > >>>>> FieldTranslatorSource, FieldValidationSupport, > > >>>>> FieldValidatorDefaultSource, > > >>>>> FieldValidatorSource, FormSupport, HiddenFieldLocationRules, > > >>>>> HttpServletRequest, HttpServletRequestHandler, IgnoredPathsFilter, > > >>>>> InjectionProvider, InternalRequestGlobals, LinkCreationHub, > > >>>>> LinkFactory, > > >>>>> LocalizationSetter, LocationRenderer, LoggingDecorator, > > MarkupRenderer, > > >>>>> MarkupWriterFactory, MasterDispatcher, MasterObjectProvider, > > >>>>> MessageBindingFactory, MetaDataLocator, MultipartDecoder, > > >>>>> NullFieldStrategyBindingFactory, NullFieldStrategySource, > > >>>>> ObjectRenderer, > > >>>>> OsForceTypeFilter, PageActivationContextCollector, > > >>>>> PageContentTypeAnalyzer, > > >>>>> PageDocumentGenerator, PageElementFactory, PageLoader, > > >>>>> PageMarkupRenderer, > > >>>>> PagePool, PageRenderQueue, PageRenderRequestHandler, > > >>>>> PageResponseRenderer, > > >>>>> PageTemplateLocator, PartialMarkupRenderer, > PersistentFieldManager, > > >>>>> PersistentLocale, PipelineBuilder, PropBindingFactory, > > PropertyAccess, > > >>>>> PropertyConduitSource, PropertyShadowBuilder, RegistryStartup, > > >>>>> RenderSupport, Request, RequestExceptionHandler, RequestGlobals, > > >>>>> RequestHandler, RequestLogFilter, RequestPageCache, > > >>>>> RequestPathOptimizer, > > >>>>> RequestSecurityManager, ResourceCache, ResourceDigestGenerator, > > >>>>> ResourceStreamer, Response, ResponseRenderer, > ServiceLifecycleSource, > > >>>>> ServletApplicationInitializer, > > >>>>> SessionApplicationStatePersistenceStrategy, > > >>>>> StrategyBuilder, SymbolSource, TemplateParser, ThreadLocale, > > >>>>> TranslateBindingFactory, TranslatorSource, TypeCoercer, > URLEncoder, > > >>>>> UpdateListenerHub, ValidateBindingFactory, > > >>>>> ValidationConstraintGenerator, > > >>>>> ValidationMessagesSource, ValueEncoderSource. > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.RegistryImpl.locateModuleForService(Regi > stryImpl.java:321) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.jav > a:288) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocat > orImpl.java:39) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.internal.services.ServiceAnnotationObjectProvider.pro > vide(ServiceAnnotationObjectProvider.java:35) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl$1.invo > ke(MasterObjectProviderImpl.java:50) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunna > ble.java:36) > > >>>>> at > > >>>>> > > >>>>> > > >>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTracke > rImpl.java:52) > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> > > >>>>> Howard Lewis Ship wrote: > > >>>>>> > > >>>>>> We need to figure out the order that the filters are initialized, > so > > >>>>>> that the Tapestry filter can be initialized first. I think just > > >>>>>> listing it first in the web.xml may do the trick. > > >>>>>> > > >>>>>> On Mon, Dec 29, 2008 at 4:00 PM, Fernando Padilla < > > f...@alum.mit.edu> > > >>>>>> wrote: > > >>>>>>> > > >>>>>>> I just tried it, and it won't work like that :( > > >>>>>>> > > >>>>>>> Like I said, I use spring outside of tapestry. So I need a > valid > > >>>>>>> working > > >>>>>>> spring context before the first request ever gets to tapestry > > >>>>>>> filter.. > > >>>>>>> > > >>>>>>> Here is my exception when I comment out the normal > > >>>>>>> ContextLoaderListener.. > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> [Console output redirected to > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > file:/local/fern/work/social-app- > repository/trunk/fanwars/site/../../log.txt] > > >>>>>>> 2008-12-29 15:58:26,140 [main] ERROR org.mortbay.log - failed > > OpenDS > > >>>>>>> java.lang.NullPointerException > > >>>>>>> at > > >>>>>>> > com.protrade.common.spring.OpenDSFilter.init(OpenDSFilter.java:28) > > >>>>>>> at > > >>>>>>> > com.protrade.common.web.ProtradeFilter.init(ProtradeFilter.java:37) > > >>>>>>> at > > >>>>>>> > > org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:58 > 9) > > >>>>>>> at > > >>>>>>> org.mortbay.jetty.servlet.Context.startContext(Context.java:139) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:121 > 6) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:509) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:447) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117) > > >>>>>>> at org.mortbay.jetty.Server.doStart(Server.java:222) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at runjettyrun.Bootstrap.main(Bootstrap.java:76) > > >>>>>>> 2008-12-29 15:58:26,142 [main] ERROR org.mortbay.log - Failed > > startup > > >>>>>>> of > > >>>>>>> context > > >>>>>>> > org.mortbay.jetty.webapp.webappcont...@1961581{/,src/main/webapp} > > >>>>>>> java.lang.NullPointerException > > >>>>>>> at > > >>>>>>> > com.protrade.common.spring.OpenDSFilter.init(OpenDSFilter.java:28) > > >>>>>>> at > > >>>>>>> > com.protrade.common.web.ProtradeFilter.init(ProtradeFilter.java:37) > > >>>>>>> at > > >>>>>>> > > org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:58 > 9) > > >>>>>>> at > > >>>>>>> org.mortbay.jetty.servlet.Context.startContext(Context.java:139) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:121 > 6) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:509) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:447) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > > org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117) > > >>>>>>> at org.mortbay.jetty.Server.doStart(Server.java:222) > > >>>>>>> at > > >>>>>>> > > >>>>>>> > > >>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>> at runjettyrun.Bootstrap.main(Bootstrap.java:76) > > >>>>>>> > > >>>>>>> > > >>>>>>> Howard Lewis Ship wrote: > > >>>>>>>> > > >>>>>>>> This is a change in behavior from Tapestry 5.0; it was > necessary > > in > > >>>>>>>> order to coordinate Spring and Tapestry IoC. It is necessary > to > > let > > >>>>>>>> Tapestry initialize Spring and use Tapestry-specific subclasses > of > > >>>>>>>> XmlWebApplicationContext and DefaultListableBeanFactory, to > hook > > in > > >>>>>>>> the logic that allows Spring beans to use @Inject and > > >>>>>>>> @InjectService. > > >>>>>>>> > > >>>>>>>> You should be fine if you just remove the ContextLoaderListener > > from > > >>>>>>>> your web.xml. > > >>>>>>>> > > >>>>>>>> On Mon, Dec 29, 2008 at 3:22 PM, Fernando Padilla > > >>>>>>>> <f...@citizensportsinc.com> wrote: > > >>>>>>>>> > > >>>>>>>>> I just tried to run with the latest tapestry-trunk, and I get > > this > > >>>>>>>>> really > > >>>>>>>>> nasty exception :( :( > > >>>>>>>>> > > >>>>>>>>> I initialize my own spring context with a > ContextLoaderListener, > > >>>>>>>>> because > > >>>>>>>>> I > > >>>>>>>>> need spring outside of tapestry. Why is tapestry attempting > to > > >>>>>>>>> create > > >>>>>>>>> a > > >>>>>>>>> context? > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> 2008-12-29 15:18:27,363 [main] ERROR > > >>>>>>>>> org.apache.tapestry5.ioc.Registry > > >>>>>>>>> - > > >>>>>>>>> Cannot initialize context because there is already a root > > >>>>>>>>> application > > >>>>>>>>> context present - check whether you have multiple > ContextLoader* > > >>>>>>>>> definitions > > >>>>>>>>> in your web.xml! > > >>>>>>>>> 2008-12-29 15:18:27,363 [main] ERROR > > >>>>>>>>> org.apache.tapestry5.ioc.Registry > > >>>>>>>>> - > > >>>>>>>>> Operations trace: > > >>>>>>>>> 2008-12-29 15:18:27,364 [main] ERROR > > >>>>>>>>> org.apache.tapestry5.ioc.Registry > > >>>>>>>>> - > > >>>>>>>>> [ > > >>>>>>>>> 1] Realizing service ApplicationContext > > >>>>>>>>> 2008-12-29 15:18:27,364 [main] ERROR > > >>>>>>>>> org.apache.tapestry5.ioc.Registry > > >>>>>>>>> - > > >>>>>>>>> [ > > >>>>>>>>> 2] Invoking ObjectCreator for Spring ApplicationContext > > >>>>>>>>> 2008-12-29 15:18:27,364 [main] ERROR > > >>>>>>>>> org.apache.tapestry5.ioc.Registry > > >>>>>>>>> - > > >>>>>>>>> [ > > >>>>>>>>> 3] Creating Spring ApplicationContext via ContextLoader > > >>>>>>>>> 2008-12-29 15:18:27,365 [main] ERROR Spring.ApplicationContext > - > > >>>>>>>>> Construction of service ApplicationContext failed: Cannot > > >>>>>>>>> initialize > > >>>>>>>>> context > > >>>>>>>>> because there is already a root application context present - > > check > > >>>>>>>>> whether > > >>>>>>>>> you have multiple ContextLoader* definitions in your web.xml! > > >>>>>>>>> org.apache.tapestry5.ioc.internal.OperationException: Cannot > > >>>>>>>>> initialize > > >>>>>>>>> context because there is already a root application context > > present > > >>>>>>>>> - > > >>>>>>>>> check > > >>>>>>>>> whether you have multiple ContextLoader* definitions in your > > >>>>>>>>> web.xml! > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTracke > rImpl.java:74) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTra > ckerImpl.java:96) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThre > adOperationTracker.java:68) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:87 > 1) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.internal.spring.SpringModuleDef$1$2.createObject(Spri > ngModuleDef.java:76) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke( > OperationTrackingObjectCreator.java:45) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunna > ble.java:36) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTracke > rImpl.java:52) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTra > ckerImpl.java:96) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThre > adOperationTracker.java:68) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:87 > 1) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObj > ect(OperationTrackingObjectCreator.java:49) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService( > SingletonServiceLifecycle.java:29) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObj > ect(LifecycleWrappedServiceCreator.java:52) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(Int > erceptorStackBuilder.java:56) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.cre > ateObject(RecursiveServiceCreationCheckWrapper.java:60) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke( > OperationTrackingObjectCreator.java:45) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunna > ble.java:36) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTracke > rImpl.java:52) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTra > ckerImpl.java:96) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThre > adOperationTracker.java:68) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:87 > 1) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObj > ect(OperationTrackingObjectCreator.java:49) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createO > bject(JustInTimeObjectCreator.java:65) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ConfigurableWebApplicationContext_11e850a8929.delegate($ConfigurableWebAp > plicationContext_11e850a8929.java) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ConfigurableWebApplicationContext_11e850a8929.getBeanDefinitionCount($Con > figurableWebApplicationContext_11e850a8929.java) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.internal.spring.SpringModule$1.initializeApplication( > SpringModule.java:45) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ApplicationInitializer_11e850a892a.initializeApplication($ApplicationInit > ializer_11e850a892a.java) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.services.TapestryModule$37.initializeApplication(Tape > stryModule.java:1912) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ApplicationInitializer_11e850a892a.initializeApplication($ApplicationInit > ializer_11e850a892a.java) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ApplicationInitializer_11e850a8925.initializeApplication($ApplicationInit > ializer_11e850a8925.java) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.services.TapestryModule$18.initializeApplication(Tape > stryModule.java:1043) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > $ServletApplicationInitializer_11e850a890f.initializeApplication($ServletA > pplicationInitializer_11e850a890f.java) > > >>>>>>>>> at > > >>>>>>>>> > org.apache.tapestry5.TapestryFilter.init(TapestryFilter.java:91) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:58 > 9) > > >>>>>>>>> at > > >>>>>>>>> > org.mortbay.jetty.servlet.Context.startContext(Context.java:139) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:121 > 6) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:509) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:447) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117) > > >>>>>>>>> at org.mortbay.jetty.Server.doStart(Server.java:222) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) > > >>>>>>>>> at runjettyrun.Bootstrap.main(Bootstrap.java:76) > > >>>>>>>>> Caused by: java.lang.IllegalStateException: Cannot initialize > > >>>>>>>>> context > > >>>>>>>>> because there is already a root application context present - > > check > > >>>>>>>>> whether > > >>>>>>>>> you have multiple ContextLoader* definitions in your web.xml! > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.springframework.web.context.ContextLoader.initWebApplicationContext(Co > ntextLoader.java:172) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.internal.spring.SpringModuleDef$1$2$1.invoke(SpringMo > duleDef.java:86) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunna > ble.java:36) > > >>>>>>>>> at > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTracke > rImpl.java:52) > > >>>>>>>>> ... 45 more > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > --------------------------------------------------------------------- > > >>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>>>>>>>> For additional commands, e-mail: users- > h...@tapestry.apache.org > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>> > > --------------------------------------------------------------------- > > >>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>>>>>> > > >>>>>>> > > >>>>>> > > >>>>> ------------------------------------------------------------------ > --- > > >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>>>> > > >>>>> > > >>>> > > >>>> > > >>> -------------------------------------------------------------------- > - > > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > >>> For additional commands, e-mail: users-h...@tapestry.apache.org > > >>> > > >>> > > >> > > >> > > >> > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > > > > > > > > > > > -- > > Howard M. Lewis Ship > > > > Creator Apache Tapestry and Apache HiveMind > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org