java - example - ¿Por qué falla la carga de Drools 6 KIE JAR en el código?
drools workbench (1)
Estoy usando JBoss AS 7.1.1.Final con KIE Workbench / Drools 6.0.1., Java y Eclipse (Kepler).
Necesito KIE Workbench (antiguamente Drools Guvnor) para permitir a las personas crear / editar frascos gráficamente con hechos y reglas y luego almacenarlos como archivos jar en el repositorio maven local. Estos frascos (anteriormente pkg) quiero acceder a ellos programáticamente y cargarlos en mi aplicación Drools. La aplicación podría incluso (aunque no de forma preferencial) ejecutarse en la misma estación de trabajo, por lo que el acceso al repositorio podría ser
a) por URL: http://localhost:8080/drools-wb-as7.0/maven2/com/myprojects/myProject/LATEST/myProject-LATEST.jar
b) por filepath / classpath: /my/folder/jboss-as-7.1.1.Final/bin/repositories/kie/com/myprojects/myProject/LATEST/myProject-LATEST.jar
NO quiero crear / compilar reglas, etc. en mi código, ni cargar dinámicamente un único archivo .drl de forma dinámica - el jar preparado es lo que necesito cargar, por ejemplo com.myprojects: myProject: ÚLTIMO como identificador.
Intento esto (según la documentación)
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects", "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );
[...]
Sin embargo, esto falla con la excepción de tiempo de ejecución,
Exception in thread "main" java.lang.RuntimeException: Cannot find KieModule: com.myprojects:myProject:LATEST
at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:86)
at com.myprojects.myproject.KieDroolsWBOnlinePuller.code(KieDroolsWBOnlinePuller.java:118)
at com.myprojects.myproject.KieDroolsWBOnlinePuller.main(KieDroolsWBOnlinePuller.java:40)
Mi pregunta es : ¿por qué no se encuentra el contenedor del repositorio? ¿El KieModule no es la representación del jar y el jar automáticamente en el repositorio como lo creé en KIE WB? ¿O debo cambiar el ReleaseID predeterminado de Maven Repo, que se imprimió con
KieRepository repo = ks.getRepository();
repo.getDefaultReleaseId()
resuelve a
org.default:artifact:1.0.0-SNAPSHOT ?
¿Es un problema Maven? ¿Qué me estoy equivocando?
Aquí el contenido de los jars pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myprojects</groupId>
<artifactId>myProject</artifactId>
<version>LATEST</version>
<name>myProject</name>
<repositories>
<repository>
<id>guvnor-m2-repo</id>
<name>Guvnor M2 Repo</name>
<url>http://localhost:8080/drools-wb-as7.0/maven2/</url>
</repository>
</repositories>
</project>
Lo que también probé fue usar este código para cargar el jar por URL:
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId("com.myprojects", "myProject", "LATEST");
KieResources kres = ks.getResources();
String url = "http://127.0.0.1:8080/drools-wb-as7.0/maven2/com/myprojects/myProject/LATEST/myProject-LATEST.jar";
kres.newUrlResource( url );
KieContainer kContainer = ks.newKieContainer(releaseId);
KieSession kSession = kContainer.newKieSession("statelessDefautlKnowledgeSession");
[...]
Esto falló con la misma excepción ... ¿Alguna idea?
Algunos recursos que leí hasta ahora (no puedo publicar los otros 6):
En mi caso, resultó que
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
</dependency>
faltaba en mi POM