package org.jboss.seam.drools; import org.drools.spi.GlobalResolver; import org.jboss.seam.Component; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.Init; /** * Resolves Seam context variables as Drools globals * * @author Gavin King * */ public class SeamGlobalResolver implements GlobalResolver { private GlobalResolver delegate; public SeamGlobalResolver(GlobalResolver delegate) { this.delegate = delegate; } public void setGlobal(String name, Object value) { //TODO: is this the right thing to do?? //or: Contexts.getConversationContext().set(name, value); delegate.setGlobal(name, value); } public Object resolveGlobal(String name) { if ( !Contexts.isApplicationContextActive() ) { return delegate.resolveGlobal(name); } else { Object instance = Component.getInstance(name); if (instance==null) { instance = delegate.resolveGlobal(name); return instance==null ? Init.instance().getRootNamespace().getChild(name) : instance; } else { return instance; } } } }