I'd like to see that. Tapestry uses a number of threaded services. It would be nice if they could be instantiated quickly.
I would like to see BuilderFactory maintained for compatibility, and replaced with a code-and-syntax streamlined Injector (or InjectorFactory). Something like: <invoke-factory service-id="hivemind.Injector"> <construct class="BarImpl"/> <inject property="foo" object="service:Foo"/> <set property="timeout" value="100"/> <event-listener object="service:Hub"/> </invoke-factory> Note: not nested, just <construct> first. For inject-via-constructor, we might want elements inside <construct>. <inject> is always an object reference. <set> is for literals (but will translate from string to property type as needed). I think <module> should also have a @default-factory attribute. In this way, we can allow the same easy access to hivemind.Injector that we currently get with hivemind.BuilderFactory (i.e., omit the service-id from the <invoke-factory> element). In a much later release, we can switch the meta-default from BuilderFactory to Injector. I've also been thinking again about properly dealing with threaded services and <event-listener>. My current thinking is that we need to un-register implementations as listeners during thread cleanup (to balance registerring the implementations during service construction). I still have as many idea for HiveMind as for Tapestry, and so little time ... On 5/14/06, James Carman <[EMAIL PROTECTED]> wrote:
Oops. I forgot to call factory.getObject() on the factory that I get out of the map, but you get the idea. :-) -----Original Message----- From: James Carman [mailto:[EMAIL PROTECTED] Sent: Sunday, May 14, 2006 8:16 AM To: hivemind-dev@jakarta.apache.org Subject: Changes to BuilderFactory... All, Howard came up with an idea a while back. Instead of using reflection to build objects in BuilderFactory, why don't we have BuilderFactory generate a class via Javassist which builds the object? It'd look something like this: public Object createCoreServiceImplementation(ServiceImplementationFactoryParameters params) { if( !factoryMap.containsKey( params.getServiceId() ) { // Dynamically generate a factory class and put it in the map. } return ( Factory )factoryMap.get( params.getServiceId() ); } I've implemented it before in my "Syringe" project and it works quite nicely. Of course, this is really only useful for non-singleton services. But, for singleton services, it shouldn't be too much overhead. What do you guys think? James --------------------------------------------------------------------- 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]
-- Howard M. Lewis Ship Independent J2EE / Open-Source Java Consultant Creator and PMC Chair, Apache Tapestry Creator, Jakarta HiveMind Professional Tapestry training, mentoring, support and project work. http://howardlewisship.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]