Well, this is why there are passivation listeners and stuff in the Servlet spec.
We could easily also send a specific CDI event for it. But there is no such event in the CDI spec so far. The @Destryoed and @BeforeDestroyed are specifically for _destroyal_. LieGrue, strub > Am 08.02.2018 um 12:12 schrieb Romain Manni-Bucau <rmannibu...@gmail.com>: > > Hmm, it is more vicious cause if the session is not destroyed you can still > want to trigger this event. Guess it is another case where both cases are > desirable (i want to clean up related state of the session...as well as I > don't want to touch the session)... > > Since the appcontext destroy can be used as a workaround I think it is fine > to challenge them now. > > > Romain Manni-Bucau > @rmannibucau <https://twitter.com/rmannibucau> | Blog > <https://rmannibucau.metawerx.net/> | Old Blog > <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> | > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book > <https://www.packtpub.com/application-development/java-ee-8-high-performance> > > 2018-02-08 11:37 GMT+01:00 Mark Struberg <strub...@yahoo.de.invalid>: > >> Yea, it's mainly testing whether the @Observes >> @BeforeDestroyed(SessionScoped.class) >> and @Destroyed(SessionScoped.class) do work. >> The tests itself are fine, but instead of relying that the sessions get >> destroyed at server shutdown they could also have used >> Session.invalidate()... >> >> LieGrue, >> strub >> >> >>> Am 08.02.2018 um 11:30 schrieb Romain Manni-Bucau <rmannibu...@gmail.com >>> : >>> >>> 2018-02-08 11:28 GMT+01:00 Mark Struberg <strub...@yahoo.de.invalid>: >>> >>>> All the embedded tests are now green. >>>> >>>> I'm now working on cdi-tomes (webprofile TCK). >>>> So far we have 10 errors, but a few TCK tests are broken because they >>>> wrongly assume that a container stop also kills the Session. >>>> >>> >>> We can make them passing. We already did this kind of hack but since all >>> container have pluggability here - for good reasons - I agree they >>> shouldn't be in the TCK. >>> >>> >>>> I've challenged those tests. Still have to review every red test... >>>> >>>> LieGrue, >>>> strub >>>> >>>> >>>>> Am 08.02.2018 um 11:19 schrieb Matthew Broadhead < >>>> matthew.broadh...@nbmlaw.co.uk>: >>>>> >>>>> nearly there! >>>>> >>>>> On 07/02/2018 11:57, Mark Struberg wrote: >>>>>> [ERROR] Failures: >>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>> [INFO] >>>>>> [ERROR] Tests run: 1567, Failures: 1, Errors: 0, Skipped: 5 >>>>>> >>>>>> >>>>>> Wohuuu, 1 to go! >>>>>> >>>>>> LieGrue, >>>>>> strub >>>>>> >>>>>>> Am 02.02.2018 um 21:54 schrieb Mark Struberg >> <strub...@yahoo.de.INVALID >>>>> : >>>>>>> >>>>>>> And the last status: >>>>>>> >>>>>>> [ERROR] Failures: >>>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>> [ERROR] ContainerLifeCycleEventRuntimeInvocationTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>> [ERROR] BuiltinMetadataEEBeanTest>Arquillian.run:164-> >>>> interceptedBeanForEEComponentIsNullInInterceptor:61 expected [true] but >>>> found [false] >>>>>>> [INFO] >>>>>>> [ERROR] Tests run: 1570, Failures: 3, Errors: 0, Skipped: 22 >>>>>>> >>>>>>> Reminder: this is for cdi-embedded only for now. >>>>>>> But once we are through that the rest is usually much easier. >>>>>>> >>>>>>> LieGrue, >>>>>>> strub >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Am 01.02.2018 um 23:18 schrieb Mark Struberg <strub...@yahoo.de>: >>>>>>>> >>>>>>>> We are moving... >>>>>>>> >>>>>>>> [ERROR] Failures: >>>>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] ObserverMethodInvocationContextTest>Arquillian.run:164-> >>>> testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] SessionBeanObserverMethodInvoc >> ationContextTest>Arquillian. >>>> run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] SessionBeanStaticObserverMethodInvocationContextTest> >>>> Arquillian.run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] ContainerLifeCycleEventRuntimeInvocationTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] BuiltinMetadataEEBeanTest>Arquillian.run:164-> >>>> interceptedBeanForEEComponentIsNullInInterceptor:61 expected [true] but >>>> found [false] >>>>>>>> [INFO] >>>>>>>> [ERROR] Tests run: 1573, Failures: 6, Errors: 0, Skipped: 22 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Thursday, 1 February 2018, 14:37:17 CET, Mark Struberg >>>> <strub...@yahoo.de.INVALID> wrote: >>>>>>>> >>>>>>>> >>>>>>>> With a bit help from Romains we are now down to 10 failing tests: >>>>>>>> >>>>>>>> >>>>>>>> ERROR] Failures: >>>>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] ObserverMethodInvocationContextTest>Arquillian.run:164-> >>>> testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] SessionBeanObserverMethodInvoc >> ationContextTest>Arquillian. >>>> run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] SessionBeanStaticObserverMethodInvocationContextTest> >>>> Arquillian.run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] ContainerLifeCycleEventRuntimeInvocationTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] BuiltinMetadataEEBeanTest>Arquillian.run:164-> >>>> interceptedBeanForEEComponentIsNullInInterceptor:61 expected [true] but >>>> found [false] >>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >> testDecoratorMetadata:91 >>>> » EJB >>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >> testInterceptorMetadata:78 >>>> » EJB >>>>>>>> [ERROR] RemoteBusinessDisposalMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [ERROR] RemoteBusinessProducerMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [INFO] >>>>>>>> [ERROR] Tests run: 1577, Failures: 10, Errors: 0, Skipped: 26 >>>>>>>> >>>>>>>> LieGrue,strub >>>>>>>> >>>>>>>> On Thursday, 1 February 2018, 00:21:58 CET, Mark Struberg >>>> <strub...@yahoo.de.INVALID> wrote: >>>>>>>> >>>>>>>> Fixed the new CDI-2.0 <trim/> feature. >>>>>>>> >>>>>>>> Now down to 16 ^^ >>>>>>>> >>>>>>>> [ERROR] Failures: >>>>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] ResourceAdapterArchiveTest>Arquillian.run:164-> >> testInjection:79 >>>> expected object to not be null >>>>>>>> [ERROR] ResourceAdapterArchiveTest>Arquillian.run:164-> >>>> testResolution:86->AbstractTest.getUniqueBean:133->AbstractTest. >> resolveUniqueBean:169 >>>> » UnsatisfiedResolution >>>>>>>> [ERROR] EJBAsyncObserverMethodRemoteBusinessMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [ERROR] EJBObserverMethodRemoteBusinessMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [ERROR] ObserverMethodInvocationContextTest>Arquillian.run:164-> >>>> testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] EnterpriseSecurityContextPropagationInAsyncObserverTest> >>>> Arquillian.run:164->testSecurityContextNotPropagated:68 expected [true] >>>> but found [false] >>>>>>>> [ERROR] EnterpriseSecurityContextPropagationInAsyncObserverTest> >>>> Arquillian.run:164->testSecurityContextPropagation:59 NullPointer >>>>>>>> [ERROR] SessionBeanObserverMethodInvocationContextTest>Arquillian. >>>> run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] SessionBeanStaticObserverMethodInvocationContextTest> >>>> Arquillian.run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>> [ERROR] ContainerLifeCycleEventRuntimeInvocationTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Deployment >>>>>>>> [ERROR] BuiltinMetadataEEBeanTest>Arquillian.run:164-> >>>> interceptedBeanForEEComponentIsNullInInterceptor:61 expected [true] but >>>> found [false] >>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >> testDecoratorMetadata:91 >>>> » EJB >>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >> testInterceptorMetadata:78 >>>> » EJB >>>>>>>> [ERROR] RemoteBusinessDisposalMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [ERROR] RemoteBusinessProducerMethodTest>Arquillian. >> arquillianBeforeClass:109 >>>> » Runtime >>>>>>>> [INFO] >>>>>>>> [ERROR] Tests run: 1585, Failures: 16, Errors: 0, Skipped: 30 >>>>>>>> >>>>>>>> >>>>>>>> LieGrue, >>>>>>>> strub >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> Am 31.01.2018 um 11:20 schrieb Romain Manni-Bucau < >>>> rmannibu...@gmail.com>: >>>>>>>>> >>>>>>>>> From memory, until you need jsf or advanced web stuff all should >> run >>>> in >>>>>>>>> embedded mode. That said we can need to tune jaas to match the >>>> expectations >>>>>>>>> of the tcks. >>>>>>>>> >>>>>>>>> >>>>>>>>> Romain Manni-Bucau >>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog >>>>>>>>> <http://rmannibucau.wordpress.com> | Github <https://github.com/ >>>> rmannibucau> | >>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> >>>>>>>>> >>>>>>>>> 2018-01-31 11:00 GMT+01:00 Mark Struberg <strub...@yahoo.de.invalid >>>>> : >>>>>>>>> >>>>>>>>>> Txs JL! >>>>>>>>>> >>>>>>>>>> Btw, this is the current status: >>>>>>>>>> >>>>>>>>>> [ERROR] Failures: >>>>>>>>>> [ERROR] EnterpriseDefaultBeanDiscoveryModeTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Deployment >>>>>>>>>> [ERROR] ResourceAdapterArchiveTest>Arquillian.run:164-> >>>> testInjection:79 >>>>>>>>>> expected object to not be null >>>>>>>>>> [ERROR] ResourceAdapterArchiveTest>Arquillian.run:164-> >>>>>>>>>> testResolution:86->AbstractTest.getUniqueBean:133->AbstractTest. >>>> resolveUniqueBean:169 >>>>>>>>>> » UnsatisfiedResolution >>>>>>>>>> [ERROR] TrimmedBeanArchiveTest>Arquillian. >> arquillianBeforeClass:109 >>>> » >>>>>>>>>> Deployment can't... >>>>>>>>>> [ERROR] EnterpriseTrimmedBeanArchiveTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Deployment >>>>>>>>>> [ERROR] EJBAsyncObserverMethodRemoteBu >> sinessMethodTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Runtime >>>>>>>>>> [ERROR] EJBObserverMethodRemoteBusinessMethodTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Runtime >>>>>>>>>> [ERROR] ObserverMethodInvocationContextTest>Arquillian.run:164-> >>>>>>>>>> testTransactionalObserverMethod:55 » EJB >>>>>>>>>> [ERROR] EnterpriseSecurityContextPropagationInAsyncObserverTest> >>>>>>>>>> Arquillian.run:164->testSecurityContextNotPropagated:68 expected >>>> [true] >>>>>>>>>> but found [false] >>>>>>>>>> [ERROR] EnterpriseSecurityContextPropagationInAsyncObserverTest> >>>>>>>>>> Arquillian.run:164->testSecurityContextPropagation:59 NullPointer >>>>>>>>>> [ERROR] SessionBeanObserverMethodInvoc >> ationContextTest>Arquillian. >>>>>>>>>> run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>>>> [ERROR] SessionBeanStaticObserverMethodInvocationContextTest> >>>>>>>>>> Arquillian.run:164->testTransactionalObserverMethod:55 » EJB >>>>>>>>>> [ERROR] BuiltinMetadataEEBeanTest>Arquillian.run:164-> >>>>>>>>>> interceptedBeanForEEComponentIsNullInInterceptor:61 expected >>>> [true] but >>>>>>>>>> found [false] >>>>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >>>> testDecoratorMetadata:91 >>>>>>>>>> » EJB >>>>>>>>>> [ERROR] BuiltinMetadataSessionBeanTest>Arquillian.run:164-> >>>> testInterceptorMetadata:78 >>>>>>>>>> » EJB >>>>>>>>>> [ERROR] RemoteBusinessDisposalMethodTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Runtime >>>>>>>>>> [ERROR] RemoteBusinessProducerMethodTest>Arquillian. >>>> arquillianBeforeClass:109 >>>>>>>>>> » Runtime >>>>>>>>>> [INFO] >>>>>>>>>> [ERROR] Tests run: 1587, Failures: 17, Errors: 0, Skipped: 19 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I'll fix the trim test next. >>>>>>>>>> But I need a bit help with the others as I'm not quite sure >> whether >>>> those >>>>>>>>>> tests are supposed to work in cdi-embedded or only in the >>>> full-profile. >>>>>>>>>> >>>>>>>>>> We have some failures like: >>>>>>>>>> >>>>>>>>>> Caused by: javax.ejb.EJBAccessException: Unauthorized Access by >>>> Principal >>>>>>>>>> Denied >>>>>>>>>> at org.apache.openejb.core.stateless.StatelessContainer. >>>>>>>>>> invoke(StatelessContainer.java:189) >>>>>>>>>> at org.apache.openejb.core.ivm.EjbObjectProxyHandler. >>>>>>>>>> synchronizedBusinessMethod(EjbObjectProxyHandler.java:265) >>>>>>>>>> at org.apache.openejb.core.ivm.EjbObjectProxyHandler. >>>>>>>>>> businessMethod(EjbObjectProxyHandler.java:260) >>>>>>>>>> at org.apache.openejb.core.ivm. >> EjbObjectProxyHandler._invoke( >>>>>>>>>> EjbObjectProxyHandler.java:89) >>>>>>>>>> at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke( >>>>>>>>>> BaseEjbProxyHandler.java:347) >>>>>>>>>> at org.jboss.cdi.tck.tests.event. >> observer.context.enterprise. >>>>>>>>>> staticMethod.Printer$$LocalBeanProxy.printSuccess( >>>>>>>>>> org/jboss/cdi/tck/tests/event/observer/context/enterprise/ >>>>>>>>>> staticMethod/Printer.java) >>>>>>>>>> at org.jboss.cdi.tck.tests.event. >> observer.context.enterprise. >>>>>>>>>> staticMethod.Student.printSuccess(Student.java:33) >>>>>>>>>> >>>>>>>>>> Who might be able to help a bit? >>>>>>>>>> We could also do a hangout session to hang over the code together. >>>>>>>>>> Done this yesterday with Reinhard Sandtner to fix a few Extension >>>> bugs. >>>>>>>>>> >>>>>>>>>> LieGrue, >>>>>>>>>> strub >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> Am 31.01.2018 um 10:38 schrieb Jean-Louis Monteiro < >>>>>>>>>> jlmonte...@tomitribe.com>: >>>>>>>>>>> yes yank the profile if not usable and if no one should use it to >>>> avoid >>>>>>>>>>> mistakes >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Jean-Louis Monteiro >>>>>>>>>>> http://twitter.com/jlouismonteiro >>>>>>>>>>> http://www.tomitribe.com >>>>>>>>>>> >>>>>>>>>>> On Wed, Jan 31, 2018 at 10:23 AM, Mark Struberg >>>>>>>>>> <strub...@yahoo.de.invalid> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Then we should at least add a README? >>>>>>>>>>>> Or at least document that profile in the pom. >>>>>>>>>>>> >>>>>>>>>>>> LieGrue, >>>>>>>>>>>> strub >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> Am 31.01.2018 um 09:59 schrieb Romain Manni-Bucau < >>>>>>>>>> rmannibu...@gmail.com >>>>>>>>>>>>> : >>>>>>>>>>>>> >>>>>>>>>>>>> 2018-01-31 9:34 GMT+01:00 Mark Struberg >>>> <strub...@yahoo.de.invalid>: >>>>>>>>>>>>> >>>>>>>>>>>>>> Yes I thought something similar when trashing 2 hours to try >> to >>>> get >>>>>>>>>> the >>>>>>>>>>>>>> JAXB generator running. >>>>>>>>>>>>>> Just to figure it might be broken beyond repair... >>>>>>>>>>>>>> Thanks that you at least confirm this view and spare me >> further >>>>>>>>>>>>>> investigation. >>>>>>>>>>>>>> >>>>>>>>>>>>>> There are 2 options on the table >>>>>>>>>>>>>> >>>>>>>>>>>>>> 1.) Do a quick hack and add the <trim/> support directly in >> the >>>> code >>>>>>>>>>>>>> >>>>>>>>>>>>> +1 >>>>>>>>>>>>> >>>>>>>>>>>>>> 2.) Invest more time and fix the JAXB source generator setup >>>>>>>>>>>>>> >>>>>>>>>>>>> No point today to do it. Can be worse keeping it as a comment >>>> somewhere >>>>>>>>>>>> for >>>>>>>>>>>>> future specs if needed but not for existing one IMHO. >>>>>>>>>>>>> >>>>>>>>>>>>>> I'm tempted to go 1. >>>>>>>>>>>>>> But of course I'm happy if someone finds a bit time to fix the >>>>>>>>>> generator >>>>>>>>>>>>>> setup. >>>>>>>>>>>>>> David, you did this initially. Is it worth it and can you free >>>> up some >>>>>>>>>>>>>> time for it? >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> LieGrue, >>>>>>>>>>>>>> strub >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Am 31.01.2018 um 09:20 schrieb Romain Manni-Bucau < >>>>>>>>>>>> rmannibu...@gmail.com >>>>>>>>>>>>>>> : >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Mark, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> For simple updates like that I tend to update the sax parser >>>> manually >>>>>>>>>>>>>>> (that's what we did for JSF since most of the model is not >>>> handled by >>>>>>>>>>>>>> tomee >>>>>>>>>>>>>>> anyway). >>>>>>>>>>>>>>> For CDI we are supposed to still use JAXB (since there can be >>>> a lot >>>>>>>>>> of >>>>>>>>>>>>>>> beans.xml): >>>>>>>>>>>>>>> https://github.com/apache/tomee/blob/master/container/ >>>>>>>>>>>>>> openejb-core/src/main/java/org/apache/openejb/config/ >>>>>>>>>>>>>> ReadDescriptors.java#L681 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Romain Manni-Bucau >>>>>>>>>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog >>>>>>>>>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog >>>>>>>>>>>>>>> <http://rmannibucau.wordpress.com> | Github < >>>> https://github.com/ >>>>>>>>>>>>>> rmannibucau> | >>>>>>>>>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2018-01-31 8:17 GMT+01:00 Mark Struberg >>>> <strub...@yahoo.de.invalid>: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi folks! >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I've come down to just 18 failing tests in tck/cdi-embedded. >>>>>>>>>>>>>>>> Most of them are EE related (missing privileges exceptions >>>> etc) >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> There is one left with the CDI integration: <trim/> support. >>>>>>>>>>>>>>>> This needs a change in the beans.xml schema. >>>>>>>>>>>>>>>> I've added the changes and moved to >> container/openejb-jee/src/ >>>>>>>>>>>>>>>> main/resources/META-INF/schema/beans_2_0.xsd >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> But now I totally fail to generate the JAXB sources. >>>>>>>>>>>>>>>> I've found the maven profile to start the generator, but it >>>> simply >>>>>>>>>>>> fails >>>>>>>>>>>>>>>> with an Exception. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Anyone able to help out? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> The work is done in fb_tomee8 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Btw, I also tried the attached patch to move to valid urls >> at >>>>>>>>>> least... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> LieGrue, >>>>>>>>>>>>>>>> strub >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>> >>>> >>>> >> >>