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