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(RegistryImpl.java:321) > at > org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:288) > at > org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:39) > at > org.apache.tapestry5.internal.services.ServiceAnnotationObjectProvider.provide(ServiceAnnotationObjectProvider.java:35) > at > org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl$1.invoke(MasterObjectProviderImpl.java:50) > at > org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunnable.java:36) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.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:589) >>> at org.mortbay.jetty.servlet.Context.startContext(Context.java:139) >>> at >>> >>> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1216) >>> 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:589) >>> at org.mortbay.jetty.servlet.Context.startContext(Context.java:139) >>> at >>> >>> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1216) >>> 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(OperationTrackerImpl.java:74) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:96) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:871) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.internal.spring.SpringModuleDef$1$2.createObject(SpringModuleDef.java:76) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunnable.java:36) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:52) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:96) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:871) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:52) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:56) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunnable.java:36) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:52) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:96) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:871) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:65) >>>>> at >>>>> >>>>> >>>>> $ConfigurableWebApplicationContext_11e850a8929.delegate($ConfigurableWebApplicationContext_11e850a8929.java) >>>>> at >>>>> >>>>> >>>>> $ConfigurableWebApplicationContext_11e850a8929.getBeanDefinitionCount($ConfigurableWebApplicationContext_11e850a8929.java) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.internal.spring.SpringModule$1.initializeApplication(SpringModule.java:45) >>>>> at >>>>> >>>>> >>>>> $ApplicationInitializer_11e850a892a.initializeApplication($ApplicationInitializer_11e850a892a.java) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.services.TapestryModule$37.initializeApplication(TapestryModule.java:1912) >>>>> at >>>>> >>>>> >>>>> $ApplicationInitializer_11e850a892a.initializeApplication($ApplicationInitializer_11e850a892a.java) >>>>> at >>>>> >>>>> >>>>> $ApplicationInitializer_11e850a8925.initializeApplication($ApplicationInitializer_11e850a8925.java) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.services.TapestryModule$18.initializeApplication(TapestryModule.java:1043) >>>>> at >>>>> >>>>> >>>>> $ServletApplicationInitializer_11e850a890f.initializeApplication($ServletApplicationInitializer_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:589) >>>>> at >>>>> org.mortbay.jetty.servlet.Context.startContext(Context.java:139) >>>>> at >>>>> >>>>> >>>>> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1216) >>>>> 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(ContextLoader.java:172) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.internal.spring.SpringModuleDef$1$2$1.invoke(SpringModuleDef.java:86) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.InvokableToRunnable.run(InvokableToRunnable.java:36) >>>>> at >>>>> >>>>> >>>>> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.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 > > -- 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