8 Mar 2011 12:30
Re: DI example
Andrus Adamchik <andrus <at> objectstyle.org>
2011-03-08 11:30:38 GMT
2011-03-08 11:30:38 GMT
On Mar 8, 2011, at 1:13 PM, Erdinc wrote:
> You mean in order to use DI you should add a custom runtime class extending CayenneRuntime.
No. Quite the contrary. There shouldn't be a need to extend CayenneRuntime (or ServerRuntime for that
matter). If you need to add new "services" or override the existing ones, you write a custom module and pass
it over to the runtime constructor. So extending Cayenne DI container is trivial:
class MyModule implements Module {
public void configure(Binder binder) { }
}
ServerRuntime r = new ServerRuntime("xyz-cayenne.xml", new MyModule());
> I want to inject beans into the cayenne entity beans. In order to do this, I added a listener class;
Ok I see, Cayenne DI itself is not intended for that. I mean, you can use it for DataObject injection, but this
was not why we added it. So yeah, if you want to inject "services" in your objects, use lifecycle callbacks.
As a matter of fact 3.1M2 will help you a lot to implement that. I am now writing a release announcement with
some of this highlighted. But please take a look at this
page:
http://cayenne.apache.org/doc/guide-to-31-features.html#Guideto3.1Features-LifecycleExtensions
DataChannelFilter combined with <at> PostLoad/ <at> PostAdd and a custom entity annotation should help you with
this. And maybe someday we'll add DataObject injection into cayenne-lifecycle extensions module.
Andrus
RSS Feed