Methods with concerns not working
---------------------------------

                 Key: QI-252
                 URL: http://issues.ops4j.org/browse/QI-252
             Project: Qi4j
          Issue Type: Bug
          Components: Core Runtime
    Affects Versions: 1.1
         Environment: Any.
            Reporter: Stanislav Muhametsin
            Assignee: Rickard Öberg


I have a role, let's say "org.mypackage.Activatable" with methods "activate()" 
and "passivate()". I then have some composite, let's say 
"org.myanotherpackage.Area", which extends the org.mypackage.Activatable. 
Additionally, I also have a concern, "org.mypackage.ActivatableConcern", which 
then overrides the methods "activate()" and "passivate()". Finally, I have 
"org.yetanotherpackage.AreaTransient", which extends the 
org.myanotherpackage.Area and TransientComposite, and has the @Mixins and 
@Concerns declarations.

I then call "area.activate()" in the app, and get the following error:
{noformat}
java.lang.NoSuchMethodException: 
org.mypackage.ActivatableConcern_Stub._activate()
        at java.lang.Class.getMethod(Class.java:1605)
        at 
org.qi4j.runtime.composite.AbstractModifierModel.newInstance(AbstractModifierModel.java:122)
        at 
org.qi4j.runtime.composite.MethodConcernsModel.newInstance(MethodConcernsModel.java:100)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.newCompositeMethodInstance(CompositeMethodModel.java:184)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.getInstance(CompositeMethodModel.java:171)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:155)
        at 
org.qi4j.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:123)
        at 
org.qi4j.runtime.composite.AbstractCompositeModel.invoke(AbstractCompositeModel.java:122)
        at 
org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:62)
        at $Proxy44.activate(Unknown Source)
{noformat}

Additionally, if I call another concern-ed method again later, I get:
{noformat}
org.qi4j.api.common.ConstructionException: Could not find modifier method
        at 
org.qi4j.runtime.composite.AbstractModifierModel.newInstance(AbstractModifierModel.java:129)
        at 
org.qi4j.runtime.composite.MethodConcernsModel.newInstance(MethodConcernsModel.java:100)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.newCompositeMethodInstance(CompositeMethodModel.java:184)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.getInstance(CompositeMethodModel.java:171)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:155)
        at 
org.qi4j.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:123)
        at 
org.qi4j.runtime.composite.AbstractCompositeModel.invoke(AbstractCompositeModel.java:122)
        at 
org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:62)
        at $Proxy44.passivate(Unknown Source)
{noformat}

Also, if I remove the ActivatableConcern from the @Concers-list, I get the 
following error:
{noformat}
java.lang.NoSuchMethodException: 
org.mypackage.ActivatableProxyMixin_Stub._activate()
        at java.lang.Class.getMethod(Class.java:1605)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.newCompositeMethodInstance(CompositeMethodModel.java:200)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.getInstance(CompositeMethodModel.java:171)
        at 
org.qi4j.runtime.composite.CompositeMethodModel.invoke(CompositeMethodModel.java:155)
        at 
org.qi4j.runtime.composite.CompositeMethodsModel.invoke(CompositeMethodsModel.java:123)
        at 
org.qi4j.runtime.composite.AbstractCompositeModel.invoke(AbstractCompositeModel.java:122)
        at 
org.qi4j.runtime.composite.TransientInstance.invoke(TransientInstance.java:62)
        at $Proxy44.activate(Unknown Source)
{noformat}

My concern code is like this:
{code:title=ActivatableConcern.java}
public abstract class ActivatableConcern extends ConcernOf<Activatable> 
implements Activatable
{

   @This private ActivatableImmutableQuery _immutableQuery;

   @Override
   public void activate()
   {
      if (!this._immutableQuery.isActive())
      {
         this.next.activate();
      }
   }

   @Override
   public void passivate()
   {
      if (this._immutableQuery.isActive())
      {
         this.next.passivate();
      }
   }
}
{code}

-- 
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