I am attempting to set a global to the value of a looked-up session bean.
The global is defined as being of the business interface type.
When I look up this EJB, and attempt to set the global, AbstractWorkingMemory barfs at line 615 (5.2.0 HEAD) saying that my EJB reference is not in fact an instance of the proper type. This is because of course the EJB reference is a dynamic proxy class generated by the EJB container. So the stack looks like this:
Expected [com.foobar.Responses], found [$Proxy143].
at org.drools.common.AbstractWorkingMemory.setGlobal(AbstractWorkingMemory.java:615)
at org.drools.impl.StatefulKnowledgeSessionImpl.setGlobal(StatefulKnowledgeSessionImpl.java:319)
The comparison is being done by AbstractWorkingMemory by taking (in my case) Responses.class (an interface--the correct interface) and doing this:
Responses.class.isInstance(theProxyISupplied);
This returns false.
Actually, this surprised me: the Java notes on dynamic proxy classes indicate that the following statement must return true:
theProxyISupplied instanceof Responses;
...but they say nothing about the Class#isInstance(Object) method.
Is there an additional edge case comparison here that needs to happen?
Thanks,
Laird