helloworld no Kie Server versão 6.4.0
Atualmente, estou avaliando o KIE Server sem usar o KIE Workbench. O cenário que estou avaliando é,
1) Um terceiro me fornecerá ao arquivo drl seu objeto de valor (VO que será usado dentro do drl). Preciso criar um kjar ou jar programaticamente através de uma estrutura de projeto padrão do maven e também criar um contêiner para esse artefato e armazená-lo no repositório do maven.
2) Quando recebo uma solicitação de execução junto com os dados de entrada, contra esse artefato, atravésREST
chamada, eu preciso executar o contêiner criado acima com esses dados de entrada.
Eu segui os exemplosesta eesta
para fazer um projeto simples "HelloWorld".
POM.XML
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>Hello</artifactId>
<version>1</version>
<packaging>kjar</packaging>
<dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-maven-plugin</artifactId>
<version>6.4.0.Final</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-archiver</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-archiver</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.kie</groupId>
<artifactId>kie-maven-plugin</artifactId>
<version>6.4.0.Final</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
HelloWorld.java
package demo;
public class HelloWorld implements java.io.Serializable {
static final long serialVersionUID = 1L;
private java.lang.String message;
public HelloWorld()
{
}
public java.lang.String getMessage()
{
return this.message;
}
public void setMessage(java.lang.String message)
{
this.message = message;
}
public HelloWorld(java.lang.String message)
{
this.message = message;
}
}
HelloWorld.drl
package demo;
import demo.HelloWorld;
rule "hello"
when
HelloWorld(message == "Joe");
then
System.out.println("Hello Joe!");
end
kmodule.xml
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="demo" packages="demo">
<ksession name="demo.session"/>
</kbase>
</kmodule>
Estrutura do projeto maven simples usada:
Hello
|
|
|--src
| |--- main
| |--java
| | |---demo
| | |
| | |-- HelloWorld.java
| |
| |--resources
| |
| |--demo
| | |
| | |-- HelloWorld.drl
| |
| |--META-INF
| |
| |--kmodule.xml
|
|-- pom.xml
Sou capaz de criar um contêiner 'HelloworldContainer' para a estrutura acima projetada com oGroupId: demo, Artifact: Hello, version: 1
Mas quando tento executá-lo como abaixo, obtendo o URI de erro interno do servidor:http: // localhost: 8080 / kie-server / services / rest / server / containers / instâncias / HelloworldContainer
Cabeçalhos:
Content-Type: application/xml,
Authorization: Basic UWRtaWLkuTW5hZG1pbg==,
X-KIE-ContentType: XSTREAM
Corpo:
<batch-execution>
<insert out-identifier="helloworld" return-object="true">
<demo.HelloWorld>
<message>Joe</message>
</demo.HelloWorld>
</insert>
<fire-all-rules/>
</batch-execution>
Rastreio de pilha de erros:
java.lang.IncompatibleClassChangeError: com.google.common.collect.Maps and com.google.common.collect.Maps$TransformedValuesMap disagree on InnerClasses attribute
java.lang.Class.getDeclaringClass0(Native Method)
java.lang.Class.getDeclaringClass(Class.java:1101)
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:52)
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
sun.reflect.generics.repository.FieldRepository.getGenericType(FieldRepository.java:85)
java.lang.reflect.Field.getGenericType(Field.java:237)
com.thoughtworks.xstream.mapper.AnnotationMapper.processTypes(AnnotationMapper.java:212)
com.thoughtworks.xstream.mapper.AnnotationMapper.processAnnotations(AnnotationMapper.java:164)
com.thoughtworks.xstream.XStream.processAnnotations(XStream.java:1971)
com.thoughtworks.xstream.XStream.processAnnotations(XStream.java:1982)
org.kie.server.api.marshalling.xstream.XStreamMarshaller.<init>(XStreamMarshaller.java:86)
org.kie.server.api.marshalling.MarshallerFactory.getMarshaller(MarshallerFactory.java:37)
org.kie.server.services.impl.KieContainerInstanceImpl.getMarshaller(KieContainerInstanceImpl.java:111)
org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl.callContainer(DroolsKieContainerCommandServiceImpl.java:59)
org.kie.server.remote.rest.drools.CommandResource.manageContainer(CommandResource.java:72)
Consigo implantar com sucesso o Kie Server 6.4.0 usando o linkhttp://mswiderski.blogspot.in/2015/10/installing-kie-server-and-workbench-on.html
O servidor está começando bem, exceto este problema 'GRAVE'.
org.kie.server.services.impl.KieServerImpl.<init> Error when initializing server extension of type jBPM KIE Server extension
java.lang.RuntimeException: Unable to create EntityManagerFactory due to [PersistenceUnit: org.jbpm.domain] Unable to build EntityManagerFactory
at org.kie.server.services.jbpm.JbpmKieServerExtension.build(JbpmKieServerExtension.java:524)
at org.kie.server.services.jbpm.JbpmKieServerExtension.init(JbpmKieServerExtension.java:155)
at org.kie.server.services.impl.KieServerImpl.<init>(KieServerImpl.java:108)
at org.kie.server.services.impl.KieServerLocator.<clinit>(KieServerLocator.java:20)
at org.kie.server.services.Bootstrap.contextInitialized(Bootstrap.java:50)
at
...
Caused by: javax.naming.NameNotFoundException: Name [jboss/datasources/ExampleDS] is not bound in this Context. Unable to find [jboss].
at org.apache.naming.NamingContext.lookup(NamingContext.java:816)
at org.apache.naming.NamingContext.lookup(NamingContext.java:159)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:140)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at org.hibernate.service.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:65)
... 33 more
e outras séries de AVISOS, emboraorg.sonatype.guice
está disponível no meu repo m2
26-Sep-2016 11:37:21.346 WARNING [localhost-startStop-1] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type org.sonatype.guice.asm.MethodVisitor due to org.sonatype.guice.asm.MethodVisitor
26-Sep-2016 11:37:21.352 WARNING [localhost-startStop-1] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type org.sonatype.guice.asm.FieldVisitor due to org.sonatype.guice.asm.FieldVisitor
26-Sep-2016 11:37:21.357 WARNING [localhost-startStop-1] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type org.sonatype.guice.asm.Type due to org.sonatype.guice.asm.Type
26-Sep-2016 11:37:21.363 WARNING [localhost-startStop-1] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type org.sonatype.guice.asm.ClassWriter due to org.sonatype.guice.asm.ClassWriter
26-Sep-2016 11:37:21.368 WARNING [localhost-startStop-1] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type org.sonatype.guice.asm.Edge due to org.sonatype.guice.asm.Edge