Let's continue this discussin on the dev mailing list, as it's definitely of interest: http://www.jboss.org/drools/lists.html
Mark On 25/08/2010 03:50, ljnelson wrote: > Hello; I've made a JCA resource adapter for Drools. > > I've had to hack quite a bit to get it so that the KnowledgeAgent- and > resource-scanning-related parts don't use Threads, but, instead, use the > JCA-supplied WorkManager and BootstrapContext#createTimer() for asynchronous > operations (like resource scanning and notifying). > > Here are some changes it would sure be nice to see, that I needed to hack > around in order to make it so that a KnowledgeAgent-produced KnowledgeBase > could be shared by Java EE components in a specification compliant manner: > > 1. ResourceChangeNotifierImpl#ProcessChangetSet is an inner class that is > marked as public static, but which has a package-protected constructor. I > have to create a new instance of this in order to create a > ResourceChangeNotifierImpl subclass that doesn't use threads. I hope this > constructor could be made public instead. Right now I'm calling > setAccessible(true). Yecch. > > 2. ResourceFactory#setFactoryService(): sure do wish this were public, or > that there were another way to install a ResourceFactoryService. I need to > do this so that the scanner and notifier are under my control (and don't use > Threads, but instead use Timers as provided by the JCA BootstrapContext > class). It appears that I do have some control here in Drools 5.1 with the > (undocumented) ServiceRegistry interface (how do I get an instance of it? > what does it do? is it used pervasively?), but I don't know, since it's > undocumented, whether it's the preferred way to do this sort of thing or > not. > > 3. All this indirection is really quite clunky, especially given the > META-INF/services facility. Was there a good reason this was not used? I'm > sure there was something, because having to consult a factory for a service > to get a provider to produce an instance of something is a bit much. > > Hacking around those limitations, I was able to produce a Drools resource > adapter that vends KnowledgeBase instances as its user connection factories. > This means to use it in a spec-compliant manner, you do this in your > stateless (or stateful) session bean: > > @Resource > private KnowledgeBase kb; > > ...and you get injected a wrapper KnowledgeBase that uses the Java EE > container's JCA machinery to invoke operations on the shared KnowledgeBase. > > Is this something that would be interesting to other people? If so I am > happy to open source it. > > Thanks for a great toolkit. > > Best, > Laird _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users