-
Notifications
You must be signed in to change notification settings - Fork 185
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added kie-server-extensions examples
- Loading branch information
1 parent
3dae76b
commit 864ca76
Showing
22 changed files
with
1,004 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
bin/ | ||
/target | ||
/local | ||
|
||
# Eclipse, Netbeans and IntelliJ files | ||
/.* | ||
!.gitignore | ||
/nbproject | ||
/*.ipr | ||
/*.iws | ||
/*.iml | ||
|
||
# Repository wide ignore mac DS_Store files | ||
.DS_Store | ||
|
||
# Original jbpm ignores | ||
*~ | ||
|
||
# Test info | ||
/settings*.xml | ||
/lib-jdbc/ | ||
bitronix-default-config.properties | ||
*.db | ||
*.tlog | ||
|
||
# modules that don't exist in this branch | ||
/jbpm-human-task-war/ | ||
/jbpm-bam/ | ||
/jbpm-gwt/ | ||
|
||
# files used for external db testing | ||
jdbc_driver.jar | ||
db-settings.xml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
bin/ | ||
/target | ||
/local | ||
|
||
# Eclipse, Netbeans and IntelliJ files | ||
/.* | ||
!.gitignore | ||
/nbproject | ||
/*.ipr | ||
/*.iws | ||
/*.iml | ||
|
||
# Repository wide ignore mac DS_Store files | ||
.DS_Store | ||
|
||
# Original jbpm ignores | ||
*~ | ||
|
||
# Test info | ||
/settings*.xml | ||
/lib-jdbc/ | ||
bitronix-default-config.properties | ||
*.db | ||
*.tlog | ||
|
||
# modules that don't exist in this branch | ||
/jbpm-human-task-war/ | ||
/jbpm-bam/ | ||
/jbpm-gwt/ | ||
|
||
# files used for external db testing | ||
jdbc_driver.jar | ||
db-settings.xml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<parent> | ||
<groupId>org.kie.server.ext</groupId> | ||
<artifactId>kie-server-extensions</artifactId> | ||
<version>1.0.0</version> | ||
</parent> | ||
<artifactId>kie-server-drools-mina</artifactId> | ||
<name>KIE Server Extensions with Apache Mina</name> | ||
|
||
<properties> | ||
<version.org.kie>6.4.0-SNAPSHOT</version.org.kie> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.kie</groupId> | ||
<artifactId>kie-api</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.kie</groupId> | ||
<artifactId>kie-internal</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.kie.server</groupId> | ||
<artifactId>kie-server-api</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.kie.server</groupId> | ||
<artifactId>kie-server-services-common</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.kie.server</groupId> | ||
<artifactId>kie-server-services-drools</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.drools</groupId> | ||
<artifactId>drools-core</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.drools</groupId> | ||
<artifactId>drools-compiler</artifactId> | ||
<version>${version.org.kie}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.slf4j</groupId> | ||
<artifactId>slf4j-api</artifactId> | ||
<version>1.7.2</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>org.apache.mina</groupId> | ||
<artifactId>mina-core</artifactId> | ||
<version>2.0.9</version> | ||
</dependency> | ||
|
||
</dependencies> | ||
</project> |
130 changes: 130 additions & 0 deletions
130
...erver-drools-mina/src/main/java/org/kie/server/ext/mina/MinaDroolsKieServerExtension.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
package org.kie.server.ext.mina; | ||
|
||
import java.io.IOException; | ||
import java.net.InetSocketAddress; | ||
import java.nio.charset.Charset; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import org.apache.mina.core.service.IoAcceptor; | ||
import org.apache.mina.core.session.IdleStatus; | ||
import org.apache.mina.filter.codec.ProtocolCodecFilter; | ||
import org.apache.mina.filter.codec.textline.TextLineCodecFactory; | ||
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; | ||
import org.kie.server.services.api.KieContainerCommandService; | ||
import org.kie.server.services.api.KieContainerInstance; | ||
import org.kie.server.services.api.KieServerExtension; | ||
import org.kie.server.services.api.KieServerRegistry; | ||
import org.kie.server.services.api.SupportedTransports; | ||
import org.kie.server.services.impl.KieServerImpl; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
|
||
public class MinaDroolsKieServerExtension implements KieServerExtension { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(MinaDroolsKieServerExtension.class); | ||
|
||
public static final String EXTENSION_NAME = "Drools-Mina"; | ||
|
||
private static final Boolean disabled = Boolean.parseBoolean(System.getProperty("org.kie.server.drools-mina.ext.disabled", "false")); | ||
private static final String MINA_HOST = System.getProperty("org.kie.server.drools-mina.ext.port", "localhost"); | ||
private static final int MINA_PORT = Integer.parseInt(System.getProperty("org.kie.server.drools-mina.ext.port", "9123")); | ||
|
||
// taken from dependency - Drools extension | ||
private KieContainerCommandService batchCommandService; | ||
|
||
// mina specific | ||
private IoAcceptor acceptor; | ||
|
||
public boolean isActive() { | ||
return disabled == false; | ||
} | ||
|
||
public void init(KieServerImpl kieServer, KieServerRegistry registry) { | ||
|
||
KieServerExtension droolsExtension = registry.getServerExtension("Drools"); | ||
if (droolsExtension == null) { | ||
logger.warn("No Drools extension available, quiting..."); | ||
return; | ||
} | ||
|
||
List<Object> droolsServices = droolsExtension.getServices(); | ||
for( Object object : droolsServices ) { | ||
// in case given service is null (meaning was not configured) continue with next one | ||
if (object == null) { | ||
continue; | ||
} | ||
if( KieContainerCommandService.class.isAssignableFrom(object.getClass()) ) { | ||
batchCommandService = (KieContainerCommandService) object; | ||
continue; | ||
} | ||
} | ||
if (batchCommandService != null) { | ||
acceptor = new NioSocketAcceptor(); | ||
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); | ||
|
||
acceptor.setHandler( new TextBasedIoHandlerAdapter(batchCommandService) ); | ||
acceptor.getSessionConfig().setReadBufferSize( 2048 ); | ||
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 ); | ||
try { | ||
acceptor.bind( new InetSocketAddress(MINA_HOST, MINA_PORT) ); | ||
|
||
logger.info("{} -- Mina server started at {} and port {}", toString(), MINA_HOST, MINA_PORT); | ||
} catch (IOException e) { | ||
logger.error("Unable to start Mina acceptor due to {}", e.getMessage(), e); | ||
} | ||
|
||
} | ||
} | ||
|
||
public void destroy(KieServerImpl kieServer, KieServerRegistry registry) { | ||
if (acceptor != null) { | ||
acceptor.dispose(); | ||
acceptor = null; | ||
} | ||
logger.info("{} -- Mina server stopped", toString()); | ||
} | ||
|
||
public void createContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters) { | ||
// no op - it's already handled by Drools extension | ||
|
||
} | ||
|
||
public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters) { | ||
// no op - it's already handled by Drools extension | ||
|
||
} | ||
|
||
public List<Object> getAppComponents(SupportedTransports type) { | ||
// nothing for supported transports (REST or JMS) | ||
return Collections.emptyList(); | ||
} | ||
|
||
public <T> T getAppComponents(Class<T> serviceType) { | ||
|
||
return null; | ||
} | ||
|
||
public String getImplementedCapability() { | ||
return "BRM-Mina"; | ||
} | ||
|
||
public List<Object> getServices() { | ||
return Collections.emptyList(); | ||
} | ||
|
||
public String getExtensionName() { | ||
return EXTENSION_NAME; | ||
} | ||
|
||
public Integer getStartOrder() { | ||
return 20; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return EXTENSION_NAME + " KIE Server extension"; | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
...e-server-drools-mina/src/main/java/org/kie/server/ext/mina/TextBasedIoHandlerAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package org.kie.server.ext.mina; | ||
|
||
import org.apache.mina.core.service.IoHandlerAdapter; | ||
import org.apache.mina.core.session.IoSession; | ||
import org.kie.server.api.marshalling.MarshallingFormat; | ||
import org.kie.server.api.model.ServiceResponse; | ||
import org.kie.server.services.api.KieContainerCommandService; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
|
||
public class TextBasedIoHandlerAdapter extends IoHandlerAdapter { | ||
|
||
private static final Logger logger = LoggerFactory.getLogger(TextBasedIoHandlerAdapter.class); | ||
|
||
private KieContainerCommandService batchCommandService; | ||
|
||
public TextBasedIoHandlerAdapter(KieContainerCommandService batchCommandService) { | ||
this.batchCommandService = batchCommandService; | ||
} | ||
|
||
@Override | ||
public void messageReceived( IoSession session, Object message ) throws Exception { | ||
String completeMessage = message.toString(); | ||
logger.debug("Received message '{}'", completeMessage); | ||
if( completeMessage.trim().equalsIgnoreCase("quit") || completeMessage.trim().equalsIgnoreCase("exit") ) { | ||
session.close(false); | ||
return; | ||
} | ||
|
||
String[] elements = completeMessage.split("\\|"); | ||
logger.debug("Container id {}", elements[0]); | ||
try { | ||
ServiceResponse<String> result = batchCommandService.callContainer(elements[0], elements[1], MarshallingFormat.JSON, null); | ||
|
||
if (result.getType().equals(ServiceResponse.ResponseType.SUCCESS)) { | ||
session.write(result.getResult()); | ||
logger.debug("Successful message written with content '{}'", result.getResult()); | ||
} else { | ||
session.write(result.getMsg()); | ||
logger.debug("Failure message written with content '{}'", result.getMsg()); | ||
} | ||
} catch (Exception e) { | ||
|
||
} | ||
} | ||
} |
1 change: 1 addition & 0 deletions
1
...-mina/src/main/resources/META-INF/services/org.kie.server.services.api.KieServerExtension
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
org.kie.server.ext.mina.MinaDroolsKieServerExtension |
53 changes: 53 additions & 0 deletions
53
...sions/kie-server-drools-mina/src/test/java/org/kie/server/ext/mina/MinaKieServerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package org.kie.server.ext.mina; | ||
|
||
import java.io.BufferedReader; | ||
import java.io.IOException; | ||
import java.io.InputStreamReader; | ||
import java.io.PrintWriter; | ||
import java.net.Socket; | ||
|
||
import org.junit.Ignore; | ||
import org.junit.Test; | ||
|
||
/** | ||
* make sure your KIE Server has deployed container named 'demo' that is | ||
* built from https://github.com/mswiderski/bpm-projects/tree/master/kie-server-demo | ||
*/ | ||
@Ignore("Requires running server") | ||
public class MinaKieServerTest { | ||
|
||
private static final String MINA_HOST = System.getProperty("org.kie.server.drools-mina.ext.port", "localhost"); | ||
private static final int MINA_PORT = Integer.parseInt(System.getProperty("org.kie.server.drools-mina.ext.port", "9123")); | ||
|
||
@Test | ||
public void testSimpleKieServiceInteractionOverMina() throws Exception { | ||
|
||
String containerId = "demo"; | ||
String jsonContent = "{\"lookup\":\"defaultKieSession\",\"commands\":[{\"fire-all-rules\":\"\"}]}"; | ||
|
||
Socket minaSocket = null; | ||
PrintWriter out = null; | ||
BufferedReader in = null; | ||
|
||
try { | ||
minaSocket = new Socket(MINA_HOST, MINA_PORT); | ||
out = new PrintWriter(minaSocket.getOutputStream(), true); | ||
in = new BufferedReader(new InputStreamReader(minaSocket.getInputStream())); | ||
} catch (IOException e) { | ||
return; | ||
} | ||
|
||
out.println(containerId + "|" + jsonContent); | ||
// wait for the first line | ||
System.out.println(in.readLine()); | ||
// and then continue as long as it's available | ||
while (in.ready()) { | ||
System.out.println(in.readLine()); | ||
} | ||
|
||
out.close(); | ||
in.close(); | ||
minaSocket.close(); | ||
|
||
} | ||
} |
Oops, something went wrong.