Hi, first of all, something seems to be off with your build as our std. jenkins build always does a fresh rebuild, and that one knows of the pax-web-tomcat submodule. see also here: http://ci.ops4j.org/jenkins/job/org.ops4j.pax.web/1150/ second I created a special branch containing your fixes https://github.com/ops4j/org.ops4j.pax.web/tree/PAXWEB-1105 the integration submodule fails, as Jetty is the first one it's https://github.com/ops4j/org.ops4j.pax.web/tree/PAXWEB-1105/pax-web-itest/pax-web-itest-container/pax-web-itest-container-jetty and all tests are failing due to nullpointer exception.
regards, Achim 2017-07-03 9:42 GMT+02:00 Lukasz Lech <[email protected]>: > Hello, > > > > Thank you for your time. > > > > As for integration tests, I haven’t checked – which module is that? I’ll > have a look. > > > > I’ve got generally issues getting that thing to compile. Issuing ‘mvn > install’ in project root did not work, because some modules are referenced, > but not listed in root pom (pax-web-tomcat AFAIR). It should be easy to > replicate via build against clean local maven repository with non-modified > settings.xml (Gitlab CI build, for example). I don’t know if it’s by-design > or not… I’ve got to run mvn install to install parent pom, and then do mvn > install for individual modules to get things to work. > > > > I’ll take a look on the samples, but as I see, those are separate modules. > Are there any tests for many modules cooperating (for example, separate > WebService servlet, separate authentication filter)? > > > > As for your path, I’ve tried to apply it via ‘git apply PAXWEB-1105.diff’ > both on master and my branch (https://github.com/llech/org. > ops4j.pax.web/tree/PAXWEB-1105) but I’ve failed with following error > message: > > > > D:\Projects\libs\org.ops4j.pax.web>git apply ..\..\PAXWEB-1105_improved. > diff > > ..\..\PAXWEB-1105_improved.diff:12: space before tab in indent. > > String PROPERTY_SESSION_COOKIE_SECURE = PID + > ".session.cookie.secure"; > > ..\..\PAXWEB-1105_improved.diff:13: space before tab in indent. > > String PROPERTY_SESSION_LAZY_LOAD = PID + ".session.lazyload"; > > ..\..\PAXWEB-1105_improved.diff:14: space before tab in indent. > > String PROPERTY_SESSION_STORE_DIRECTORY = PID + > ".session.storedirectory"; > > ..\..\PAXWEB-1105_improved.diff:16: trailing whitespace. > > > > ..\..\PAXWEB-1105_improved.diff:17: space before tab in indent. > > String PROPERTY_TEMP_DIR = "javax.servlet.context.tempdir"; > > error: patch failed: pax-web-api/src/main/java/org/ops4j/pax/web/service/ > WebContainerConstants.java:118 > > error: > pax-web-api/src/main/java/org/ops4j/pax/web/service/WebContainerConstants.java: > patch does not apply > > error: patch failed: pax-web-runtime/src/main/java/ > org/ops4j/pax/web/service/internal/ConfigurationImpl.java:49 > > error: pax-web-runtime/src/main/java/org/ops4j/pax/web/service/ > internal/ConfigurationImpl.java: patch does not apply > > error: patch failed: pax-web-runtime/src/main/java/ > org/ops4j/pax/web/service/internal/HttpServiceStarted.java:323 > > error: pax-web-runtime/src/main/java/org/ops4j/pax/web/service/ > internal/HttpServiceStarted.java: patch does not apply > > error: patch failed: pax-web-spi/src/main/java/org/ > ops4j/pax/web/service/spi/Configuration.java:129 > > error: > pax-web-spi/src/main/java/org/ops4j/pax/web/service/spi/Configuration.java: > patch does not apply > > > > Sorry, I’m not very advanced git user. > > > > As for DefaultSharedWebContainerContext, I was debugging a bit and I’ve > found a place where the HttpContext was used as a key in HashMap: > org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper (contexts). > Because the class had no equals/hashCode, even If after my patch, > createDefaultHttpContext has created SharedContext, for this map those were > distinct keys, so different ServletContextInfo was returned. > > > > However, adding equals/hashCode has not solved my issue. Apart for error > because of HttpServiceStarted (line 1161, instanceof should be called for > context, not httpContext?), it seems that BundleContext is used much deeper > as a key. > > > > My all attempts, anyway, are in my fork of repository on GitHub. > > > > Best regards, > > Lukasz Lech > > > > *From:* 'Achim Nierbeck' via OPS4J [mailto:[email protected]] > *Sent:* Sonntag, 2. Juli 2017 15:12 > *To:* [email protected] > *Subject:* Re: Pax-Web session listener > > > > Hi Lukasz, > > > > I checked your diff, with some changes everything regarding the versions > is running fine now. :) > Take a look at the attached patch. > > All integration tests are failing though, so it seems your changes aren't > complete. Might that be the reason your own tests aren't working correctly? > > regards, Achim > > > > > > 2017-06-30 22:57 GMT+02:00 Achim Nierbeck <[email protected]>: > > Hi Lukasz, > > > > this is definitely the right list to ask for. > > Right now I don't have much time or energy to look at your issue in a > closer detail. > > If in doubt about how a shared context is about to work, please take a > look at the samples and / or the integration tests. > There are some available and I hope they make some of your questions > clearer. If not I might have some more free cycles and a clearer mind about > that next week ... > > > > regards, Achim > > > > > > 2017-06-30 11:23 GMT+02:00 Lukasz Lech <[email protected]>: > > Hello, > > > > I hope this group is appropriate for asking this question, if not, my > apologize and please suggest if there is appropriate place to ask. > > > > I’ve submitted the issue https://ops4j1.jira.com/browse/PAXWEB-1105 > because I need to register session listener for WebServices created by > JaxrsPublisher. > > > > I’ve added parameter doing what is described in the issue, and after > deploying and modifying configuration file, the shared http context > instance is returned upon createDefaultHttpContext() call. (I’ve included > the git diff of changes I’ve made locally). > > > > 2 bundles: jaxrs publisher and my session listener registrator are > connected to http service: > > 2017-06-30T10:46:18,768 | INFO | pool-3-thread-1 | > HttpServiceFactoryImpl | 199 - org.ops4j.pax.web.pax-web-runtime > - 6.1.0.SNAPSHOT | Binding bundle: [com.eclipsesource.jaxrs.publisher > [14]] to http service > > 2017-06-30T10:46:20,644 | INFO | pool-3-thread-1 | > HttpServiceFactoryImpl | 199 - org.ops4j.pax.web.pax-web-runtime > - 6.1.0.SNAPSHOT | Binding bundle: [pax-web-configurator [204]] to http > service > > > > Jaxrs publisher registers servlet: > > 2017-06-30T10:46:20,010 | INFO | pool-3-thread-1 | > HttpServiceStarted | 199 - org.ops4j.pax.web.pax-web-runtime > - 6.1.0.SNAPSHOT | Register servlet (alias=/services). Using context > [ContextModel{id=org.ops4j.pax.web.service.spi.model.ContextModel-5,name=, > httpContext=org.ops4j.pax.web.service.internal. > DefaultSharedWebContainerContext@f7bb2fe,contextParams={}, > virtualHosts={},connectors={}}] > > > > My stuff registers session listener and session attribute listener: > > 2017-06-30T10:46:20,645 | INFO | pool-3-thread-1 | > HttpServiceStarted | 199 - org.ops4j.pax.web.pax-web-runtime > - 6.1.0.SNAPSHOT | Register event listener (listener=com.riag.taxcloud. > datamodel.channel.DatamodelSessionListener@18b607f1). Using context > [ContextModel{id=org.ops4j.pax.web.service.spi.model. > ContextModel-11,name=,httpContext=org.ops4j.pax.web.service.internal. > DefaultSharedWebContainerContext@4f5b090a,contextParams={}, > virtualHosts={},connectors={}}] > > 2017-06-30T10:46:20,655 | INFO | pool-3-thread-1 | > HttpServiceStarted | 199 - org.ops4j.pax.web.pax-web-runtime > - 6.1.0.SNAPSHOT | Register event listener (listener=com.riag.taxcloud. > datamodel.channel.DatamodelSessionAttributeListener@7e902b64). Using > context [ContextModel{id=org.ops4j.pax.web.service.spi.model. > ContextModel-13,name=,httpContext=org.ops4j.pax.web.service.internal. > DefaultSharedWebContainerContext@56ba6785,contextParams={}, > virtualHosts={},connectors={}}] > > > > This is how I register/unregister listeners: > > *public* *void* bindSessionListener(HttpSessionListener listener) { > > *LOGGER*.info("bindSessionListener {}", listener); > > webContainer.registerEventListener(listener, *null*); > > //servletContext.addListener(listener); IllegalStateException > > } > > > > *public* *void* unbindSessionListener(HttpSessionListener listener) > { > > *LOGGER*.info("unbindSessionListener {}", listener); > > *if* (listener == *null*) > > *return*; > > webContainer.unregisterEventListener(listener); > > } > > > > > > *public* *void* > bindSessionAttributeListener(HttpSessionAttributeListener > listener) { > > *LOGGER*.info("bindSessionAttributeListener {}", listener); > > webContainer.registerEventListener(listener, *null*); > > // servletContext.addListener(listener); > IllegalStateException > > } > > > > *public* *void* > unbindSessionAttributeListener(HttpSessionAttributeListener > listener) { > > *LOGGER*.info("unbindSessionAttributeListener {}", listener); > > *if* (listener == *null*) > > *return*; > > webContainer.unregisterEventListener(listener); > > } > > > > <?xml version=*"1.0"* encoding=*"UTF-8"*?> > > <blueprint xmlns=*"http://www.osgi.org/xmlns/blueprint/v1.0.0 > <http://www.osgi.org/xmlns/blueprint/v1.0.0>"* > > > xmlns:ext=*"http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0 > <http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0>"* > > > xmlns:cm=*"http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 > <http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0>"*> > > > > <bean id=*"paxWebConfigurator"* class= > *"com.riag.taxcloud.paxweb.configurator.PaxWebSessionConfigurator"*> > > <property name=*"context"* ref= > *"blueprintBundleContext"* /> > > <property name=*"webContainer"* ref=*"webContainer"*/> > > <property name=*"servletConfiguration"* ref= > *"jaxRsServletConfiguration"*/> > > <property name=*"servletContext"* ref= > *"jaxbServletContext"*/> > > </bean> > > > > <reference id=*"webContainer"* interface= > *"org.ops4j.pax.web.service.WebContainer"*/> > > > > <reference-list id=*"sessionListeners"* interface= > *"javax.servlet.http.HttpSessionListener"* availability=*"optional"*> > > <reference-listener bind-method=*"bindSessionListener"* > unbind-method=*"unbindSessionListener"* ref=*"paxWebConfigurator"* /> > > </reference-list> > > > > <reference-list id=*"sessionAttributeListeners"* interface= > *"javax.servlet.http.HttpSessionAttributeListener"* availability= > *"optional"*> > > <reference-listener bind-method= > *"bindSessionAttributeListener"* unbind-method= > *"unbindSessionAttributeListener"* ref=*"paxWebConfigurator"* /> > > </reference-list> > > > > </blueprint> > > > > However, the session listener is not called when new session is created by > WebService call. I’ve set a breakpoint within org.eclipse.jetty.server. > session.AbstractSessionManager.addSession(AbstractSession, boolean) and > _sessionListeners list is empty. > > > > Do I get something conceptually wrong? I thought that if both bundles will > register stuff using the same HttpContext, one of them could register > listener that would listen to events for servlets created by the second one. > > Is the concept of bundles working with different HttpContext somehow > deeply build-in in pax-web so I can’t change that behavior with such simple > ‘hack’? > > > > Anyway, my patch (after cleanup – I’ve increased log level to see what > happens and commented out the baselining so that I’m able to compile with > maven) seems to solve the JIRA issue. However I’m not sure if the JIRA > issue solves any issue, or I lack understanding the concept of ‘shared’ and > ‘non-shared’ HttpContext in pax-web…. > > > > Best regards, > > Lukasz Lech > > > > -- > -- > ------------------ > OPS4J - http://www.ops4j.org - [email protected] > > --- > You received this message because you are subscribed to the Google Groups > "OPS4J" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > > Apache Member > > Apache Karaf <http://karaf.apache.org/> Committer & PMC > OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & > Project Lead > blog <http://notizblog.nierbeck.de/> > > Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS> > > > > Software Architect / Project Manager / Scrum Master > > > > > > > > -- > > > Apache Member > > Apache Karaf <http://karaf.apache.org/> Committer & PMC > OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & > Project Lead > blog <http://notizblog.nierbeck.de/> > > Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS> > > > > Software Architect / Project Manager / Scrum Master > > > > -- > -- > ------------------ > OPS4J - http://www.ops4j.org - [email protected] > > --- > You received this message because you are subscribed to the Google Groups > "OPS4J" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > -- > -- > ------------------ > OPS4J - http://www.ops4j.org - [email protected] > > --- > You received this message because you are subscribed to the Google Groups > "OPS4J" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Apache Member Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead blog <http://notizblog.nierbeck.de/> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS> Software Architect / Project Manager / Scrum Master -- -- ------------------ OPS4J - http://www.ops4j.org - [email protected] --- You received this message because you are subscribed to the Google Groups "OPS4J" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
