swapnil thanx for the reply,
this is my modified code
try{
System.out.println("Initializing Fact....");
URL[] urls = new URL[]{ new URL("file://"+path) };
ClassLoader loader = new URLClassLoader(urls);
Class clazz = loader.loadClass("test.Message");
//Class.forName("test.Message", false, ucl);
Object factObj = clazz.newInstance();
String ruleFile = "test/Sample.drl";
Method method = clazz.getMethod("setMessage", new
Class[]{String.class});
Method method1 = clazz.getMethod("getMessage");
//System.out.println("facts loaded\n");
method.invoke(factObj, new Object[]{"Hello"});
System.out.println("initializing packageBuilder");
PackageBuilderConfiguration config = new
PackageBuilderConfiguration();
config.setClassLoader(loader);
KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder(config);
System.out.println("finding Rule");
kbuilder.add(ResourceFactory.newClassPathResource("test/Sample.drl"),ResourceType.DRL);
if (kbuilder.hasErrors())
throw new RuntimeException("Unable to compile rules. " +
kbuilder.getErrors().toString());
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(new
RuleBaseConfiguration(loader));
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatelessKnowledgeSession session =
kbase.newStatelessKnowledgeSession();
System.out.println("running rule....... \n");
session.execute(factObj);
System.out.println("\nend...\n");
System.out.println(method1.invoke(factObj).toString());
}
catch (Throwable t) {
t.printStackTrace();
}
thanx and regards
Hemanth
2009/11/3 Swapnil Raverkar <swapnil.raverkar(a)gmail.com>
Are you inserting the instance of the dynamically loaded class into
the
KnowledgeBase?
i.e. session.insert(dynamicInstance);
If not the rule won't get fired.
Cheers,
Swapnil
2009/11/3 Hemanth kumar <hemanth(a)saha.in>
> hi,
> Im working on a sample test project.
> In that im dynamically creating a class ( fact) and compiling it.
>
> here is my test project
>
>
--------------------------------------------------------------------------------------
> mainJavaclass
>
>
> public void runRule()
> {
> try {
> System.out.println("\nRunning rule\n");
>
> // go !
>
> URL[] urls = new URL[]{ new
> URL("file://"+path) };
>
> URLClassLoader ucl = new
> URLClassLoader(urls);
> Class<?> clazz =
> ucl.loadClass("test.Message");
> Object classObj = clazz.newInstance();
>
>
> Method method =
> clazz.getDeclaredMethod("setMessage", new Class[]{String.class});
>
> //System.out.println("facts loaded\n");
>
> method.invoke(classObj, new
> Object[]{"Hello"});
>
>
> log.info("==== Calling Rule Runner
> ======");
>
> Collection facts = new ArrayList();
> facts.add(classObj);
>
>
> // Load and fire our rules files against
> the
> data
> new
> RuleRunner().runStatelessRules(RULES_FILES, null, facts, null, null,
> logger);
>
> }
> catch (Throwable t) {
> t.printStackTrace();
> }
>
> }
>
> ----------------------------------------------------------------------
> Fact
>
> package test;
> public class Message{
> private String message;
> public String getMessage(){
> return this.message;
> }
>
> public void setMessage(String message) {
> this.message = message;
> }
>
> }
>
>
> ------------------------------------------------------------------------
> sample rule
>
> package test
> import test.Message;
>
> rule "Your First Rule"
> dialect "mvel"
> when
> m:Message(message != "Good Bye" )
> then
> System.out.println("First Rule fired "+m.message );
> modify(m){ message = "Good Bye"};
> end
> -----------------------------------------------------------------
>
http://old.nabble.com/file/p26160051/console.PNG console.PNG
>
> what happens is when i was running the project inside eclipse IDE it works
> fine but when i hosted in tomcat and calling from outside ide the rule is
> not getting fired.
> I think the dyanamically loaded class is not recognised by the rule
> engine.
>
> suggest me any ideas or post an working example
>
> Hemanth
> --
> View this message in context:
>
http://old.nabble.com/Class-loader-problem-tp26160051p26160051.html
> Sent from the drools - user mailing list archive at
Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users