Hi all, I wanted to share my strange use case and the errors I 'm facing in my way to accomplish it, either way if none can help me this serves as a kind of therapy don't you think?
The problem appears only after obfuscating the webapp do you think this can araise problems with tapestry IoC? (I 'm just obfuscating my own libraries... not third parties) well, this is the case: We 've already coded all the app when some guy says "it must not contain the company's name in the whole deliverable" (he does some grep to control this), so we opted to obfuscate the code using Proguard, certainly we 're not obfuscating all the code we 're just obfuscating to remove the trhee first major packages (which contains the company name), methods and class names and subpackages like pages & components are kept unchanged! That done, we move on to test the web application after being obfuscated and here I post the stactrace when I init the app in Tomcat 5.5.20 or Jetty standalone 7.0.0: It seems to be a problem while loading a Module named CustomSecurityModule (we 're using tapestry spring security) and use this custom module to contribute provider manager with an ldap provider. INIT org.eclipse.jetty.servlet.ServletHolder$Config@65394b > 16/11/2011 14:58:37.275 [INFO ] [RegistryBuilder] - Adding module > definition for class org.apache.tapestry5.ioc.services.TapestryIOCModule > 16/11/2011 14:58:37.368 [INFO ] [RegistryBuilder] - Adding module > definition for class > nu.localhost.tapestry5.springsecurity.services.SecurityModule > 16/11/2011 14:58:37.401 [INFO ] [RegistryBuilder] - Adding module > definition for class org.apache.tapestry5.spring.SpringModule > 16/11/2011 14:58:37.520 [INFO ] [RegistryBuilder] - Adding module > definition for class org.apache.tapestry5.upload.services.UploadModule > 16/11/2011 14:58:37.547 [INFO ] [RegistryBuilder] - Adding module > definition for class org.apache.tapestry5.services.TapestryModule > 16/11/2011 14:58:37.626 [INFO ] [RegistryBuilder] - Adding module > definition for class org.apache.tapestry5.internal.services.InternalModule > 16/11/2011 14:58:37.650 [INFO ] [RegistryBuilder] - Adding module > definition for class a.cemiWebapp.services.AppModule > 16/11/2011 14:58:37.951 [ERROR] [OperationTrackerImpl] - Construction of > service 'Alias' has failed due to recursion: the service depends on itself > in some way. Please check > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, > String, AliasManager, Collection) (at TapestryModule.java:325) for > references to another service that is itself dependent on service 'Alias'. > 16/11/2011 14:58:37.952 [ERROR] [OperationTrackerImpl] - Operations trace: > 16/11/2011 14:58:37.954 [ERROR] [OperationTrackerImpl] - [ 1] Realizing > service ServletApplicationInitializer > 16/11/2011 14:58:37.955 [ERROR] [OperationTrackerImpl] - [ 2] Invoking > org.apache.tapestry5.services.TapestryModule.buildServletApplicationInitializer(Logger, > List, ApplicationInitializer) (at TapestryModule.java:1247) > 16/11/2011 14:58:37.956 [ERROR] [OperationTrackerImpl] - [ 3] Constructing > module class org.apache.tapestry5.services.TapestryModule > 16/11/2011 14:58:37.957 [ERROR] [OperationTrackerImpl] - [ 4] Determining > injection value for parameter #1 > (org.apache.tapestry5.ioc.services.PipelineBuilder) > 16/11/2011 14:58:37.958 [ERROR] [OperationTrackerImpl] - [ 5] Resolving > object of type org.apache.tapestry5.ioc.services.PipelineBuilder using > MasterObjectProvider > 16/11/2011 14:58:37.959 [ERROR] [OperationTrackerImpl] - [ 6] Realizing > service Alias > 16/11/2011 14:58:37.960 [ERROR] [OperationTrackerImpl] - [ 7] Invoking > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Collection) (at TapestryModule.java:325) > 16/11/2011 14:58:37.961 [ERROR] [OperationTrackerImpl] - [ 8] Determining > injection value for parameter #4 (java.util.Collection) > 16/11/2011 14:58:37.962 [ERROR] [OperationTrackerImpl] - [ 9] Collecting > unordered configuration for service Alias > 16/11/2011 14:58:37.963 [ERROR] [OperationTrackerImpl] - [10] Invoking > method > a.cemiWebapp.services.AppModule.contributeAlias(AuthenticationProcessingFilter, > Configuration) (at null:-1). > 16/11/2011 14:58:37.964 [ERROR] [OperationTrackerImpl] - [11] Determining > injection value for parameter #1 > (org.springframework.security.ui.webapp.AuthenticationProcessingFilter) > 16/11/2011 14:58:37.965 [ERROR] [OperationTrackerImpl] - [12] Resolving > object of type > org.springframework.security.ui.webapp.AuthenticationProcessingFilter using > MasterObjectProvider > 16/11/2011 14:58:37.966 [ERROR] [OperationTrackerImpl] - [13] Realizing > service Alias > 16/11/2011 14:58:37.972 [ERROR] [RecursiveServiceCreationCheckWrapper] - > Construction of service Alias failed: Error invoking service builder method > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Co > llection) (at TapestryModule.java:325) (for service 'Alias'): Error > invoking service contribution method > a.cemiWebapp.services.AppModule.contributeAlias(AuthenticationProcessingFilter, > Configuration): Exception constructing service 'Alia > s': Construction of service 'Alias' has failed due to recursion: the > service depends on itself in some way. Please check > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Collection) (at TapestryModule > .java:325) for references to another service that is itself dependent on > service 'Alias'. > java.lang.RuntimeException: Error invoking service builder method > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Collection) (at TapestryModule.java:325) (for service > 'Alias'): Error invoking servic > e contribution method > a.cemiWebapp.services.AppModule.contributeAlias(AuthenticationProcessingFilter, > Configuration): Exception constructing service 'Alias': Construction of > service 'Alias' has failed due to recursion: the service depend > s on itself in some way. Please check > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Collection) (at TapestryModule.java:325) for references to > another service that is itself dependent on service 'A > lias'. > the trace continues saying something like the last line. When I run the same application *without* obfuscation on maven's jetty I get everything working fine: 011-11-16 13:54:15.128:INFO::jetty-7.0.0.RC6 > 2011-11-16 13:54:19.344:INFO::No Transaction manager found - if your > webapp requires one, please configure one. > [INFO] ioc.RegistryBuilder Adding module definition for class > org.apache.tapestry5.ioc.services.TapestryIOCModule > [INFO] ioc.RegistryBuilder Adding module definition for class > org.apache.tapestry5.spring.SpringModule > [INFO] ioc.RegistryBuilder Adding module definition for class > nu.localhost.tapestry5.springsecurity.services.SecurityModule > [INFO] ioc.RegistryBuilder Adding module definition for class > org.apache.tapestry5.upload.services.UploadModule > [INFO] ioc.RegistryBuilder Adding module definition for class > org.apache.tapestry5.services.TapestryModule > [INFO] ioc.RegistryBuilder Adding module definition for class > org.apache.tapestry5.internal.services.InternalModule > [INFO] ioc.RegistryBuilder Adding module definition for class > ar.com.company.cemiWebapp.services.AppModule > [INFO] ioc.RegistryBuilder Adding module definition for class > ar.com.company.cemiWebapp.services.CustomSecurityModule > [INFO] SpringModuleDef.ApplicationContext Starting Spring (version 2.5.6) > 2011-11-16 13:54:20.648:INFO:/cemiWebapp:Initializing Spring root > WebApplicationContext[INFO] context.ContextLoader Root > WebApplicationContext: initialization started > take a look, after adding module AppModule here it's adding also CustomSecurityModule while when the error ocurrs..., this CustomSecurityModule is not called. sorry that I keep adding snippets but i 'd like to post the CustomSecurityModule code: package ar.com.company.cemiWebapp.services; > > import org.apache.tapestry5.ioc.OrderedConfiguration; > import org.apache.tapestry5.ioc.annotations.Inject; > import org.springframework.security.providers.AuthenticationProvider; > > import ar.com.company.lib.security.authentication.LdapCemiProvider; > > public class CustomSecurityModule { > > public static void > contributeProviderManager(OrderedConfiguration<AuthenticationProvider> > configuration, > @Inject LdapCemiProvider ldapImecProvider ) { > configuration.add("ldapCemiProvider", ldapCemiProvider); > } > > } > this is the AppModule code: package ar.com.company.cemiWebapp.services; > > import java.io.IOException; > > import > nu.localhost.tapestry5.springsecurity.services.SpringSecurityServices; > > import org.apache.tapestry5.SymbolConstants; > import org.apache.tapestry5.ioc.Configuration; > import org.apache.tapestry5.ioc.MappedConfiguration; > import org.apache.tapestry5.ioc.OrderedConfiguration; > import org.apache.tapestry5.ioc.ServiceBinder; > import org.apache.tapestry5.ioc.annotations.Local; > import org.apache.tapestry5.ioc.annotations.SubModule; > import org.apache.tapestry5.services.AliasContribution; > import org.apache.tapestry5.services.Request; > import org.apache.tapestry5.services.RequestFilter; > import org.apache.tapestry5.services.RequestHandler; > import org.apache.tapestry5.services.Response; > import org.slf4j.Logger; > import > org.springframework.security.ui.webapp.AuthenticationProcessingFilter; > > /** > * This module is automatically included as part of the Tapestry IoC > Registry, it's a good place to > * configure and extend Tapestry, or to place your own service definitions. > */ > > @SubModule(value = { CustomSecurityModule.class }) > public class AppModule > { > > public static void contributeApplicationDefaults( > MappedConfiguration<String, String> configuration) > { > configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en,es"); > configuration.add(SymbolConstants.PRODUCTION_MODE, "true"); > configuration.add(SymbolConstants.APPLICATION_VERSION, > "1.0.0.0-SNAPSHOT"); > // SPRING SECURITY > configuration.add("tapestry.default-cookie-max-age", "31536000"); > configuration.add("spring-security.loginform.url", "/login/login"); > configuration.add("spring-security.failure.url", > "/login/login/failed"); > configuration.add("spring-security.accessDenied.url", > "/error/forbidden"); > configuration.add("spring-security.check.url", > "/j_spring_security_check"); > configuration.add("spring-security.target.url", "/start"); > configuration.add("spring-security.rememberme.key", > "REMEMBERMEKEY"); > configuration.add("spring-security.force.ssl.login", "false"); > configuration.add("spring-security.anonymous.key", > "acegi_anonymous"); > configuration.add("spring-security.anonymous.attribute", > "anonymous,ROLE_ANONYMOUS"); > configuration.add("spring-security.password.salt", "DEADBEEF"); > } > > public static void contributeAlias( > @SpringSecurityServices > AuthenticationProcessingFilter authenticationProcessingFilter, > Configuration<AliasContribution<?>> configuration) { > > // Hace qeu isempre pase por start, asi siempre se sabe si es > usuario o admin > authenticationProcessingFilter.setAlwaysUseDefaultTargetUrl(true); > > > configuration.add(AliasContribution.create(AuthenticationProcessingFilter.class, > authenticationProcessingFilter)); > } > } > I 've tried this last class commenting out the contributeAlias method but, everything kept the same way... hope someone out there got some invoice for me :) cheers and thanks in advance! Nicolás.-