I've looked but must be missing something, I don't see the deadlock in the 
thread dump.  In DS I added some code to do a thread dump on lock acquisition 
timeout (AbstractComponentManager obtainLock/dumpThreads)   Is there any chance 
you could add something like this to the felix service registry and see what 
comes out?

thanks
david jencks

On Sep 25, 2013, at 12:21 AM, "Rudolph, Dirk" <[email protected]> 
wrote:

> Thanks for your response. 
> 
> The state of the bundle is ACTIVE. Unfortunately the original Exception 
> causing the previously attacked ISE isn't passed to the ISE itself and 
> therefore not in the stacktrace:
> 
> ERROR: [Thread[FelixDispatchQueue,5,main]] Waited too long to acquire the 
> global lock own by Thread[FelixPackageAdmin,5,main]; giving up.
> java.lang.IllegalStateException: [Thread[Blueprint Extender: 3,5,main]] 
> Waited too long to acquire lock for bundle ******* [516] owned by null 
> (lockcount=0)
>        at org.apache.felix.framework.Felix.acquireBundleLock(Felix.java:4756)
>        at org.apache.felix.framework.Felix.registerService(Felix.java:2820)
>        at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:251)
>        at 
> org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:229)
>        at 
> org.apache.aries.jpa.container.context.impl.PersistenceContextManager.registerEM(PersistenceContextManager.java:286)
>        at 
> org.apache.aries.jpa.container.context.impl.PersistenceContextManager.registerContext(PersistenceContextManager.java:200)
>        at 
> org.apache.aries.jpa.container.context.impl.GlobalPersistenceManager.registerContext(GlobalPersistenceManager.java:123)
>        at sun.reflect.GeneratedMethodAccessor398.invoke(Unknown Source)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>        at java.lang.reflect.Method.invoke(Unknown Source)
>        at 
> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
>        at 
> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
>        at $Proxy12.registerContext(Unknown Source)
>        at 
> org.apache.aries.jpa.blueprint.aries.impl.NSHandler.decorate(NSHandler.java:235)
>        at sun.reflect.GeneratedMethodAccessor136.invoke(Unknown Source)
>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>        at java.lang.reflect.Method.invoke(Unknown Source)
>        at 
> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
>        at 
> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
>        at $Proxy9.decorate(Unknown Source)
>        at 
> org.apache.aries.blueprint.parser.Parser.decorateCustomNode(Parser.java:1273)
>        at 
> org.apache.aries.blueprint.parser.Parser.handleCustomElements(Parser.java:1263)
>        at 
> org.apache.aries.blueprint.parser.Parser.parseBeanMetadata(Parser.java:601)
>        at 
> org.apache.aries.blueprint.parser.Parser.parseBlueprintElement(Parser.java:393)
>        at 
> org.apache.aries.blueprint.parser.Parser.loadComponents(Parser.java:326)
>        at org.apache.aries.blueprint.parser.Parser.populate(Parser.java:277)
>        at 
> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:315)
>        at 
> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:261)
>        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
>        at java.util.concurrent.FutureTask.run(Unknown Source)
>        at 
> org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
>        at 
> org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)
>        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
>        at java.util.concurrent.FutureTask.run(Unknown Source)
>        at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown
>  Source)
>        at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
>  Source)
>        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>        at java.lang.Thread.run(Unknown Source)
> 
> This happens because m_globalLockThread isn't null. Just for my 
> understanding: Why is it necessary for the FelixPackageAdmin Thread to hold a 
> global lock and not a bundle lock only?
> 
> Just for summary: A quick solution would be to split the bundle in one 
> containing blueprint and one containing SCR. Another solution would be trying 
> to update org.apache.felix.scr to the latest release (with adobe CQ this can 
> cause "some" of problems ;-))
> 
> Attached you will find the full thread dump, captured on ISE breakpoint in 
> registerService().
> 
> Thanks a lot,
> Dirk
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: David Jencks [mailto:[email protected]] 
> Gesendet: Mittwoch, 25. September 2013 00:23
> An: [email protected]
> Betreff: Re: Are bundles containing declerative services and blueprint 
> possible?
> 
> I can't see any reason all known osgi component frameworks shouldn't all work 
> at once in one bundle. (e.g DS, IPOJO, Blueprint)
> 
> Is there a thread dump for when this problem originally occurs?  Do you know 
> what state the bundle is in when blueprint gets in trouble?  What got the 
> bundle into this state?
> 
> If there's a deadlock between package admin and something else we should fix 
> it.  (I recall running into some deadlocks like this a long time ago, but 
> don't recall the details).  Please also try with DS trunk as there are a 
> _lot_ of changes even from 1.6.2 and any fix would be made against trunk.
> 
> thanks
> david jencks
> 
> On Sep 24, 2013, at 3:06 PM, Michael Täschner <[email protected]> wrote:
> 
>> Hi Dirk,
>> 
>>>> So we assume that the scr bundle activation cannot coexists with the
>> blueprint container for the same bundle. Is this right?
>> 
>> Yes, your assumption is correct. One bundle should be managed by one 
>> dependency injection implementation only. The DI is managed by the DI 
>> frameworks via extender pattern on startup and depending on which 
>> extender gets notified first (via bundlelistener) will try to initialize the 
>> bundle.
>> Therefore you will run into locks or IllegalStateException depending 
>> on the current order of extenders (blueprint, scr, ...) which runs first.
>> 
>> Your approach might work - but I don't think it is good style - if the 
>> "link" between the beans/components is realized via OSGi service 
>> registry (e.g. registering a service using blueprint and a reference 
>> in DS and vice
>> versa) still I would strongly suggest sticking to one framework inside 
>> one bundle.
>> 
>> The benefit of OSGi is the central service registry broker which 
>> allows providers and consumers to use their preferred DI approach 
>> inside their implementations independently from each other.
>> 
>> Best Regards,
>> Michael
>> 
>> 
>> 2013/9/24 Rudolph, Dirk <[email protected]>
>> 
>>> Hi all,
>>> 
>>> 
>>> 
>>> in our project we make use of blueprint and declarative services. 
>>> Both of them are part of one bundle running on Apache Felix 
>>> (3.0.8.B006, CQ
>>> Version) with Apache Aries 1.0.1 (blueprint, jpa)
>>> 
>>> 
>>> 
>>> Now we noticed, that there are some non-deterministic 
>>> IllegalStateExceptions when we redeploy bundles  and sometime when we 
>>> deploy bundles the first time. (stacktrace attached)
>>> 
>>> 
>>> 
>>> 24.09.2013 12:12:12.990 *ERROR* [Blueprint Extender: 1] 
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl Unable to 
>>> start blueprint container for bundle *******************
>>> java.lang.IllegalStateException: Can only register services while 
>>> bundle is active or activating.
>>> 
>>>               at
>>> org.apache.felix.framework.Felix.registerService(Felix.java:2824)
>>> 
>>>               at
>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleCo
>>> ntextImpl.java:251)
>>> 
>>>               at
>>> org.apache.felix.framework.BundleContextImpl.registerService(BundleCo
>>> ntextImpl.java:229)
>>> 
>>>               at
>>> org.apache.aries.jpa.container.context.impl.PersistenceContextManager
>>> .registerEM(PersistenceContextManager.java:286)
>>> 
>>>               at
>>> org.apache.aries.jpa.container.context.impl.PersistenceContextManager
>>> .registerContext(PersistenceContextManager.java:200)
>>> 
>>>               at
>>> org.apache.aries.jpa.container.context.impl.GlobalPersistenceManager.
>>> registerContext(GlobalPersistenceManager.java:123)
>>> 
>>>               at 
>>> sun.reflect.GeneratedMethodAccessor398.invoke(Unknown
>>> Source)
>>> 
>>>               at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>>> Source)
>>> 
>>>               at java.lang.reflect.Method.invoke(Unknown Source)
>>> 
>>>               at
>>> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:5
>>> 4)
>>> 
>>>               at
>>> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119
>>> )
>>> 
>>>               at $Proxy12.registerContext(Unknown Source)
>>> 
>>>               at
>>> org.apache.aries.jpa.blueprint.aries.impl.NSHandler.decorate(NSHandle
>>> r.java:235)
>>> 
>>>               at 
>>> sun.reflect.GeneratedMethodAccessor136.invoke(Unknown
>>> Source)
>>> 
>>>               at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>>> Source)
>>> 
>>>               at java.lang.reflect.Method.invoke(Unknown Source)
>>> 
>>>               at
>>> org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:5
>>> 4)
>>> 
>>>               at
>>> org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119
>>> )
>>> 
>>>               at $Proxy9.decorate(Unknown Source)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.decorateCustomNode(Parser.ja
>>> va:1273)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.handleCustomElements(Parser.
>>> java:1263)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.parseBeanMetadata(Parser.jav
>>> a:601)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.parseBlueprintElement(Parser
>>> .java:393)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.loadComponents(Parser.java:3
>>> 26)
>>> 
>>>               at
>>> org.apache.aries.blueprint.parser.Parser.populate(Parser.java:277)
>>> 
>>>               at
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(Blu
>>> eprintContainerImpl.java:315)
>>> 
>>>               at
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(Bluep
>>> rintContainerImpl.java:261)
>>> 
>>>               at
>>> java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>>> 
>>>               at 
>>> java.util.concurrent.FutureTask$Sync.innerRun(Unknown
>>> Source)
>>> 
>>>               at java.util.concurrent.FutureTask.run(Unknown Source)
>>> 
>>>               at
>>> org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(Execu
>>> torServiceWrapper.java:106)
>>> 
>>>               at
>>> org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.r
>>> un(DiscardableRunnable.java:48)
>>> 
>>>               at
>>> java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>>> 
>>>               at 
>>> java.util.concurrent.FutureTask$Sync.innerRun(Unknown
>>> Source)
>>> 
>>>               at java.util.concurrent.FutureTask.run(Unknown Source)
>>> 
>>>               at
>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
>>> access$201(Unknown
>>> Source)
>>> 
>>>               at
>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.
>>> run(Unknown
>>> Source)
>>> 
>>>               at
>>> java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>>> 
>>>               at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>>> 
>>>               at java.lang.Thread.run(Unknown Source)
>>> 
>>> 
>>> 
>>> After a while of debugging we figured out that the service cannot be 
>>> registered because Felix fails to obtain the lock on the bundle. The 
>>> lock is hold by the Thread running the Apache Felix 
>>> BundleComponentActivator (FelixPackageAdmin). So we assume that the 
>>> scr bundle activation cannot coexists with the blueprint container for the 
>>> same bundle. Is this right?
>>> Would it be possible to trigger the blueprint container creation 
>>> after scr has been processed or vice versa?
>>> 
>>> 
>>> 
>>> Thanks so far,
>>> 
>>> 
>>> Dirk Rudolph
>>> 
>>> 
>>> 
>>> 
>>> T-Systems Multimedia Solutions GmbH
>>> Organisationseinheit CCS
>>> Dirk Rudolph
>>> Software-Entwicklung, OCJP
>>> 
>>> Hausanschrift: Riesaer Straße 5, 01129 Dresden
>>> Postanschrift: Postfach 10 02 24, 01072 Dresden
>>> +49 351 2820-5363       (Tel)
>>> E-Mail: [email protected] 
>>> <mailto:[email protected]
>>>> 
>>> Internet: http://www.t-systems-mms.com <http://www.t-systems-mms.de/>
>>> 
>>> T-Systems Multimedia Solutions GmbH
>>> 
>>> Aufsichtsrat: Klaus Werner (Vorsitzender)
>>> 
>>> Geschäftsführung: Peter Klingenburg, Susanne Heger
>>> 
>>> Handelsregister: Amtsgericht Dresden HRB 11433
>>> 
>>> Sitz der Gesellschaft: Dresden
>>> 
>>> Ust-IdNr.: DE 811 807 949
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
> <threaddump-bp.txt>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to