I was playing with cglib over the last few days and found their mixin
proxy. Using that I was able to do a simple test:
Dog dog = new DogImpl();
Cat cat = new CatImpl();
Object[] delegates = new Object[2];
delegates[0] = dog;
delegates[1] = cat;
Object mixed = net.sf.cglib.proxy.Mixin.(delegates);
System.out.println(((Dog)mixed).bark());
System.out.println(((Cat)mixed).meow());
Seems to work fine. You can even add a mixin to a mixin...
Horse horse = new HorseImpl();
delegates[0] = mixed;
delegates[1] = horse;
mixed = net.sf.cglib.proxy.Mixin.(delegates);
System.out.println(((Horse)mixed).neigh());
System.out.println(((Dog)mixed).bark());
I was thinking that one could create base classes which would be mixin
implementations and add those during de-serialization from ocm or even
at runtime to node objects. I'll keep playing and get back with more
once I have something more concrete.
-paddy