Hello again
"this" has to be casted to NodeBacked so that "persist()" can be called.
This is plausible, since we are introducing methods to classes that
implement EnhancedPerson. And EnhancedPerson knows nothing about the
NodeBacked interface and its methods:
public aspect EnhancedPersonAspect {
public void EnhancedPerson.saveMe() {
((NodeBacked)this).persist();
}
}
I now tried to have the EnhancedPerson interface extend NodeBacked so that
methods that are introduced to EnhancedPerson have direct access to methods
of NodeBacked.
When I do that, I get a java.lang.AbstractMethodError:
java.lang.AbstractMethodError
at
org.springframework.data.neo4j.support.mapping.EntityStateHandler.getPersistentState(EntityStateHandler.java:82)
at
org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.getPersistentState(Neo4jEntityPersister.java:218)
...
I can't explain this exception. Is this maybe a bug in AspectJ? Other ideas
how to achieve what I want?
Best regards,
James
2012/1/3 Jean-Pierre Bergamin <[email protected]>
> Hello everyone
>
> I had no luck with this. I set up a small project to try it out:
> https://github.com/ractive/sdn-aspect
> I'd like to have the aspect "EnhancedPersonAspect" [1] use the method
> "persist()" that is introduced by the Neo4jNodeBacking [2] aspect from the
> Spring Data Neo4j lib, but the persist() method is not found. Any hints how
> to call the persist() method in the EnhancedPersonAspect?
>
> [1]
> https://github.com/ractive/sdn-aspect/blob/master/src/main/java/com/example/aspect/domain/aspects/EnhancedPersonAspect.aj
> [2]
> https://github.com/SpringSource/spring-data-neo4j/blob/master/spring-data-neo4j-aspects/src/main/java/org/springframework/data/neo4j/aspects/support/node/Neo4jNodeBacking.aj
>
> Any ideas?
>
>
> Best regards,
> James
>
>
>
> 2011/12/22 Andy Clement <[email protected]>
>
>> Hi,
>>
>> That should work fine. You either have to compile everything together
>> (using ajc) or two stage compile, first the aspects that introduce the
>> method you want to access from the other aspect (e.g. foo) then the
>> aspects that use it.
>>
>> Let me know if you have trouble with it.
>>
>> cheers,
>> Andy
>>
>> On 22 December 2011 04:18, Jean-Pierre Bergamin <[email protected]>
>> wrote:
>> > Hello everyone
>> >
>> > Is it possible to use a method that gets introduced by static
>> crosscutting
>> > in one aspect in another aspect?
>> >
>> > Lets imagine an aspect Foo that introduces a method "void foo()". Can I
>> now
>> > use this method foo() in another aspect that introduces other methds
>> with
>> > static crosscutting?
>> >
>> > public interface Foo {
>> > }
>> >
>> > public aspect FooAspect {
>> > public void Foo.foo() {
>> > // do something
>> > }
>> > }
>> >
>> > public aspect BarAspect {
>> > public void Bar.bar() {
>> > foo(); // How is it possible to call foo() here?
>> > }
>> > }
>> >
>> > public class MyEntity implements Foo {
>> > }
>> >
>> > MyEntity e = new MyEntity();
>> > e.bar();
>> >
>> >
>> > The background:
>> > We are using Spring Data Neo4j (a.k.a SDN). This framework provides an
>> > aspect which introduces some methods and fields in entities that are
>> > annotated with @NodeEntity. We now would like to create our own aspects
>> for
>> > our entities that in turn use the methods that are introduced by the SDN
>> > aspsect.
>> > We'd like to have somthing like:
>> >
>> > @NodeEntity
>> > @ModelAEntity
>> > public class FooEntity {
>> > }
>> >
>> > @NodeEntity
>> > @ModelAEntity
>> > @ModelBEntity
>> > public class BarEntity {
>> > }
>> >
>> > @NodeEntity
>> > @ModelBEntity
>> > @ModelCEntity
>> > public class BazEntity {
>> > }
>> >
>> > Where the Model(A|B|C)Entity aspects would introduce new methods that
>> all
>> > need access to the methods introduced by @NodeEntity. Can this be
>> achieved
>> > somehow?
>> >
>> >
>> > Best regards,
>> > James
>> >
>> > _______________________________________________
>> > aspectj-users mailing list
>> > [email protected]
>> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
>> >
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users