[ 
http://issues.ops4j.org/browse/QI-231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13272#action_13272
 ] 

Niclas Hedhman commented on QI-231:
-----------------------------------

Problem has been located!!!

UsesInstance has a public static member named NO_USES, which is supposed to 
contain an empty collection. BUT, the Qi4j Runtime is confusing this with an 
actual instance, and at certain points populate that instance with uses, which 
then leaks into "wrong places".

There are several solutions;

 * Take away this member altogether and instantiate a new UsesInstance even if 
it is going to be empty.

 * Make the UsesInstance immutable, and the use() method returns a new instance 
containing the change.

 * Properly track when the UsesInstance is the EMPTY one, and ensure that it is 
not modified. (Sounds reall difficult).



> Cast problems in AssociationDecoratorTest
> -----------------------------------------
>
>                 Key: QI-231
>                 URL: http://issues.ops4j.org/browse/QI-231
>             Project: Qi4j
>          Issue Type: Bug
>            Reporter: Niclas Hedhman
>            Assignee: Rickard Öberg
>            Priority: Blocker
>             Fix For: 1.0
>
>
> It happens intermittently that the AssociationDecoratorTest fails with the 
> exception below. This is very worrying to me, as it could be indeterministic 
> code somewhere causing it.
> java.lang.IllegalArgumentException: method: 
> org.qi4j.api.entity.association.ManyAssociation.add
> delegate: class org.qi4j.runtime.injection.UsesGenericClassTest
> delegateType: java.lang.Class
> arguments: 
>     java.lang.Integer
>     $Proxy84
>       at 
> org.qi4j.runtime.entity.associations.DecoratorMixin.invoke(DecoratorMixin.java:67)
>       at 
> org.qi4j.runtime.composite.GenericFragmentInvocationHandler.invoke(GenericFragmentInvocationHandler.java:38)
>       at $Proxy85.add(Unknown Source)
>       at 
> org.qi4j.runtime.entity.associations.AssociationDecoratorTest$EmployeesAuditConcern.add(AssociationDecoratorTest.java:119)
>       at 
> org.qi4j.runtime.entity.associations.AssociationDecoratorTest$EmployeesAuditConcern.add(AssociationDecoratorTest.java:112)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.qi4j.runtime.composite.TypedModifierInvocationHandler.invoke(TypedModifierInvocationHandler.java:39)
>       at 
> org.qi4j.runtime.composite.MethodConcernsInstance.invoke(MethodConcernsInstance.java:48)
>       at 
> org.qi4j.runtime.composite.CompositeMethodInstance.invoke(CompositeMethodInstance.java:59)
>       at 
> org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:128)
>       at 
> org.qi4j.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:148)
>       at 
> org.qi4j.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:113)
>       at 
> org.qi4j.runtime.composite.AbstractCompositeModel.invoke(AbstractCompositeModel.java:115)
>       at 
> org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:57)
>       at $Proxy81.add(Unknown Source)
>       at 
> org.qi4j.runtime.entity.associations.AssociationDecoratorTest.testAssociationDecorator(AssociationDecoratorTest.java:71)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
>       at 
> org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
>       at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
>       at 
> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
>       at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
>       at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
>       at 
> org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
>       at 
> org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
>       at 
> org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
>       at 
> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
>       at 
> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
>       at 
> org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
>       at 
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
>       at 
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>       at 
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>       at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
>       at 
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
> Caused by: java.lang.IllegalArgumentException: object is not an instance of 
> declaring class
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.qi4j.runtime.entity.associations.DecoratorMixin.invoke(DecoratorMixin.java:57)
>       ... 44 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.ops4j.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev

Reply via email to