[
https://issues.apache.org/jira/browse/FELIX-4984?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14742093#comment-14742093
]
Pierre De Rop commented on FELIX-4984:
--------------------------------------
David, I just created the FELIX-5032 for the small issue in the
ComponentTestBase that I was talking about previously.
and now, with the patch attached to FELIX-5032, I sometimes have some
FELIX-4984 failures, even using your patch:
{code}
org.ops4j.pax.exam.invoker.junit[org.ops4j.pax.exam.invoker.junit.internal.ContainerTestRunner]
: running test_A11_B0n_delayed_B_first_ABoundToAtMostOneB in reactor
log level: 1 D=17:22:28,75 T=Thread[SCR Component Actor,5,main]: Unexpected
problem executing task Late binding task of reference
[org.apache.felix.scr.integration.components.felix4984.A] for
dependencyManagers [org.apache.felix.scr.impl.ComponentRegistry$Entry@4b48a495]
java.lang.NullPointerException
at
org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethodLate(DependencyManager.java:1567)
at
org.apache.felix.scr.impl.ComponentRegistry$1.run(ComponentRegistry.java:570)
at
org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:99)
at java.lang.Thread.run(Thread.java:745)
log level: 2 D=17:22:28,79 T=Thread[FelixDispatchQueue,5,main]: FrameworkEvent:
PACKAGE REFRESHED
[org.ops4j.exec.DefaultJavaRunner] : Shutdown in progress...
[org.ops4j.exec.DefaultJavaRunner] : Unwrapping stream I/O.
[org.ops4j.exec.DefaultJavaRunner] : Platform has been shutdown.
[org.ops4j.pax.exam.spi.reactors.ReactorManager] : suite finished
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 5.502 sec <<<
FAILURE!
Results :
Failed tests:
test_A11_B0n_delayed_B_first_ABoundToAtMostOneB(org.apache.felix.scr.integration.Felix4984Test):
unexpected warning or error logged: Unexpected problem executing task Late
binding task of reference
[org.apache.felix.scr.integration.components.felix4984.A] for
dependencyManagers [org.apache.felix.scr.impl.ComponentRegistry$Entry@4b48a495]
{code}
so, may be it's better to wait for your final patch that will submit the
"invoke bidn late" calls only when the activation succeeds.
> Issues in CircularReferenceTest
> -------------------------------
>
> Key: FELIX-4984
> URL: https://issues.apache.org/jira/browse/FELIX-4984
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Reporter: Pierre De Rop
> Priority: Minor
> Fix For: scr-2.0.2
>
> Attachments: felix-4984.diff,
> org.apache.felix.scr.integration.CircularReferenceTest.test_A11_B0n_delayed_B_first.log,
>
> org.apache.felix.scr.integration.Felix4984Test.test_A11_B0n_delayed_B_first_ABoundToAtMostOneB-NPE-with_patch.log.gz,
>
> org.apache.felix.scr.integration.Felix4984Test.test_A11_B0n_delayed_B_first_ABoundToAtMostOneB.log
>
>
> This issue is described in the dev mailing list, in
> http://www.mail-archive.com/[email protected]/msg37281.html
> while working on FELIX-4955, I sometimes have the CircularReferenceTest
> failing.
> Everything is located in my sandbox, in
> http://svn.apache.org/repos/asf/felix/sandbox/pderop/dependencymanager.ds/
> To reproduce the test:
> install eclipse Mars
> install latest bndtools using "install new software" from Eclipse, and then
> add latest stable release from http://dl.bintray.com/bndtools/bndtools/latest/
> install a java8 runtime (I'm using oracle java8 1.8.0_45, 64 bit version).
> The whole new dependencymanager.ds project is intented to be build in java8.
> checkout my sandbox:
> $ svn checkout
> http://svn.apache.org/repos/asf/felix/sandbox/pderop/dependencymanager.ds
> go to "dependencymanager.ds" directory:
> $ cd dependencymanager.ds/
> due to a pending issue, you have to first build the DM bnd annotation plugin
> before importing the project into eclipse. to do so, just type:
> $ ./gradlew org.apache.felix.dependencymanager.annotation:jar
> now launch eclipse and use the the dependencymanager/ds directory as the
> workspace dir for Eclipse.
> switch to BndTools perpective.
> import the bndtools project into eclipse: Import -> Existing Projects into
> Workspace -> Browse -> select dependencymanager.ds directory (it is proposed
> by default).
> normally, and hopefully, everything should compile fine. Junit tests are left
> in org.apache.felix.dependencymanager.ds/ directory and integration tests are
> located in org.apache.felix.dependencymanager.ds.itest/ directory.
> Open under Eclipse the
> org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/CircularReferenceTest.java
> I slightly modified it in order to dump stack traces when A component is
> bound multiple times to the same B instance.
> (I believe that only delayed components are concerned by the issue).
> For example, in the test_A11_B0n_delayed_A_first() method, I added a call to
> "assertABoundToOneB(a)" like this:
> {code}
> @Test
> public void test_A11_B0n_delayed_A_first() throws InvalidSyntaxException
> {
> String componentNameA = "4.1.A.1.1.dynamic";
> final ComponentConfigurationDTO componentA =
> findComponentConfigurationByName( componentNameA,
> ComponentConfigurationDTO.SATISFIED );
> String componentNameB = "4.1.B.0.n.dynamic";
> final ComponentConfigurationDTO componentB =
> findComponentConfigurationByName( componentNameB,
> ComponentConfigurationDTO.SATISFIED );
> delay();
> A a = getServiceFromConfiguration(componentA, A.class);
> assertABoundToOneB(a);
> delay(); //async binding of a to b after circular ref detected
> B b = getServiceFromConfiguration(componentB, B.class);
> assertEquals( 1, b.getAs().size() );
> }
> {code}
> the "assertABoundToOneB(a)" call does this:
> {code}
> private void assertABoundToOneB(A a) {
> if (a.getBs().size() != 1) {
> System.err.println("detected problem ...");
> a.dumpStackTracesWhenBWasBound();
> }
> assertEquals( 1, a.getBs().size());
> }
> {code}
> And stacktraces will be dumped in order to determine why A was bound two
> times to the same B instance.
> it's possible that you have to run several times the "CircularReferenceTest"
> test before having a failure (and some stacktraces).
> Thanks.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)