Le Business Proxy doit prendre sa configuration dans mongodb et ne plus exposer un rest d'administration
This commit is contained in:
Nicolas Héron 2019-03-01 15:19:35 +01:00
commit 824c4336b7
23 changed files with 250 additions and 458 deletions

View file

@ -137,8 +137,8 @@
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.17.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.17.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.17.0.Final" level="project" />
</component>
</module>

View file

@ -92,8 +92,8 @@
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.16.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.17.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.17.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.17.0.Final" level="project" />
</component>
</module>

View file

@ -56,7 +56,7 @@
<dependencies>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framewwork-business-proxy-persistence</artifactId>
<artifactId>drools-framework-business-proxy-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot -->
@ -92,6 +92,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-jackson-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-quartz2</artifactId>
</dependency>
<!-- Test -->
<dependency>

View file

@ -0,0 +1,16 @@
package org.chtijbug.drools.proxy.camel;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;
@Component
public class AutodeployRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("quartz2://myGroup/myTimerName?cron=0+0/1+*+?+*+MON-FRI").to("bean:kieService?method=updateConfig()");
}
}

View file

@ -18,12 +18,13 @@ package org.chtijbug.drools.proxy.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.CamelContext;
import org.chtijbug.drools.proxy.camel.DroolsRouter;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRepository;
import org.chtijbug.drools.proxy.persistence.model.ContainerPojoPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ContainerRepository;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.chtijbug.kieserver.services.drools.DroolsChtijbugKieServerExtension;
import org.chtijbug.kieserver.services.drools.DroolsChtijbugRulesExecutionService;
import org.kie.server.api.model.*;
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.impl.KieContainerInstanceImpl;
@ -33,12 +34,15 @@ import org.kie.server.services.impl.marshal.MarshallerHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@ -60,8 +64,12 @@ public class KieServiceCommon {
@Inject
private ContainerRepository containerRepository;
@Inject
private RuntimeRepository runtimeRepository;
@Autowired
CamelContext camelContext;
@Value("${server.port}")
private int serverPort;
public KieServiceCommon() {
// for now, if no server impl is passed as parameter, create one
@ -86,44 +94,68 @@ public class KieServiceCommon {
@PostConstruct
private void initCamelBusinessRoutes() {
String serverName = System.getProperty("org.kie.server.id");
String sftpPort=System.getProperty("org.chtijbug.server.sftpPort");
List<RuntimePersist> itIsMes = runtimeRepository.findByServerName(serverName);
if (itIsMes.size()==0){
ServiceResponse<KieServerInfo> result = server.getInfo();
String version = result.getResult().getVersion();
String hostName="localhost";
try {
InetAddress inetAddress = InetAddress.getLocalHost();
hostName=inetAddress.getHostName();
} catch (UnknownHostException e) {
logger.info("initCamelBusinessRoutes.getLocalHost", e);
}
//org.chtijbug.server.sftpPort
RuntimePersist runtimePersist = new RuntimePersist(serverName,version,"http://"+hostName+":"+serverPort,String.valueOf(serverPort),sftpPort);
runtimeRepository.save(runtimePersist);
}
try {
String serverName = System.getProperty("org.kie.server.id");
List<ContainerPojoPersist> containers = containerRepository.findByServerName(serverName);
for (ContainerPojoPersist container : containers) {
ClassLoader localClassLoader = null;
String containerId = container.getContainerId();
KieContainerInstanceImpl kieContainerInstance = registry.getContainer(containerId);
if (kieContainerInstance != null) {
try {
localClassLoader = Thread.currentThread()
.getContextClassLoader();
} catch (ClassCastException e) {
logger.info("GenericResource.runSession", e);
}
try {
Set<Class<?>> classes = kieContainerInstance.getExtraClasses();
String className = container.getClassName();
Class foundClass = this.getClassFromName(classes, className);
ClassLoader classLoader = foundClass.getClassLoader();
Class<?> theClass = classLoader.loadClass(className);
camelContext.setApplicationContextClassLoader(classLoader);
Thread.currentThread().setContextClassLoader(classLoader);
String projectName = container.getProjectName();
String processId = container.getProcessID();
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId);
camelContext.addRoutes(droolsRouter);
} finally {
if (localClassLoader != null) {
Thread.currentThread().setContextClassLoader(localClassLoader);
}
}
}
this.initCamelBusinessRoute(container);
}
} catch (Exception e) {
logger.info("CreationContainer", e);
logger.info("initCamelBusinessRoutes", e);
}
}
public void initCamelBusinessRoute(ContainerPojoPersist container) throws Exception {
ClassLoader localClassLoader = null;
String containerId = container.getContainerId();
KieContainerInstanceImpl kieContainerInstance = registry.getContainer(containerId);
if (kieContainerInstance != null) {
try {
localClassLoader = Thread.currentThread()
.getContextClassLoader();
} catch (ClassCastException e) {
logger.info("GenericResource.runSession", e);
}
try {
Set<Class<?>> classes = kieContainerInstance.getExtraClasses();
String className = container.getClassName();
Class foundClass = this.getClassFromName(classes, className);
ClassLoader classLoader = foundClass.getClassLoader();
Class<?> theClass = classLoader.loadClass(className);
camelContext.setApplicationContextClassLoader(classLoader);
Thread.currentThread().setContextClassLoader(classLoader);
String projectName = container.getContainerId();
String processId = container.getProcessID();
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId);
camelContext.addRoutes(droolsRouter);
} finally {
if (localClassLoader != null) {
Thread.currentThread().setContextClassLoader(localClassLoader);
}
}
}
}
public KieServerImpl getServer() {
return server;
}
@ -150,7 +182,25 @@ public class KieServiceCommon {
return result.getResult();
}
public void updateConfig() throws Exception {
String serverName = System.getProperty("org.kie.server.id");
List<ContainerPojoPersist> containers= containerRepository.findByServerNameAndStatus(serverName, ContainerPojoPersist.STATUS.TODEPLOY.toString());
for (ContainerPojoPersist element:containers){
//this.disposeContainer(element.getContainerId());
KieContainerResource newContainer = new KieContainerResource();
newContainer.setContainerId(element.getContainerId());
newContainer.setReleaseId(new ReleaseId());
newContainer.getReleaseId().setArtifactId(element.getArtifactId());
newContainer.getReleaseId().setGroupId(element.getGroupId());
newContainer.getReleaseId().setVersion(element.getVersion());
this.createContainer(element.getContainerId(),newContainer);
this.initCamelBusinessRoute(element);
element.setStatus(ContainerPojoPersist.STATUS.UP.toString());
containerRepository.save(element);
}
}
public KieContainerResource createContainerWithRestBusinessService(String id, KieContainerResource container, String className, String processID) {
@ -167,39 +217,27 @@ public class KieServiceCommon {
logger.info("GenericResource.runSession", e);
}
try {
KieContainerInstance kci = registry.getContainer(id);
Set<Class<?>> classes = kci.getExtraClasses();
String serverName = System.getProperty("org.kie.server.id");
ContainerPojoPersist containerPojoPersist = containerRepository.findByServerNameAndContainerId(serverName, id);
if (containerPojoPersist == null) {
containerPojoPersist = new ContainerPojoPersist();
containerPojoPersist.setId(UUID.randomUUID().toString());
containerPojoPersist.setContainerId(id);
containerPojoPersist.setClassName(className);
containerPojoPersist.setProjectName(id);
containerPojoPersist.setServerName(serverName);
containerPojoPersist.setProcessID(processID);
Class foundClass = this.getClassFromName(classes, className);
if (foundClass != null) {
ClassLoader classLoader = foundClass.getClassLoader();
Class<?> theClass = classLoader.loadClass(className);
Thread.currentThread().setContextClassLoader(classLoader);
camelContext.setApplicationContextClassLoader(classLoader);
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, id, kci, processID);
camelContext.addRoutes(droolsRouter);
String serverName = System.getProperty("org.kie.server.id");
ContainerPojoPersist containerPojoPersist = containerRepository.findByServerNameAndContainerId(serverName, id);
if (containerPojoPersist == null) {
containerPojoPersist = new ContainerPojoPersist();
containerPojoPersist.setId(UUID.randomUUID().toString());
containerPojoPersist.setContainerId(id);
containerPojoPersist.setClassName(className);
containerPojoPersist.setProjectName(id);
containerPojoPersist.setServerName(serverName);
containerPojoPersist.setProcessID(processID);
containerRepository.save(containerPojoPersist);
} else {
containerPojoPersist.setContainerId(id);
containerPojoPersist.setClassName(className);
containerPojoPersist.setProjectName(id);
containerPojoPersist.setProcessID(processID);
containerPojoPersist.setServerName(serverName);
containerRepository.save(containerPojoPersist);
}
} else {
containerPojoPersist.setContainerId(id);
containerPojoPersist.setClassName(className);
containerPojoPersist.setProjectName(id);
containerPojoPersist.setProcessID(processID);
containerPojoPersist.setServerName(serverName);
}
this.initCamelBusinessRoute(containerPojoPersist);
containerRepository.save(containerPojoPersist);
} catch (ClassNotFoundException e) {
logger.error("createContainerWithRestBusinessService", e);

View file

@ -10,8 +10,6 @@
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />

View file

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>drools-framewwork-business-proxy-persistence</artifactId>
<artifactId>drools-framework-business-proxy-persistence</artifactId>
<dependencies>
<dependency>

View file

@ -6,7 +6,11 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class ContainerPojoPersist {
public enum STATUS {
UP,
DOWN,
TODEPLOY
}
@Id
private String id;
@ -22,6 +26,14 @@ public class ContainerPojoPersist {
private String projectName;
private String status;
private String groupId;
private String artifactId;
private String version;
public String getId() {
return id;
}
@ -70,6 +82,38 @@ public class ContainerPojoPersist {
this.processID = processID;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getArtifactId() {
return artifactId;
}
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("ContainerPojoPersist{");
@ -79,6 +123,10 @@ public class ContainerPojoPersist {
sb.append(", serverName='").append(serverName).append('\'');
sb.append(", processID='").append(processID).append('\'');
sb.append(", projectName='").append(projectName).append('\'');
sb.append(", status=").append(status);
sb.append(", groupId='").append(groupId).append('\'');
sb.append(", artifactId='").append(artifactId).append('\'');
sb.append(", version='").append(version).append('\'');
sb.append('}');
return sb.toString();
}

View file

@ -18,10 +18,16 @@ public class RuntimePersist {
private String hostname;
public RuntimePersist(String serverName, String version, String hostname) {
private String serverPort;
private String sftpPort;
public RuntimePersist(String serverName, String version, String hostname,String serverPort,String sftpPort) {
this.serverName = serverName;
this.version = version;
this.hostname = hostname;
this.serverPort = serverPort;
this.sftpPort = sftpPort;
}
public String getId() {
@ -55,4 +61,20 @@ public class RuntimePersist {
public void setHostname(String hostname) {
this.hostname = hostname;
}
public String getSftpPort() {
return sftpPort;
}
public void setSftpPort(String sftpPort) {
this.sftpPort = sftpPort;
}
public String getServerPort() {
return serverPort;
}
public void setServerPort(String serverPort) {
this.serverPort = serverPort;
}
}

View file

@ -15,6 +15,8 @@ public interface ContainerRepository extends MongoRepository<ContainerPojoPersis
List<ContainerPojoPersist> findByContainerId(String containerId);
List<ContainerPojoPersist> findByServerName(String serverName);
List<ContainerPojoPersist> findByServerNameAndStatus(String serverName, String status);
}