[
https://jira.jboss.org/jira/browse/JBRULES-1982?page=com.atlassian.jira.p...
]
Hrvoje Habjanic commented on JBRULES-1982:
------------------------------------------
Hi!
Here are steps i did to create the bundle. First, i'll assume that you already
extracted drools zip file, and that you are in directory created by extraction:
$ mkdir build
$ mkdir build/a
$ cd build/a/
$ jar -xf ../../drools-api-5.0.1.jar
$ jar -xf ../../drools-core-5.0.1.jar
$ jar -xf ../../drools-compiler-5.0.1.jar
$ ls -la
total 24
drwxr-xr-x 4 hhabjan hhabjan 4096 2010-05-11 13:07 .
drwxr-xr-x 3 hhabjan hhabjan 4096 2010-05-11 13:07 ..
-rw-r--r-- 1 hhabjan hhabjan 1792 2009-05-21 19:50 change-set.xsd
drwxr-xr-x 3 hhabjan hhabjan 4096 2010-05-11 13:07 META-INF
drwxr-xr-x 3 hhabjan hhabjan 4096 2009-05-21 19:51 org
-rw-r--r-- 1 hhabjan hhabjan 884 2009-05-21 19:50 overview.html
$ cp ../../lib/antlr-runtime-3.1.1.jar ../../lib/core-3.4.2.v_883_R34x.jar
../../lib/jaxb-impl-2.0.3.jar ../../lib/jaxb-xjc-2.0.3.jar .
$ jar -cmf META-INF/MANIFEST.MF ../a.jar *
$ cd ..
$ ls -al
total 16
drwxr-xr-x 3 hhabjan hhabjan 4096 2010-05-11 13:14 .
drwxrwxr-x. 5 hhabjan hhabjan 4096 2010-05-11 13:06 ..
drwxr-xr-x 4 hhabjan hhabjan 4096 2010-05-11 13:10 a
-rw-r--r-- 1 hhabjan hhabjan 10677831 2010-05-11 13:16 a.jar
-rw-r--r-- 1 hhabjan hhabjan 1286 2010-05-11 13:14 drools-5.0.1.bnd
$ cat drools-5.0.1.bnd
Bundle-SymbolicName: org.drools
Bundle-Version: 5.0.1
Export-Package: org.drools*;version="5.0.1";-noimport:=true
-classpath=/work/hhabjan/springsource-dm-server-1.0.2.RELEASE/lib,/usr/java/default/jre/lib,a/antlr-runtime-3.1.1.jar,a/core-3.4.2.v_883_R34x.jar,a/jaxb-impl-2.0.3.jar,a/jaxb-xjc-2.0.3.jar
Import-Package:
org.mvel2*;version="[2.0.10,3.0.0)",com.thoughtworks.xstream*;version="[1.3.1,2.0.0)",org.codehaus.janino.*;version="[2.5.15,3.0.0)";resolution:="optional",jxl*;version="[2.4.2,3.0.0)";resolution:="optional",net.sf.jxls.reader*;version="[0.9.6,2.0.0)";resolution:="optional",org.milyn*;version="[1.1.0,2.0.0)",javax*,org.w3c.dom*,org.xml.sax*,org.antlr.stringtemplate*;version="[3.1.1,4.0.0)";resolution:="optional",org.eclipse.core.resources*;version="[3.3.0,4.0.0)";resolution:="optional",org.eclipse.core.runtime*;version="[3.3.0,4.0.0)";resolution:="optional",org.eclipse.core.filesystem*;version="[1.0.0,2.0.0)";resolution:="optional",org.eclipse.text*;version="[3.1.0,4.0.0)";resolution:="optional",!org.eclipse*,com.sun.xml.fastinfoset*;version="[1.2.0,3.0.0)",org.jvnet.staxex*;version="[1.0.0,2.0.0)",*;resolution:="optional"
Bundle-ClassPath:
.,antlr-runtime-3.1.1.jar,core-3.4.2.v_883_R34x.jar,jaxb-xjc-2.0.3.jar,jaxb-impl-2.0.3.jar
$ java -jar /work/hhabjan/bundles/bnd-0.0.384.jar wrap -properties drools-5.0.1.bnd
-output b.jar a.jar
Please note "-classpath" property! It points to SS lib dir and java (jre) lib
for some dependencies. This is only build time.
And now there is a lot of errors. Problem is (which i did not document on page) that bnd
is confused about mix versions in jaxb-xjc-2.0.3.jar bundle. So, we need to delete v1.0
directory from that file.
$ mkdir b
$ cd b
$ jar -xf ../a/jaxb-xjc-2.0.3.jar
$ rm -rf 1.0
$ jar -cmf META-INF/MANIFEST.MF ../jaxb-xjc-2.0.3-v2only.jar *
$ cd ..
OK, now we have correct xjc bundle, so put it instead of old one:
$ rm a/jaxb-xjc-2.0.3.jar
$ cp jaxb-xjc-2.0.3-v2only.jar a/
$ cd a
$ jar -cmf META-INF/MANIFEST.MF ../a.jar *
$ cd ..
And we need to edit bnd file:
$ cat drools-5.0.1.bnd
Bundle-SymbolicName: org.drools
Bundle-Version: 5.0.1
Export-Package: org.drools*;version="5.0.1";-noimport:=true
-classpath=/work/hhabjan/springsource-dm-server-1.0.2.RELEASE/lib,/usr/java/default/jre/lib,a/antlr-runtime-3.1.1.jar,a/core-3.4.2.v_883_R34x.jar,a/jaxb-impl-2.0.3.jar,a/jaxb-xjc-2.0.3-v2only.jar
Import-Package:
org.mvel2*;version="[2.0.10,3.0.0)",com.thoughtworks.xstream*;version="[1.3.1,2.0.0)",org.codehaus.janino.*;version="[2.5.15,3.0.0)";resolution:="optional",jxl*;version="[2.4.2,3.0.0)";resolution:="optional",net.sf.jxls.reader*;version="[0.9.6,2.0.0)";resolution:="optional",org.milyn*;version="[1.1.0,2.0.0)",javax*,org.w3c.dom*,org.xml.sax*,org.antlr.stringtemplate*;version="[3.1.1,4.0.0)";resolution:="optional",org.eclipse.core.resources*;version="[3.3.0,4.0.0)";resolution:="optional",org.eclipse.core.runtime*;version="[3.3.0,4.0.0)";resolution:="optional",org.eclipse.core.filesystem*;version="[1.0.0,2.0.0)";resolution:="optional",org.eclipse.text*;version="[3.1.0,4.0.0)";resolution:="optional",!org.eclipse*,com.sun.xml.fastinfoset*;version="[1.2.0,3.0.0)",org.jvnet.staxex*;version="[1.0.0,2.0.0)",*;resolution:="optional"
Bundle-ClassPath:
.,antlr-runtime-3.1.1.jar,core-3.4.2.v_883_R34x.jar,jaxb-xjc-2.0.3-v2only.jar,jaxb-impl-2.0.3.jar
$ java -jar /work/hhabjan/bundles/bnd-0.0.384.jar wrap -properties drools-5.0.1.bnd
-output b.jar a.jar
a 2297 0
One warning
1 : Did not find matching referal for jxl*
$ ls -la
total 20368
drwxr-xr-x 4 hhabjan hhabjan 4096 2010-05-11 13:36 .
drwxrwxr-x. 5 hhabjan hhabjan 4096 2010-05-11 13:06 ..
drwxr-xr-x 4 hhabjan hhabjan 4096 2010-05-11 13:27 a
-rw-r--r-- 1 hhabjan hhabjan 9473594 2010-05-11 13:29 a.jar
drwxr-xr-x 5 hhabjan hhabjan 4096 2010-05-11 13:20 b
-rw-r--r-- 1 hhabjan hhabjan 9482491 2010-05-11 13:33 b.jar
-rw-r--r-- 1 hhabjan hhabjan 1278 2010-05-11 13:33 drools-5.0.1.bnd
-rw-r--r-- 1 hhabjan hhabjan 1607591 2010-05-11 13:21 jaxb-xjc-2.0.3-v2only.jar
And with:
$ java -jar /work/hhabjan/bundles/bnd-0.0.384.jar print b.jar
you get detailed structure of bundle.
NOTE: in the end, i also added drools-decisiontables-5.0.1.jar and
drools-templates-5.0.1.jar to "extract" list because i needed them.
H.
NullPointerException when executing rule sample
-----------------------------------------------
Key: JBRULES-1982
URL:
https://jira.jboss.org/jira/browse/JBRULES-1982
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Affects Versions: 5.0.0.M5
Environment: Springsource DM Server v.1.0.1, all jar-s bundled together in single
jar file, then converted to bundle using bnd utility
Reporter: Hrvoje Habjanic
Assignee: Mark Proctor
Priority: Minor
Hi!
I have somewhat non-standard running environment - springsource sever. Because spring
requires everything to be provided as bundle, i created drools bundle. I unpacked
(extract) all drools jar-s except drools-clips, drools-jsr94 and drools-process-enterprise
into single directory, and then created one big jar. Then i converted this jar using bnd
utility to bundle. Because springsource uses older antlr, i did copy antlr-runtime-3.1.1
into bundle, to classes inside use this version.
In eclipse i created new project, and created helloworld sample. I did manage
successfully to execute RuleFlowTest! But, DroolsTest fails with:
[2009-02-26 17:18:35.245] server-dm-8
System.err E org.drools.runtime.rule.ConsequenceException:
java.lang.NullPointerException
[2009-02-26 17:18:35.245] server-dm-8
System.err E at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)
[2009-02-26 17:18:35.245] server-dm-8
System.err E at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:935)
[2009-02-26 17:18:35.245] server-dm-8
System.err E at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:882)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at
org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1072)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:616)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:583)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:151)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at com.sample.DroolsTest.main(DroolsTest.java:33)
[2009-02-26 17:18:35.246] server-dm-8
System.err E at com.sample.Runner.init(Runner.java:16)
[2009-02-26 17:18:35.247] server-dm-8
System.err E at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
[2009-02-26 17:18:35.247] server-dm-8
System.err E at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[2009-02-26 17:18:35.247] server-dm-8
System.err E at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[2009-02-26 17:18:35.247] server-dm-8
System.err E at java.lang.reflect.Method.invoke(Method.java:597)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
[2009-02-26 17:18:35.248] server-dm-8
System.err E at java.security.AccessController.doPrivileged(Native
Method)
[2009-02-26 17:18:35.249] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
[2009-02-26 17:18:35.249] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
[2009-02-26 17:18:35.249] server-dm-8
System.err E at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
[2009-02-26 17:18:35.249] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
[2009-02-26 17:18:35.250] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
[2009-02-26 17:18:35.250] server-dm-8
System.err E at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
[2009-02-26 17:18:35.250] server-dm-8
System.err E at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
[2009-02-26 17:18:35.250] server-dm-8
System.err E at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
[2009-02-26 17:18:35.251] server-dm-8
System.err E at
org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:288)
[2009-02-26 17:18:35.251] server-dm-8
System.err E at
org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:145)
[2009-02-26 17:18:35.252] server-dm-8
System.err E at
com.springsource.server.kernel.dm.ContextPropagatingTaskExecutor$2.run(ContextPropagatingTaskExecutor.java:82)
[2009-02-26 17:18:35.252] server-dm-8
System.err E at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[2009-02-26 17:18:35.252] server-dm-8
System.err E at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[2009-02-26 17:18:35.253] server-dm-8
System.err E at java.lang.Thread.run(Thread.java:619)
[2009-02-26 17:18:35.253] server-dm-8
System.err E Caused by: java.lang.NullPointerException
[2009-02-26 17:18:35.254] server-dm-8
System.err E at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:926)
[2009-02-26 17:18:35.254] server-dm-8
System.err E ... 31 more
Drools file which is executed is:
package com.sample
import com.sample.DroolsTest.Message;
rule "Hello World"
when
m : Message( status == Message.HELLO, message : message )
then
System.out.println( "Ssssss" );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "GoodBye"
when
Message( status == Message.GOODBYE, message : message )
then
System.out.println( message );
end
And DroolsTest java is also unmodified:
package com.sample;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
/**
* This is a sample class to launch a rule.
*/
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession,
"test");
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
ksession.insert(message);
ksession.fireAllRules();
logger.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
private static KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
ResourceType.DRL);
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error: errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
I did try to browse trough source and try to find out what the problem could be, but at
no avail.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira