I've raised ISIS-948 for this. On 21 October 2014 10:38, GESCONSULTOR - Óscar Bou <[email protected]> wrote:
> Thanks for your response, Dan. > > Have you seen the usage pattern at [1] using @PostConstruct and > @PreDestroy? > > Probably it could be used for both request-scoped and singleton services, > don't you think? > > > Thanks, > > Oscar > > > [1] http://es.slideshare.net/koneru9999/guavas-event-bus > > > > > El 21/10/2014, a las 11:33, Dan Haywood <[email protected]> > escribió: > > Hi Oscar, > > I need to think this through a bit... I have a strong suspicion that what > we have is too complex. My thinking is that I've implemented the > registration/deregistratrion for each request/transaction. However, given > that services are basically singletons, I'm wondering if there is any > reason not to just register them once at system startup and then leave it > at that. > > The thing that's uncertain to me is how any request-scoped services would > behave... these are implemented as Javassist wrappers around the underlying > service pojo, setup and torn down for each request. > > None of the Isis-provided request-scoped services (eg QueryResultsCache, > Scratchpad) subscribe to the event bus, so there would be no issue with > those. And my guess is that there's probably no-one in the user community > who has written their own. > > So perhaps a first-cut simplification would be to register all singleton > services with the event bus, but to ignore any request-scoped services. > > Thoughts? > > In the meantime, the good news is that you can register your own > implementation of EventBusService (via isis.properties) and it will be used > instead of the default impl. > > Dan > > > On 21 October 2014 10:10, GESCONSULTOR - Óscar Bou <[email protected] > > wrote: > >> >> There's a thread discussing the multiple registration and unregister >> exception thrown subjects here [1]. >> >> Perhaps a similar implementation on the EventBusService will also do the >> trick. >> >> Any opinions? >> >> >> Thanks, >> >> Oscar >> >> [1] https://code.google.com/p/guava-libraries/issues/detail?id=784 >> >> >> >> El 21/10/2014, a las 00:52, GESCONSULTOR - Óscar Bou < >> [email protected]> escribió: >> >> >> Just to clarify in order to being able to determine the root cause. >> >> We are currently registering the EventBusService as this: >> >> public class AssetsRiskInformation extends >> AbstractSingletonMultiTenantObjectRepositoryAndFactory<AssetRiskInformation> >> { >> >> ... >> >> // {{ injected: EventBusService >> private EventBusService eventBusService; >> >> public final void injectEventBusService(final EventBusService >> eventBusService) { >> if (this.eventBusService == null) { >> this.eventBusService = eventBusService; >> eventBusService.register(this); >> } >> } >> // }} >> >> } >> >> As seemed that the injectEventBusService(xxx) method was called more than >> once, the register(this) must verify it's the first time. >> >> Also, as seemed that the Service was "unregistered" by Isis when ending a >> transaction, as per: >> >> Caused by: java.lang.IllegalArgumentException: missing event subscriber >> for an annotated method. Is >> com.xms.framework.risk.domain.model.continuity.AssetsBCMInformation@552cc955 >> registered? >> at com.google.common.eventbus.EventBus.unregister(EventBus.java:230) >> at >> org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault.close(EventBusServiceDefault.java:63) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.closeOtherApplibServicesIfConfigured(IsisTransaction.java:776) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.closeServices(IsisTransaction.java:758) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.preCommitServices(IsisTransaction.java:748) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.preCommit(IsisTransaction.java:727) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.endTransaction(IsisTransactionManager.java:470) >> at >> com.xms.framework.devstudio.service.AbstractDevStudioDomainService.executeAction(AbstractDevStudioDomainService.java:184) >> >> >> >> We are not sure if the service that the service is re-registered when >> starting a new transaction: >> >> java.util.ConcurrentModificationException >> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894) >> at java.util.HashMap$KeyIterator.next(HashMap.java:928) >> at >> org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault.open(EventBusServiceDefault.java:55) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.initOtherApplibServicesIfConfigured(IsisTransactionManager.java:291) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.startTransaction(IsisTransactionManager.java:269) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:155) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:695) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:682) >> >> >> >> >> Despite that, I think that this concurrency exception should be avoided: >> >> java.util.ConcurrentModificationException >> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894) >> at java.util.HashMap$KeyIterator.next(HashMap.java:928) >> at >> org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault.open(EventBusServiceDefault.java:55) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.initOtherApplibServicesIfConfigured(IsisTransactionManager.java:291) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.startTransaction(IsisTransactionManager.java:269) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:155) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:695) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:682) >> >> >> >> On last page (22) of the following slideshare presentation [1], seems >> that once injected, the safest way to register and unregister it is by >> means of the @PostConstruct and @PreDestroy annotations, but not sure if >> that would eliminate the exceptions thrown. >> >> >> HTH, >> >> Oscar >> >> >> [1] http://es.slideshare.net/koneru9999/guavas-event-bus >> >> >> >> >> >> >> >> >> El 20/10/2014, a las 22:31, GESCONSULTOR - Óscar Bou < >> [email protected]> escribió: >> >> Hi to all. >> >> Our app is using the EventBusServiceDefault implementation and the >> following exception is thrown occasionally: >> >> java.util.ConcurrentModificationException >> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894) >> at java.util.HashMap$KeyIterator.next(HashMap.java:928) >> at >> org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault.open(EventBusServiceDefault.java:55) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.initOtherApplibServicesIfConfigured(IsisTransactionManager.java:291) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.startTransaction(IsisTransactionManager.java:269) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:155) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:695) >> at >> com.xms.framework.api.domain.model.isis.AbstractXMSDomainObjectRepositoryAndFactory.doFindByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:682) >> >> >> After that, some objects domain services that were previously registered >> seem to not being found, is it possible? >> >> Exceptions like the following one are found on the webapp log: >> >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) >> at >> org.apache.isis.core.webapp.IsisSessionFilter$SessionState$1.handle(IsisSessionFilter.java:320) >> at >> org.apache.isis.core.webapp.IsisSessionFilter.doFilter(IsisSessionFilter.java:409) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) >> at >> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) >> at >> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) >> at >> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) >> at >> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) >> at >> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) >> at >> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) >> at >> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) >> at >> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) >> at >> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) >> at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) >> at >> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) >> at >> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) >> at >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >> at java.lang.Thread.run(Thread.java:724) >> Caused by: java.lang.IllegalArgumentException: missing event subscriber >> for an annotated method. Is >> com.xms.framework.risk.domain.model.continuity.AssetsBCMInformation@552cc955 >> registered? >> at com.google.common.eventbus.EventBus.unregister(EventBus.java:230) >> at >> org.apache.isis.core.runtime.services.eventbus.EventBusServiceDefault.close(EventBusServiceDefault.java:63) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.closeOtherApplibServicesIfConfigured(IsisTransaction.java:776) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.closeServices(IsisTransaction.java:758) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.preCommitServices(IsisTransaction.java:748) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransaction.preCommit(IsisTransaction.java:727) >> at >> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.endTransaction(IsisTransactionManager.java:470) >> at >> com.xms.framework.devstudio.service.AbstractDevStudioDomainService.executeAction(AbstractDevStudioDomainService.java:184) >> ... 76 more >> 2014-10-20 11:26:15,092 INFO >> [org.jasig.cas.services.DefaultServicesManagerImpl] - <Reloading registered >> services.> >> 2014-10-20 11:26:15,092 INFO >> [org.jasig.cas.services.DefaultServicesManagerImpl] - <Loaded 4 services.> >> 11:26:31,572 [JSONRPCController ajp-bio-18009-exec-358 ERROR] >> missing event subscriber for an annotated method. Is >> com.xms.framework.risk.domain.model.*AssetsRiskInformation*@2f6ce962 >> registered? >> com.xms.framework.api.exception.XMSRuntimeException: missing event >> subscriber for an annotated method. Is com.xms.framework.risk.domain.model. >> *AssetsRiskInformation*@2f6ce962 registered? >> at >> com.xms.framework.devstudio.service.AbstractDevStudioDomainService.executeAction(AbstractDevStudioDomainService.java:189) >> at >> com.xms.framework.impl.devstudio.service.XMSDomainCustomizeMethodsService.assetsBCMInformation_businessContinuityInformation(XMSDomainCustomizeMethodsService.java:16396) >> at sun.reflect.GeneratedMethodAccessor10181.invoke(Unknown Source) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:606) >> at >> com.wavemaker.runtime.service.reflect.ReflectServiceType.invokeMethod(ReflectServiceType.java:115) >> >> >> >> >> >> Not sure if last exception is caused by first one, and if first one >> solution is "simply" to declare a concurrent Set... >> >> Thanks in advance! >> >> >> >> *Óscar Bou Bou* >> Responsable de Producto >> Auditor Jefe de Certificación ISO 27001 en BSI >> CISA, CRISC, APMG ISO 20000, ITIL-F >> >> <contactenos.html.gif> 902 900 231 / 620 267 520 >> <Pasted Graphic 1.tiff> http://www.twitter.com/oscarbou >> >> <gesdatos-software.gif> http://es.linkedin.com/in/oscarbou >> >> <blog.png> http://www.GesConsultor.com <http://www.gesconsultor.com/> >> >> <gesconsultor_logo_blue_email.png> >> >> >> Este mensaje y los ficheros anexos son confidenciales. Los mismos >> contienen información reservada que no puede ser difundida. Si usted ha >> recibido este correo por error, tenga la amabilidad de eliminarlo de su >> sistema y avisar al remitente mediante reenvío a su dirección electrónica; >> no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. >> Su dirección de correo electrónico junto a sus datos personales constan >> en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la >> de mantener el contacto con Ud. Si quiere saber de qué información >> disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo >> enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a >> la siguiente dirección: Gesdatos Software, S.L. , Paseo de la Castellana, >> 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 >> (Valencia). Asimismo, es su responsabilidad comprobar que este mensaje o >> sus archivos adjuntos no contengan virus informáticos, y en caso que los >> tuvieran eliminarlos. >> >> >> >> >> >> >> >> *Óscar Bou Bou* >> Responsable de Producto >> Auditor Jefe de Certificación ISO 27001 en BSI >> CISA, CRISC, APMG ISO 20000, ITIL-F >> >> 902 900 231 / 620 267 520 >> http://www.twitter.com/oscarbou >> >> http://es.linkedin.com/in/oscarbou >> >> http://www.GesConsultor.com <http://www.gesconsultor.com/> >> >> >> >> Este mensaje y los ficheros anexos son confidenciales. Los mismos >> contienen información reservada que no puede ser difundida. Si usted ha >> recibido este correo por error, tenga la amabilidad de eliminarlo de su >> sistema y avisar al remitente mediante reenvío a su dirección electrónica; >> no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. >> Su dirección de correo electrónico junto a sus datos personales constan >> en un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la >> de mantener el contacto con Ud. Si quiere saber de qué información >> disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo >> enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a >> la siguiente dirección: Gesdatos Software, S.L. , Paseo de la Castellana, >> 153 bajo - 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 >> (Valencia). Asimismo, es su responsabilidad comprobar que este mensaje o >> sus archivos adjuntos no contengan virus informáticos, y en caso que los >> tuvieran eliminarlos. >> >> >> >> >> >> > > > *Óscar Bou Bou* > Responsable de Producto > Auditor Jefe de Certificación ISO 27001 en BSI > CISA, CRISC, APMG ISO 20000, ITIL-F > > 902 900 231 / 620 267 520 > http://www.twitter.com/oscarbou > > http://es.linkedin.com/in/oscarbou > > http://www.GesConsultor.com <http://www.gesconsultor.com/> > > > > Este mensaje y los ficheros anexos son confidenciales. Los mismos > contienen información reservada que no puede ser difundida. Si usted ha > recibido este correo por error, tenga la amabilidad de eliminarlo de su > sistema y avisar al remitente mediante reenvío a su dirección electrónica; > no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. > Su dirección de correo electrónico junto a sus datos personales constan en > un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de > mantener el contacto con Ud. Si quiere saber de qué información disponemos > de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un > escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente > dirección: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - > 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). > Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos > adjuntos no contengan virus informáticos, y en caso que los tuvieran > eliminarlos. > > > > > >
