Hello Dave

Your logs are really helpful, I've found (in some.txt) that a servlet named
"com.candatag.repository.servlet.RepoMenu" is registered into OCM-3
(/admin):

[paxweb-config-1-thread-1] INFO
org.ops4j.pax.web.service.internal.HttpServiceEnabled - Registering
ServletModel{id=ServletModel-9,name='com.candatag.repository.servlet.RepoMenu',urlPatterns=[/repo],contexts=[{WB,OCM-3,com.candatag.web.security.admin.services.AdminWebSecurity,/admin}]}

but only later this OCM-3 is passed to Jetty:

[paxweb-config-1-thread-1] INFO
org.ops4j.pax.web.service.jetty.internal.JettyServerController - Receiving
Batch{"Registration of
OsgiContextModel{WB,id=OCM-3,name='com.candatag.web.security.admin.services.AdminWebSecurity',path='/admin',bundle=com.candatag.web.security.admin,ref={org.osgi.service.http.context.ServletContextHelper,
com.candatag.web.security.admin.services.AdminWebSecurity}={service.id=55,
osgi.http.whiteboard.context.name=com.candatag.web.security.admin.services.AdminWebSecurity,
service.bundleid=18, service.scope=bundle,
component.name=com.candatag.web.security.admin.zoo.impl.AdminContext,
osgi.http.whiteboard.context.path=/admin, component.id=21}}", size=2}
[paxweb-config-1-thread-1] INFO
org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper - Creating new
Jetty context for
ServletContextModel{id=ServletContextModel-12,contextPath='/admin'}
[paxweb-config-1-thread-1] INFO
org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper - Adding
OsgiContextModel{WB,id=OCM-3,name='com.candatag.web.security.admin.services.AdminWebSecurity',path='/admin',bundle=com.candatag.web.security.admin,ref={org.osgi.service.http.context.ServletContextHelper,
com.candatag.web.security.admin.services.AdminWebSecurity}={service.id=55,
osgi.http.whiteboard.context.name=com.candatag.web.security.admin.services.AdminWebSecurity,
service.bundleid=18, service.scope=bundle,
component.name=com.candatag.web.security.admin.zoo.impl.AdminContext,
osgi.http.whiteboard.context.path=/admin, component.id=21}} to
o.o.p.w.s.j.i.PaxWebServletContextHandler@48beedf5{/admin,null,STOPPED}

I'll ensure that this doesn't lead to problems.

I'll check further, bu if you could please set DEBUG log level for entire
"org.ops4j.pax.web" logger and add timestamps, we'd get more information.

In server.txt I think everything looks fine though (if I read the DTOs
correctly):

Servlet Context {"name":"default", "contextPath":"/", ..., "serviceId":39,
"servletDTOs":[{"patterns":["/osgi/started"], ...,
"name":"com.candatag.k8s.zoo.servlet.ReadyProbe", ...], ...}
 - {"patterns":["/osgi/started"], ...,
"name":"com.candatag.k8s.zoo.servlet.ReadyProbe", ...}

Servlet Context {"name":"default", "contextPath":"/", ..., "serviceId":0,
"servletDTOs":[], ...}
 - <no servlets>

Servlet Context
{"name":"com.candatag.web.security.admin.services.AdminWebSecurity",
"contextPath":"/admin", ..., "serviceId":40, "servletDTOs":[
 - {"patterns":["/repo/localservice/console/services/view"], ...,
"name":"com.candatag.osgi.console.servlet.ViewService", ...},
 - {"patterns":["/repo/localservice/console/services"], ...,
"name":"com.candatag.osgi.console.servlet.Services", ...},
 - {"patterns":["/repo/localservice/console/services/check"], ...,
"name":"com.candatag.osgi.console.servlet.SystemCheck", ...},
 - {"patterns":["/repo/localservice/console/run"], ...,
"name":"com.candatag.osgi.console.servlet.RunService", }
], ...}

so "/osgi/started" servlet is registered to "/" context, which is (from
Whiteboard point of view) "backed" by OCM-3 (serviceId=39) - the one
registered by you, not the default one from pax-web-extender-whiteboard.

However, in "some.txt", I see what I mentioned - that a servlet
registration is being handled before OCM-3 is processed. Indeed, in code,
the OsgiContextModel is added to Whiteboard internal structures, before
it's passed further. And in between, a servlet may refer to it. Checking.

regards
Grzegorz Grzybek


pon., 19 wrz 2022 o 21:36 Dave Smith <dave.sm...@candata.com> napisał(a):

> Never responds to the GET request.  I have a helper method that displays
> the ServletDTO. It does not show up there either. It does seem to be a
> timing issue.
>
> I have attached a couple of log dumps. The checks of the DTO (They are the
> last lines of the log entries) happen about 10 seconds after the container
> starts.
> In server.txt there is one servlet that gets dropped from the new default
> context
> In some.txt there are 2 servlets that get dropped and then there are 2
> that are registered successfully .
>
>  Dave
>
> On Mon, Sep 19, 2022 at 2:06 PM Grzegorz Grzybek <gr.grzy...@gmail.com>
> wrote:
>
>> Hi. See inline
>>
>> pon., 19 wrz 2022 o 20:21 Dave Smith <dave.sm...@candata.com> napisał(a):
>>
>>> I have been doing a little more testing. I have an activator method like
>>> this ...
>>>
>>> Thread context = new Thread(()->{
>>> Hashtable<String, Object> aDic = new Hashtable<>();
>>> aDic.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME,
>>> "default");
>>> aDic.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH, "/");
>>> aDic.put(Constants.SERVICE_RANKING,Integer.MAX_VALUE);
>>> ctx.registerService(ServletContextHelper.class, new DefaultContxt(),
>>> aDic);
>>>
>>> });
>>>
>>> CountDownLatch latch = new CountDownLatch(1);
>>> Thread s2 = new Thread(()->{
>>>
>>> Hashtable<String, Object> aDic = new Hashtable<>();
>>> aDic.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "test2");
>>> aDic.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN,
>>> "/test2");
>>> ctx.registerService(Servlet.class, new TestServlet("Test 2"), aDic);
>>> latch.countDown();
>>> });
>>>
>>> s2.start();
>>> latch.await();
>>> Thread.sleep(400);
>>> context.start();
>>>
>>> On my machine any value where sleep is <400 the context is always
>>> started first otherwise the servlet gets started first and gets unresgtered
>>> and re-registered into the new context. I am guessing it takes longer to
>>> init the servlet and I wonder if the Context is getting updated during the
>>> servlet init process. (That is what it would seem like from the logs)...
>>>
>>> Let me know if you need any more info ...
>>>
>>
>> I'll check the order of operations tomorrow. The point is that in Pax Web
>> 8 I've created several such tests, including SCR one (
>> https://github.com/ops4j/org.ops4j.pax.web/tree/web-8.0.9/samples/samples-whiteboard/whiteboard-ds
>> - see the readme describing fundamental difficulty with SCR) where contexts
>> and servlets are registered, but eventually everything is fine.
>>
>> So a question - is your servlet eventually responding to a GET request?
>> Don't just look at the logs for registration/unregistration of the context.
>> The lines you've sent:
>>
>> Unegistering
>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-1,name='default',path='/',bundle=org.ops4j.pax.web.pax-web-extender-whiteboard,context=(supplier)}}
>> as OSGi service for "/" context path
>>
>> Registering
>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-2,name='default',path='/',bundle=com.candatag.web.util,ref={org.osgi.service.http.context.ServletContextHelper}={
>> service.id=57, osgi.http.whiteboard.context.name=default,
>> service.bundleid=19, service.scope=bundle, service.ranking=2147483647,
>> component.name=com.candatag.web.util.zoo.impl.NoSecurityContextImpl,
>> osgi.http.whiteboard.context.path=/, component.id=22}}} as OSGi service
>> for "/" context path
>>
>> are information that different object of OsgiServletContext class is
>> registered as the OSGi service of javax.servlet.ServletContext interface.
>> This is according to chapter 128.3.4 (
>> https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.war.html#i3078599)
>> of Web Applications Specification, but has nothing to do with Whiteboard -
>> the underlying Jetty/Tomcat/Undertow context stays started.
>>
>> regards
>> Grzegorz Grzybek
>>
>>
>>>
>>>
>>> Dave
>>>
>>>
>>>
>>> On Mon, Sep 19, 2022 at 12:52 PM Grzegorz Grzybek <gr.grzy...@gmail.com>
>>> wrote:
>>>
>>>> Hello
>>>>
>>>> It's all loosely coupled - a "servlet registration" knows the LDAP
>>>> filter (by default "osgi.http.whiteboard.context.select=(
>>>> osgi.http.whiteboard.context.name=default)") for it's contexts. And
>>>> each time the new context is registered, the web elements with matching
>>>> filter are being re-registered.
>>>>
>>>> The fact that you're overriding an "OSGi Context"
>>>> (ServletContextHelper) within the same context path "/" means that the
>>>> servlet context is restarted (because there's higher-ranked
>>>> OsgiServletContext), but the servlet should be simply kept in existing "/"
>>>> ServletContext. I know - lots of contexts.
>>>>
>>>> Today I was checking few other
>>>> https://github.com/ops4j/org.ops4j.pax.web/issues, but I remember
>>>> about your scenario - I should have an explanation tomorrow.
>>>>
>>>> regards
>>>> Grzegorz Grzybek
>>>>
>>>> pon., 19 wrz 2022 o 19:42 dave....@candata.com <dave.sm...@candata.com>
>>>> napisał(a):
>>>>
>>>>> Still trying to get a test case but I do believe it is a threading
>>>>> issue ... What I find strange is the servlet that disappears gets
>>>>> registered like this
>>>>>
>>>>> [paxweb-config-1-thread-1] INFO
>>>>> org.ops4j.pax.web.service.internal.HttpServiceEnabled - Registering
>>>>> ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]}
>>>>> Receiving Batch{"Registration of
>>>>> ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]}",
>>>>> size=1}
>>>>> Adding servlet
>>>>> ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]}
>>>>>
>>>>> Now what is ODD is that OCM-2 is not registered yet!  It follows in
>>>>> the logs
>>>>>
>>>>>  Receiving Batch{"Registration of
>>>>> OsgiContextModel{WB,id=OCM-2,name='default',path='/',bundle=com.candatag.web.util,ref={org.osgi.service.http.context.ServletContextHelper}={
>>>>> service.id=39, osgi.http.whiteboard.context.name=default,
>>>>> service.bundleid=17, service.scope=bundle, service.ranking=2147483647,
>>>>> component.name=com.candatag.web.util.zoo.impl.NoSecurityContextImpl,
>>>>> osgi.http.whiteboard.context.path=/, component.id=1}}", size=1}
>>>>>
>>>>> So how does the servlet know that this new default context is coming?
>>>>> In my test harness I see the servlet unregistering and then registering
>>>>> again when the context changes...
>>>>>
>>>>> It looks like we are half pregnant, somebody knows the context is
>>>>> there but it is in an unregistered state so the servlet modal does not get
>>>>> attached.
>>>>>
>>>>> Dave
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Sunday, September 18, 2022 at 8:50:28 AM UTC-5 dave....@candata.com
>>>>> wrote:
>>>>>
>>>>>> My other question would be if you are "Unregistering " the default
>>>>>> context should it still show up in the
>>>>>> HttpServiceRuntime.getRuntimeDTO().servletContextDTOs ? It does now
>>>>>>
>>>>>> Dave
>>>>>>
>>>>>>
>>>>>> On Sunday, September 18, 2022 at 8:43:33 AM UTC-5
>>>>>> dave....@candata.com wrote:
>>>>>>
>>>>>>> It will be a little tricky to send my whole project in , let me see
>>>>>>> what I can do , however I have reviewed the test cases in the link 
>>>>>>> provided
>>>>>>> and it looks like you are not covering my case ...
>>>>>>>
>>>>>>> I do not see a test where  ...
>>>>>>>
>>>>>>> Register the default handler ->   HttpContext defaultContext = wc.
>>>>>>> createDefaultHttpContext(); , not sure if this also creates a 
>>>>>>> ServletContextHelper
>>>>>>> wrapper as well
>>>>>>>
>>>>>>> Then create a servlet that attaches to it , but do not call the
>>>>>>> servlet , just check it is added
>>>>>>>
>>>>>>> Register the default override with a high service ranking .
>>>>>>>
>>>>>>> See if this happens
>>>>>>> org.ops4j.pax.web.service.spi.servlet.OsgiServletContext -
>>>>>>> Unegistering
>>>>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-1,name='default',path='/'
>>>>>>> org.ops4j.pax.web.service.spi.servlet.OsgiServletContext -
>>>>>>> Registering
>>>>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-2,name='default',path='/',
>>>>>>>
>>>>>>> And then see if the servlet is in the new context ...
>>>>>>>
>>>>>>> The override testcases seem to all create the override first before
>>>>>>> the first servlet is registered OR you are changing the path in the 
>>>>>>> default
>>>>>>> context ...
>>>>>>>
>>>>>>> Dave
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Sep 18, 2022 at 8:06 AM Grzegorz Grzybek <gr.gr...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello
>>>>>>>>
>>>>>>>> Actually, the initial reason of entire Pax Web 8 refactoring was
>>>>>>>> the context handling - ability to register one servlet into multiple
>>>>>>>> contexts and multiple servlets into one context.
>>>>>>>> There are really lot of integration tests that show exactly this.
>>>>>>>>
>>>>>>>> I'd have to see your example and check what's the problem there -
>>>>>>>> you seem to correctly override "default" whiteboard context with "/" 
>>>>>>>> path
>>>>>>>> and higher ranking, so it should work.
>>>>>>>>
>>>>>>>>
>>>>>>>> https://github.com/ops4j/org.ops4j.pax.web/tree/web-8.0.9/samples/samples-whiteboard/whiteboard-ds
>>>>>>>> is and example of SCR registration of multiple web elements and 
>>>>>>>> contexts.
>>>>>>>>
>>>>>>>> This integration test (
>>>>>>>> https://github.com/ops4j/org.ops4j.pax.web/blob/web-8.0.9/pax-web-itest/pax-web-itest-server/src/test/java/org/ops4j/pax/web/itest/server/whiteboard/WhiteboardAndHttpServiceTest.java#L198)
>>>>>>>> - overridenDefaultContextsWithWhiteboardServlet() shows how
>>>>>>>> "default" + "/" context is overriden.
>>>>>>>>
>>>>>>>> Could you please share your project? It can be attached to an issue
>>>>>>>> in https://github.com/ops4j/org.ops4j.pax.web/issues
>>>>>>>>
>>>>>>>> kind regards
>>>>>>>> Grzegorz Grzybek
>>>>>>>>
>>>>>>>> niedz., 18 wrz 2022 o 14:16 Dave Smith <dave....@candata.com>
>>>>>>>> napisał(a):
>>>>>>>>
>>>>>>>>> What is the correct way to override the default servlet context? I
>>>>>>>>> am doing this...
>>>>>>>>>
>>>>>>>>> @Component(service = ServletContextHelper.class,property = {
>>>>>>>>> Constants.SERVICE_RANKING+":Integer="+Integer.MAX_VALUE})
>>>>>>>>> @HttpWhiteboardContext(name = "default",path = "/")
>>>>>>>>> public class NoSecurityContextImpl extends ServletContextHelper
>>>>>>>>> {
>>>>>>>>>
>>>>>>>>> What I am seeing is if a servlet is registered BEFORE the new
>>>>>>>>> default context it just seems to disappear, anything after gets put 
>>>>>>>>> in the
>>>>>>>>> new default. When I call HttpServiceRuntime.servletDTOs I see the 
>>>>>>>>> original
>>>>>>>>> default context with no servlets attached to it and my overridden one 
>>>>>>>>> with
>>>>>>>>> the servlets that were registered after.
>>>>>>>>> failedServletDTOs,failedServletContextDTOs are empty. If I remove my
>>>>>>>>> override the servlets appear.
>>>>>>>>>
>>>>>>>>> What is weird is it looks like the servlet is getting put into the
>>>>>>>>> right context if I read the log correctly ...
>>>>>>>>>
>>>>>>>>> Registering
>>>>>>>>> ServletModel{id=ServletModel-4,name='com.candatag.k8s.zoo.servlet.ReadyProbe',urlPatterns=[/osgi/started],contexts=[{WB,OCM-2,default,/}]}
>>>>>>>>>
>>>>>>>>> INFO org.ops4j.pax.web.service.spi.servlet.OsgiServletContext -
>>>>>>>>> Unegistering
>>>>>>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-1,name='default',path='/',bundle=org.ops4j.pax.web.pax-web-extender-whiteboard,context=(supplier)}}
>>>>>>>>> as OSGi service for "/" context path
>>>>>>>>>
>>>>>>>>> Registering
>>>>>>>>> OsgiServletContext{model=OsgiContextModel{WB,id=OCM-2,name='default',path='/',bundle=com.candatag.web.util,ref={org.osgi.service.http.context.ServletContextHelper}={
>>>>>>>>> service.id=57, osgi.http.whiteboard.context.name=default,
>>>>>>>>> service.bundleid=19, service.scope=bundle, service.ranking=
>>>>>>>>> 2147483647 <(214)%20748-3647>, 
>>>>>>>>> component.name=com.candatag.web.util.zoo.impl.NoSecurityContextImpl,
>>>>>>>>> osgi.http.whiteboard.context.path=/, component.id=22}}} as OSGi
>>>>>>>>> service for "/" context path
>>>>>>>>>
>>>>>>>>> Dave
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> --
>>>>>>>>> ------------------
>>>>>>>>> OPS4J - http://www.ops4j.org - op...@googlegroups.com
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>> 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 ops4j+un...@googlegroups.com.
>>>>>>>>> To view this discussion on the web visit
>>>>>>>>> https://groups.google.com/d/msgid/ops4j/CA%2BFCLu2SbiSKmN7W3-ZQqHLYCA67vF104UCVWtU77-63tcarUA%40mail.gmail.com
>>>>>>>>> <https://groups.google.com/d/msgid/ops4j/CA%2BFCLu2SbiSKmN7W3-ZQqHLYCA67vF104UCVWtU77-63tcarUA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>> --
>>>>>>>> --
>>>>>>>> ------------------
>>>>>>>> OPS4J - http://www.ops4j.org - op...@googlegroups.com
>>>>>>>>
>>>>>>>> ---
>>>>>>>> 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 ops4j+un...@googlegroups.com.
>>>>>>>>
>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/ops4j/CAAdXmhrMU6_5ABFc0oxevK%2BjuZVhOzxdK0cqvyTz6pCWZAM7Yg%40mail.gmail.com
>>>>>>>> <https://groups.google.com/d/msgid/ops4j/CAAdXmhrMU6_5ABFc0oxevK%2BjuZVhOzxdK0cqvyTz6pCWZAM7Yg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>> --
>>>>> --
>>>>> ------------------
>>>>> OPS4J - http://www.ops4j.org - ops4j@googlegroups.com
>>>>>
>>>>> ---
>>>>> 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 ops4j+unsubscr...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/ops4j/e972d47a-f8b3-4dec-9ba1-94549e29a250n%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/ops4j/e972d47a-f8b3-4dec-9ba1-94549e29a250n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>>> --
>>>> ------------------
>>>> OPS4J - http://www.ops4j.org - ops4j@googlegroups.com
>>>>
>>>> ---
>>>> 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 ops4j+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/ops4j/CAAdXmhqzknu%3DwfrL5d-hWbHe%2BGa%2Bazbx6Yg__OTuC683B8VbMA%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/ops4j/CAAdXmhqzknu%3DwfrL5d-hWbHe%2BGa%2Bazbx6Yg__OTuC683B8VbMA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> --
>>> ------------------
>>> OPS4J - http://www.ops4j.org - ops4j@googlegroups.com
>>>
>>> ---
>>> 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 ops4j+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ops4j/CA%2BFCLu1OssPACzuqNDCpxT3AGz%3DRjarNubJUi%2BPXuog2D0aWMA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/ops4j/CA%2BFCLu1OssPACzuqNDCpxT3AGz%3DRjarNubJUi%2BPXuog2D0aWMA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> --
>> ------------------
>> OPS4J - http://www.ops4j.org - ops4j@googlegroups.com
>>
>> ---
>> 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 ops4j+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ops4j/CAAdXmhrP%3DUawM0_EYyg%2B3NuyMDjz%3DRzqvAP%3D%3DfTkcXUXgJH6jw%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ops4j/CAAdXmhrP%3DUawM0_EYyg%2B3NuyMDjz%3DRzqvAP%3D%3DfTkcXUXgJH6jw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - ops4j@googlegroups.com
>
> ---
> 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 ops4j+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ops4j/CA%2BFCLu3Wm1mXtGYBGHr7MoLpo83%2BQbd0TMHNheKiWii_at-CsQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/ops4j/CA%2BFCLu3Wm1mXtGYBGHr7MoLpo83%2BQbd0TMHNheKiWii_at-CsQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
------------------
OPS4J - http://www.ops4j.org - ops4j@googlegroups.com

--- 
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 ops4j+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ops4j/CAAdXmhqq_TT_JpR9fEvY6beMETTnVi4aZOvjgM5xdsJ2n0%2BheA%40mail.gmail.com.

Reply via email to