Salve is interesting...

One problem, user-module does not know about accounting-module.



On Wed, 2007-10-10 at 00:30 +0200, Gerolf Seitz wrote:
> heh, i knew this would come up ;)
> 
> On 10/10/07, Igor Vaynberg <[EMAIL PROTECTED]> wrote:
> >
> > with Salve you can do it like this:
> >
> > UserBalance User.getBalance() {
> >   return  accountingService.getBalance (user);
> > }
> >
> > because your User domain object would have access to accountingService.
> >
> > see http://salve.googlecode.com
> >
> > -igor
> >
> > On 10/9/07, Joe Toth <[EMAIL PROTECTED]> wrote:
> > > This is a Hibernate question, but Eelco's 'class reloading' post
> > > reminded me to ask on this list. I asked in the Hibernate forums, but
> > > received no responses. Maybe someone here has a similar problem or some
> > > thoughts/ideas.
> > >
> > > * The Problem
> > >
> > > Ok, so you have IoC where you inject services you want to use in other
> > > services. Well basically I want to do something similar with my domain
> > > model.
> > >
> > > I have 3 different maven modules.  (I have a lot more, but for
> > > simplicity's sake)
> > > 1. user-module - Which contains a User.class with fields like
> > > emailAddress, password, address information, etc.
> > > 2. accounting-module - which depends on user-module and need to keep
> > > track of a user's pending account balance, posted balance, etc
> > > 3. mywebapp-module - which depends on accounting-module
> > >
> > > Currently
> > > If I want to get a user's account balance I have to
> > > User user = userService.getUser("id");
> > > UserBalance bal = accountingService.getBalance (user);
> > >
> > > It gets very cumbersome trying to write a ton of different queries to
> > > retrieve data from the different tables. For instance if I want to get
> > > someone's account balance via their e-mail address a query exists in the
> > > userService.findByEmailAddress(), but I have to write another method in
> > > the accountingService to do this again.
> > >
> > > * What Hibernate offers
> > >
> > >  1. Hibernate offers dynamic mode where you can persist fields via a
> > > Map, but you have to set the mode on a 'per session' basis.
> > >     a. This solution could work if you could have POJO and DYNAMIC-MAP
> > > in the same session. (which I don't see why this wouldn't be possible)
> > >  2. Hibernate offers dynamic components, but User.class has to know
> > > about the dynamic components and they cannot be dynamically wired up.
> > >
> > > * What I've been working on
> > >
> > > Modules contributing fields to models of other modules.
> > > Instead of UserBalance becoming its own class its now an interace that
> > > 'contributes' its fields (via getters/setters) to the User.class so I
> > > can do this.
> > > User user = userService.findByEmailAddress("[EMAIL PROTECTED]");
> > > UserBalance balance = (UserBalance) user;
> > >
> > > The only way I can think of to accomplish this is by creating new
> > > classes via javassist/cglib.
> > >
> > > 1. I take User.class and see if there are any interfaces that want to
> > > contribute their fields to User.class
> > > 2. I create a new class that extends User.class with the new fields,
> > > User$Enhanced.class
> > > 3. Then for each class with a field User.class I replace it with the
> > > newly generated class
> > >
> > > There is one big downfall to this approach. You can't create classes via
> > > the new operator.
> > > User user = new User();
> > > UserBalance balance = (UserBalance) user; <-- User does not implement
> > > UserBalance,  throwsClassCastException.
> > > balance.setPending(0.0);
> > > session.save(user);  <-- Hibernate does not know about a User entity,
> > > only the new User$Enhanced.class!
> > >
> > > You have to create objects via a factory so the object is actually of
> > > type User$Enhanced
> > > User user = factory.create(User.class);
> > >
> > > This is where class reloading would come in handy!
> > >
> > > * Conclusion
> > > I have not finished a prototype of this yet as there is a big learning
> > > curve of (byte code engineering) playing with javassist.
> > > I spent a whole day playing with this when I have other priorities, but
> > > this could speed up development immensely.
> > >
> > > Whoever read this, can you give me some feedback?
> > > Think its a good idea?
> > > Think a slippery slope of problems will unfurl once I get a prototype
> > > running?
> > > Are there any other existing solutions?
> > >
> > >
> > > Thanks everyone!
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to