Start Dockerized

Dynamic configuration started
This commit is contained in:
Nicolas Héron 2019-03-06 19:34:48 +01:00
commit 945c57ddfd
44 changed files with 1544 additions and 321 deletions

84
docker-compose.yaml Normal file
View file

@ -0,0 +1,84 @@
version: "3"
networks:
drools-network:
ipam:
config:
- subnet: 172.27.0.0/24
services:
kie-wb:
image: kie-wb
container_name: "businessCentral"
volumes:
- gitdata:/home/niodir
networks:
drools-network:
ipv4_address: 172.27.0.5
ports:
- 8080:8080
- 8001:8001
restart: always
admin-console:
image: runtime-admin-console
container_name: "admin-console"
volumes:
- gitdata:/home/niodir
networks:
drools-network:
ipv4_address: 172.27.0.6
ports:
- 8200:8200
links:
- businessProxyDB:mongodb
- elasticsearchhost
- kie-wb
depends_on:
- businessProxyDB
- elasticsearchhost
- kie-wb
restart: always
elasticsearchhost:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1
container_name: "elasticsearchhost"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
drools-network:
ipv4_address: 172.27.0.7
ports:
- 9300:9300
restart: always
businessProxyDB:
image: mongo
container_name: "businessProxyDB"
volumes:
- mongodb:/data/db
- mongodb_config:/data/configdb
networks:
drools-network:
ipv4_address: 172.27.0.3
ports:
- 28017:27017
command: mongod
restart: always
volumes:
mongodb:
mongodb_config:
gitdata:
esdata2:

84
docker-compose.yaml.copy Normal file
View file

@ -0,0 +1,84 @@
version: "3"
networks:
drools-network:
ipam:
config:
- subnet: 172.27.0.0/24
services:
kie-wb:
image: kie-wb
container_name: "businessCentral"
volumes:
- gitdata:/home/niodir
networks:
drools-network:
ipv4_address: 172.27.0.5
ports:
- 8080:8080
- 8001:8001
restart: always
admin-console:
image: runtime-admin-console
container_name: "admin-console"
volumes:
- gitdata:/home/niodir
networks:
drools-network:
ipv4_address: 172.27.0.6
ports:
- 8200:8200
links:
- businessProxyDB
- elasticsearchhost
- kie-wb
depends_on:
- businessProxyDB
- elasticsearchhost
- kie-wb
restart: always
elasticsearchhost:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1
container_name: "elasticsearchhost"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
networks:
drools-network:
ipv4_address: 172.27.0.7
ports:
- 9300:9300
restart: always
businessProxyDB:
image: mongo
container_name: "businessProxyDB"
volumes:
- mongodb:/data/db
- mongodb_config:/data/configdb
networks:
drools-network:
ipv4_address: 172.27.0.3
ports:
- 28017:27017
command: mongod
restart: always
volumes:
mongodb:
mongodb_config:
gitdata:
esdata2:

View file

@ -0,0 +1,75 @@
version: "3"
networks:
assurfleet-network:
ipam:
config:
- subnet: 172.26.0.0/24
services:
assurfleet-webapp:
image: assurfleet-webapp
container_name: "assurfleet-webapp"
networks:
assurfleet-network:
ipv4_address: 172.26.0.5
ports:
- 8099:8099
- 9091:9091
- 9095:9095
links:
- petiteFlotteDB
depends_on:
- petiteFlotteDB
restart: always
assurfleet-courtier:
image: assurfleet-front-courtier-petiteflotte
container_name: "assurfleet-courtier"
networks:
assurfleet-network:
ipv4_address: 172.26.0.4
ports:
- 8200:8200
restart: always
assurfleet-grossiste:
image: assurfleet-front-grossiste-petiteflotte
container_name: "assurfleet-grossiste"
networks:
assurfleet-network:
ipv4_address: 172.26.0.2
ports:
- 8101:8101
restart: always
green-card-portail-front:
image: green-card-portail-front
container_name: "green-card-portail-front"
networks:
assurfleet-network:
ipv4_address: 172.26.0.9
ports:
- 8600:8600
restart: always
petiteFlotteDB:
image: mongo
container_name: "petiteFlotteDB"
volumes:
- mongodb:/data/db
- mongodb_config:/data/configdb
networks:
assurfleet-network:
ipv4_address: 172.26.0.3
ports:
- 8098:27017
command: mongod
restart: always
volumes:
mongodb:
mongodb_config:

View file

@ -8,7 +8,7 @@
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<packaging>jar</packaging>
<artifactId>drools-framework-admin-console</artifactId>
<properties>
@ -220,32 +220,10 @@
<build>
<finalName>drools-framework-admin-console</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<packagingExcludes>
%regex[WEB-INF/lib/slf4j-simple.*.jar],
%regex[WEB-INF/lib/tomcat.*.jar]
</packagingExcludes>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
@ -264,23 +242,17 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dvaadin.productionMode</jvmArguments>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
org.chtijbug.drools.console.DroolsSpringBootConsoleApplication
</mainClass>
</configuration>
</execution>
</executions>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
@ -288,11 +260,9 @@
<profiles>
<profile>
<!--profile>
<id>productionMode</id>
<!--activation>
<activeByDefault>true</activeByDefault>
</activation!-->
<dependencies>
<dependency>
@ -327,6 +297,130 @@
</plugin>
</plugins>
</build>
</profile-->
<profile>
<id>docker-build</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-admin-console</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:192.168.43.94</host>
<host>elasticsearchhost:192.168.43.94</host>
<host>kie-wb:192.168.43.94</host>
</extraHosts>
<ports>
<port>8200:8200</port>
</ports>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-deploy</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-admin-console</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:192.168.1.100</host>
</extraHosts>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>mydeploy</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View file

@ -0,0 +1,12 @@
FROM openjdk:8-jre-slim
ADD application.properties /application.properties
ADD maven/drools-framework-admin-console.jar app.jar
EXPOSE 8200
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.config.location=file:./","-jar","/app.jar"]
#ENTRYPOINT ["java","-jar","/app.jar"]

View file

@ -0,0 +1,12 @@
spring.data.elasticsearch.cluster-nodes=elasticsearchhost:9300
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=mongodb:27017
server.port=${port:8200}
kie-wb.baseurl=http://kie-wb:8080/kie-wb/rest
kie-wb.username=admin
kie-wb.password=admin
spring.servlet.multipart.enabled=false

View file

@ -18,6 +18,7 @@ import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -44,154 +45,159 @@ public class ProjectPersistService {
@Autowired
private RuntimeRepository runtimeRepository;
public ProjectPersistService(){
public ProjectPersistService() {
this.config = AppContext.getApplicationContext().getBean(KieConfigurationData.class);
}
public static String getPROJECT() {
return PROJECT;
}
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses){
public static void setPROJECT(String PROJECT) {
ProjectPersistService.PROJECT = PROJECT;
}
for(PlatformProjectResponse platformProjectResponse:platformProjectResponses) {
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectName(new KeyProject(platformProjectResponse.getSpaceName(),platformProjectResponse.getName()));
for (PlatformProjectResponse platformProjectResponse : platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectName(new KeyProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()));
if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse);
projectRepository.save(projectPersist);
addProjectToSession(projectPersist,true);
addProjectToSession(projectPersist, true);
}else {
addProjectToSession(projectPersist,false);
} else {
addProjectToSession(projectPersist, false);
}
}
}
public HashMap<String,ProjectPersist> getProjectsSession() {
public HashMap<String, ProjectPersist> getProjectsSession() {
return (HashMap<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(PROJECT);
}
public void addProjectToSession(ProjectPersist projectPersist,boolean isModifiable) {
HashMap<String,ProjectPersist> projectPersists=getProjectsSession();
HashMap<String, ProjectPersist> projectPersists = getProjectsSession();
if(projectPersists==null){
projectPersists=new HashMap<>();
if (projectPersists == null) {
projectPersists = new HashMap<>();
}
if(isModifiable){
projectPersists.put(projectPersist.getProjectName().toString(),projectPersist);
}else {
if (isModifiable) {
projectPersists.put(projectPersist.getProjectName().toString(), projectPersist);
} else {
ProjectPersist tmp=projectPersists.get(projectPersist.getProjectName().toString());
if(tmp==null){
projectPersists.put(projectPersist.getProjectName().toString(),projectPersist);
ProjectPersist tmp = projectPersists.get(projectPersist.getProjectName().toString());
if (tmp == null) {
projectPersists.put(projectPersist.getProjectName().toString(), projectPersist);
}
}
VaadinSession.getCurrent().setAttribute(PROJECT, projectPersists);
}
public boolean associate(ProjectPersist projectPersist, RuntimePersist runtimePersist){
List<ProjectPersist> projectPersists=projectRepository.findByServerNameAndDeploymentName(runtimePersist.getServerName(),projectPersist.getDeploymentName());
public boolean associate(ProjectPersist projectPersist, List<RuntimePersist> runtimePersists) {
if(projectPersists.size()!=0){
return false;
}else {
projectPersist.getServerNames().clear();
for (RuntimePersist runtimePersist : runtimePersists) {
List<String> names = new ArrayList<String>();
names.add(runtimePersist.getServerName());
List<ProjectPersist> projectPersists = projectRepository.findByServerNamesInAndDeploymentName(names, projectPersist.getDeploymentName());
//if (projectPersists.size() != 0) {
// return false;
// }
projectPersist.getServerNames().add(runtimePersist.getServerName());
}
projectPersist.setServerName(runtimePersist.getServerName());
projectPersist.setStatus(ProjectPersist.Deployable);
projectPersist.setContainerID(projectPersist.getDeploymentName()+"-"+projectPersist.getProjectName());
projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName());
projectRepository.save(projectPersist);
addProjectToSession(projectPersist,true);
addProjectToSession(projectPersist, true);
return true;
}
}
public boolean deployer(ProjectPersist projectPersist, AddLog addLog, UI ui){
public boolean deployer(ProjectPersist projectPersist, AddLog addLog, UI ui) {
waitForJobToBeEnded(config.getKiewbUrl(), userConnectedService.getUserConnected().getUserName(),
userConnectedService.getUserConnected().getUserPassword(), projectPersist, addLog,ui);
userConnectedService.getUserConnected().getUserPassword(), projectPersist, addLog, ui);
return false;
}
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectResponse platformProjectResponse){
ProjectPersist projectPersist=new ProjectPersist();
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectResponse platformProjectResponse) {
ProjectPersist projectPersist = new ProjectPersist();
projectPersist.setArtifactID(platformProjectResponse.getArtifactId());
projectPersist.setGroupID(platformProjectResponse.getGroupId());
projectPersist.setProjectName(new KeyProject(platformProjectResponse.getSpaceName(),platformProjectResponse.getName()));
projectPersist.setProjectName(new KeyProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()));
projectPersist.setProjectVersion(platformProjectResponse.getVersion());
projectPersist.setStatus(ProjectPersist.ADEFINIR);
projectPersist.setClassNameList(platformProjectResponse.getJavaClasses());
return projectPersist;
}
public void waitForJobToBeEnded(String url, String username, String password,ProjectPersist projectPersist, AddLog workOnGoingView, UI ui) {
public void waitForJobToBeEnded(String url, String username, String password, ProjectPersist projectPersist, AddLog workOnGoingView, UI ui) {
UserConnected userConnected=userConnectedService.getUserConnected();
UserConnected userConnected = userConnectedService.getUserConnected();
Thread thread=new Thread(){
Thread thread = new Thread() {
public void run() {
JobStatus result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(),
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), "compile", workOnGoingView,ui);
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), "compile", workOnGoingView, ui);
executeWrite(url,username,password,workOnGoingView,result.getJobId(),ui);
executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(),
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), "install", workOnGoingView,ui);
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), "install", workOnGoingView, ui);
executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
executeWrite(url,username,password,workOnGoingView,result.getJobId(),ui);
/**
if (projectPersist.getContainerID() != null) {
KieServerJobStatus jobresult = kieServerRepositoryService.stopContainer(config.getKieserverUrl(), config.getKieserverUserName(), config.getKieserverPassword(), projectPersist.getContainerID(), workOnGoingView,ui);
if (jobresult != null
&& "SUCCESS".equals(jobresult.getType())) {
}
}
**/
// ContainerPojoPersist toto = containerRepository.findByServerNameAndContainerId(projectPersist.getContainerID());
List<RuntimePersist> kieservers = runtimeRepository.findByServerName(projectPersist.getServerName());
if (kieservers.size()==1) {
ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(projectPersist.getServerName(),projectPersist.getContainerID());
if (existingContainer==null) {
for (String serverName : projectPersist.getServerNames()) {
List<RuntimePersist> kieservers = runtimeRepository.findByServerName(serverName);
if (kieservers.size() == 1) {
ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(serverName, projectPersist.getContainerID());
if (existingContainer == null) {
ContainerPojoPersist newContainer = new ContainerPojoPersist();
newContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString());
newContainer.setClassName(projectPersist.getMainClass());
newContainer.setProcessID(projectPersist.getProcessID());
newContainer.setContainerId(projectPersist.getContainerID());
newContainer.setServerName(projectPersist.getServerName());
newContainer.setServerName(serverName);
newContainer.setGroupId(projectPersist.getGroupID());
newContainer.setArtifactId(projectPersist.getArtifactID());
newContainer.setVersion(projectPersist.getProjectVersion());
containerRepository.save(newContainer);
}else{
} else {
existingContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString());
containerRepository.save(existingContainer);
}
/**
KieContainerResource newContainer = new KieContainerResource();
newContainer.setContainerId(projectPersist.getContainerID());
newContainer.setReleaseId(new ReleaseId());
newContainer.getReleaseId().setArtifactId(projectPersist.getArtifactID());
newContainer.getReleaseId().setGroupId(projectPersist.getGroupID());
newContainer.getReleaseId().setVersion(projectPersist.getProjectVersion());
KieContainerInfo createdContainer = kieServerRepositoryService.createContainerWithBusinessInterface(config.getKieserverUrl(), config.getKieserverUserName(), config.getKieserverPassword(), projectPersist, newContainer, workOnGoingView, ui);
**/
}
}
}
//remove container from other runtime
List<ContainerPojoPersist> containerPojoPersists = containerRepository.findByContainerId(projectPersist.getContainerID());
for (ContainerPojoPersist container : containerPojoPersists){
if (projectPersist.getServerNames().contains(container.getServerName())==false){
container.setStatus(ContainerPojoPersist.STATUS.TODELETE.toString());
containerRepository.save(container);
}
}
}
};
thread.start();
}
private void executeWrite(String url, String username, String password,AddLog workOnGoingView,String jobID,UI ui){
private void executeWrite(String url, String username, String password, AddLog workOnGoingView, String jobID, UI ui) {
String isJobDone = "NO";
while ("NO".equals(isJobDone)) {
@ -201,11 +207,11 @@ public class ProjectPersistService {
if ("DUPLICATE_RESOURCE".equals(jobStatus.getStatus())
|| "SUCCESS".equals(jobStatus.getStatus())) {
isJobDone = "YES";
workOnGoingView.addRow("JobID=" + jobID + " finished",ui);
workOnGoingView.addRow("JobID=" + jobID + " finished", ui);
} else if ("ACCEPTED".equals(jobStatus.getStatus())
|| ("APPROVED".equals(jobStatus.getStatus()))) {
try {
workOnGoingView.addRow("JobID=" + jobID + " not yet finished",ui);
workOnGoingView.addRow("JobID=" + jobID + " not yet finished", ui);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
@ -218,14 +224,6 @@ public class ProjectPersistService {
}
}
public static String getPROJECT() {
return PROJECT;
}
public static void setPROJECT(String PROJECT) {
ProjectPersistService.PROJECT = PROJECT;
}
public ProjectRepository getProjectRepository() {
return projectRepository;
}

View file

@ -11,6 +11,8 @@ public class UserConnectedService {
public static String ASSET = "2";
public static String SPACE = "3";
public static String PROJECT = "4";
public static String CURRENTPROJECT = "5";
public UserConnected getUserConnected() {
return (UserConnected) VaadinSession.getCurrent().getAttribute(USER);
@ -41,10 +43,10 @@ public class UserConnectedService {
}
public void addProjectToSession(String projectName) {
VaadinSession.getCurrent().setAttribute(PROJECT, projectName);
VaadinSession.getCurrent().setAttribute(CURRENTPROJECT, projectName);
}
public String getProject() {
return (String) VaadinSession.getCurrent().getAttribute(PROJECT);
return (String) VaadinSession.getCurrent().getAttribute(CURRENTPROJECT);
}
}

View file

@ -10,8 +10,8 @@ import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.view.DeploymentView;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import java.util.ArrayList;
import java.util.List;
public class AssociateProjectKie extends VerticalLayout {
@ -26,39 +26,40 @@ public class AssociateProjectKie extends VerticalLayout {
private ProjectPersistService projectPersistService;
public AssociateProjectKie(DeploymentView deploymentView,Dialog dialog, ProjectPersist projectPersist){
public AssociateProjectKie(DeploymentView deploymentView, Dialog dialog, ProjectPersist projectPersist) {
projectPersistService= AppContext.getApplicationContext().getBean(ProjectPersistService.class);
projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
setClassName("creation-runtime-content");
label=new Label("Define your project : "+projectPersist.getProjectName());
label = new Label("Define the runtime(s) for the project : " + projectPersist.getProjectName());
label.setClassName("creation-runtime-title");
add(label);
label2=new Label("this step is essential before you can associate your project with a workbench");
label2 = new Label("This step is essential to be able to execute the rules defined in the project");
label2.setClassName("creation-runtime-title2");
add(label2);
gridRuntime=new GridRuntime();
gridRuntime = new GridRuntime(projectPersist);
add(gridRuntime);
associer=new Button("Associer");
associer = new Button("Link and Save");
associer.setEnabled(false);
associer.setClassName("login-application-connexion");
add(associer);
associer.addClickListener(buttonClickEvent -> {
List<RuntimePersist> lstToSave = new ArrayList<>();
for (RuntimePersist runtimePersist : gridRuntime.getSelectedItems()) {
lstToSave.add(runtimePersist);
}
if (lstToSave.size()>0) {
RuntimePersist runtimePersist=gridRuntime.getSelectedItems().stream().findFirst().get();
boolean tmp = projectPersistService.associate(projectPersist,lstToSave);
if(runtimePersist!=null) {
boolean tmp = projectPersistService.associate(projectPersist,runtimePersist);
if(tmp==true){
if (tmp == true) {
deploymentView.setDataProvider();
dialog.close();
}else {
} else {
associer.setEnabled(false);
Notification.show("There is already a project of this name on this runtime");
}
@ -66,10 +67,10 @@ public class AssociateProjectKie extends VerticalLayout {
});
gridRuntime.addSelectionListener(selectionEvent -> {
if(selectionEvent.getFirstSelectedItem()!=null&&selectionEvent.getFirstSelectedItem().isPresent()) {
if (selectionEvent.getFirstSelectedItem() != null && selectionEvent.getFirstSelectedItem().isPresent()) {
associer.setEnabled(true);
}else {
} else {
associer.setEnabled(false);
}
});

View file

@ -36,6 +36,7 @@ public class DefineProject extends VerticalLayout {
private UserConnectedService userConnectedService;
private ProjectPersistService projectPersistService;
private boolean createMode;
public DefineProject(DeploymentView deploymentView,Dialog dialog, ProjectPersist projectPersist){
@ -52,8 +53,12 @@ public class DefineProject extends VerticalLayout {
label2.setClassName("creation-runtime-title2");
add(label2);
nameDeploy=new TextFieldPerso("Name Deployment","",VaadinIcon.FILE_TEXT.create());
nameDeploy=new TextFieldPerso("Deployment Name ","",VaadinIcon.FILE_TEXT.create());
nameDeploy.getTextField().setRequired(true);
if (projectPersist.getDeploymentName()!=null
&& projectPersist.getDeploymentName().length()>0){
nameDeploy.getTextField().setValue((projectPersist.getDeploymentName()));
}
nameDeploy.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
projectPersist.setDeploymentName(nameDeploy.getTextField().getValue().replaceAll(" ","_"));
@ -69,6 +74,10 @@ public class DefineProject extends VerticalLayout {
mainClass=new ComboBoxPerso("MainClass", VaadinIcon.TREE_TABLE.create());
mainClass.getComboBox().setItems(projectPersist.getClassNameList());
mainClass.getComboBox().setRequired(true);
if (projectPersist.getMainClass()!= null
&& projectPersist.getMainClass().length()>0){
mainClass.getComboBox().setValue("class="+(String)projectPersist.getMainClass());
}
mainClass.getComboBox().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
String mainClassName=(String)mainClass.getComboBox().getValue();
@ -82,6 +91,10 @@ public class DefineProject extends VerticalLayout {
processID=new TextFieldPerso("Process ID","",VaadinIcon.TASKS.create());
processID.getTextField().setRequired(true);
if (projectPersist.getProcessID()!= null
&& projectPersist.getProcessID().length()>0){
processID.getTextField().setValue(projectPersist.getProcessID());
}
processID.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
processID.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
@ -90,11 +103,20 @@ public class DefineProject extends VerticalLayout {
add(processID);
valider=new Button("Valider");
valider=new Button("Save");
if (projectPersist.getProcessID()!= null
&& projectPersist.getProcessID().length()>0){
valider.setEnabled(true);
createMode=false;
}else {
valider.setEnabled(false);
createMode=true;
}
valider.setClassName("login-application-connexion");
valider.addClickListener(buttonClickEvent -> {
if (createMode==true) {
projectPersist.setStatus(ProjectPersist.DEFINI);
}
projectPersistService.addProjectToSession(projectPersist,true);
projectPersistService.getProjectRepository().save(projectPersist);
deploymentView.setDataProvider();

View file

@ -14,6 +14,7 @@ import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import com.vaadin.flow.component.html.Label;
import java.util.ArrayList;
import java.util.List;
public class GridRuntime extends Grid<RuntimePersist> {
@ -24,6 +25,7 @@ public class GridRuntime extends Grid<RuntimePersist> {
private TextField version;
private TextField status;
private String strRuntimeName="Runtime Name";
@ -31,6 +33,7 @@ public class GridRuntime extends Grid<RuntimePersist> {
private String strVersion="Version";
private String strStatus="State";
private ProjectPersistService projectPersistService;
private RuntimeService runtimeService;
@ -38,14 +41,30 @@ public class GridRuntime extends Grid<RuntimePersist> {
private ListDataProvider<RuntimePersist> dataProvider;
private ConfigurableFilterDataProvider<RuntimePersist,Void,SerializablePredicate<RuntimePersist>> filterDataProvider;
private ProjectPersist projectPersist;
public GridRuntime(){
public GridRuntime(ProjectPersist projectPersist){
this.projectPersist = projectPersist;
init();
//dataProvider.get
for (RuntimePersist runtimePersist : dataProvider.getItems()){
if (projectPersist.getServerNames().contains(runtimePersist.getServerName())){
getSelectionModel().select(runtimePersist);
}
}
}
public GridRuntime() {
init();
}
private void init(){
projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
runtimeService= AppContext.getApplicationContext().getBean(RuntimeService.class);
setClassName("deployment-grid-perso");
setSelectionMode(Grid.SelectionMode.SINGLE);
setSelectionMode(Grid.SelectionMode.MULTI);
Grid.Column<RuntimePersist> runtimeNameCo=addColumn(runtimePersist -> runtimePersist.getServerName());
runtimeName=new TextField(strRuntimeName);
@ -70,11 +89,18 @@ public class GridRuntime extends Grid<RuntimePersist> {
refreshtGrid(version.getValue(), strVersion);
});
versionCo.setHeader(version);
Grid.Column<RuntimePersist> statusCo=addColumn(runtimePersist -> runtimePersist.getStatus());
status=new TextField(strStatus);
status.setValueChangeMode(ValueChangeMode.EAGER);
status.addValueChangeListener(e -> {
refreshtGrid(status.getValue(), strVersion);
});
statusCo.setHeader(status);
addColumn(new ComponentRenderer<>(runtimePersist -> {
List<ProjectPersist> projectPersists=projectPersistService.getProjectRepository().findByServerName(runtimePersist.getServerName());
List<String> serverList = new ArrayList<>();
serverList.add(runtimePersist.getServerName());
List<ProjectPersist> projectPersists=projectPersistService.getProjectRepository().findByServerNamesIn(serverList);
Label label=new Label(projectPersists!=null?projectPersists.size()+"":"0");

View file

@ -19,91 +19,70 @@ import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadinComponent.Squelette.SqueletteComposant;
import org.chtijbug.drools.console.vaadinComponent.leftMenu.Action.DeploymentAction;
import org.chtijbug.drools.proxy.persistence.json.KeyProject;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;
@StyleSheet("css/accueil.css")
public class DeploymentView extends VerticalLayout implements AddLog{
public class DeploymentView extends VerticalLayout implements AddLog {
public static final String pageName="Deployment";
public static final String pageName = "Deployment";
//GRID composant
private Grid<ProjectPersist> projectPersistGrid;
private ListDataProvider<ProjectPersist> dataProvider;
private ConfigurableFilterDataProvider<ProjectPersist,Void,SerializablePredicate<ProjectPersist>> filterDataProvider;
private DeploymentAction deploymentAction;
private final String strNameDeploy = "Deploy name";
private final String strNameProject = "Project name";
private final String strGroupeId = "Groupe ID";
private final String strArtefactID = "Artefact ID";
//TEXTFIELD search
private TextField nameDeploy;
private TextField nameProject;
private TextField groupeId;
private TextField artifactId;
private TextField processId;
private TextField serverName;
private ComboBox status;
private final String strProcessID = "Process ID";
private final String strServerName = "Server Name";
private final String strStatus = "Status";
private Grid<ProjectPersist> projectPersistGrid;
private ListDataProvider<ProjectPersist> dataProvider;
private ConfigurableFilterDataProvider<ProjectPersist, Void, SerializablePredicate<ProjectPersist>> filterDataProvider;
private DeploymentAction deploymentAction;
//CONSTANTE Textfield
private final String strNameDeploy="Deploy name";
private final String strNameProject="Project name";
private final String strGroupeId="Groupe ID";
private final String strArtefactID="Artefact ID";
private final String strProcessID="Process ID";
private final String strServerName="Server Name";
private final String strStatus="Status";
private TextField nameDeploy;
private TextField nameProject;
private TextField groupeId;
private TextField artifactId;
private TextField processId;
private TextField serverName;
private ComboBox status;
//SERVICE
private ProjectPersistService projectPersistService;
private SqueletteComposant squeletteComposant;
public DeploymentView(SqueletteComposant squeletteComposant) {
this.squeletteComposant=squeletteComposant;
projectPersistService=AppContext.getApplicationContext().getBean(ProjectPersistService.class);
this.squeletteComposant = squeletteComposant;
projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
setClassName("deployment-content");
add(new Label("Project"));
projectPersistGrid=new Grid<>();
projectPersistGrid = new Grid<>();
projectPersistGrid.setClassName("deployment-grid-perso");
projectPersistGrid.setSelectionMode(Grid.SelectionMode.SINGLE);
Grid.Column<ProjectPersist> deployNameCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getDeploymentName());
nameDeploy=new TextField(strNameDeploy);
Grid.Column<ProjectPersist> deployNameCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getDeploymentName());
nameDeploy = new TextField(strNameDeploy);
nameDeploy.setValueChangeMode(ValueChangeMode.EAGER);
nameDeploy.addValueChangeListener(e -> {
refreshtGrid(nameDeploy.getValue(), strNameDeploy);
});
deployNameCo.setHeader(nameDeploy);
Grid.Column<ProjectPersist> nameProjectCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectName());
nameProject=new TextField(strNameProject);
Grid.Column<ProjectPersist> nameProjectCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectName());
nameProject = new TextField(strNameProject);
nameProject.setValueChangeMode(ValueChangeMode.EAGER);
nameProject.addValueChangeListener(e -> {
refreshtGrid(nameProject.getValue(), strNameProject);
@ -111,26 +90,26 @@ public class DeploymentView extends VerticalLayout implements AddLog{
nameProjectCo.setHeader(nameProject);
projectPersistGrid.addColumn(projectPersist -> projectPersist.getMainClass()).setHeader("ClassName")
.setComparator((projectPersist,t1) -> projectPersist.getMainClass().compareTo(t1.getMainClass()));
.setComparator((projectPersist, t1) -> projectPersist.getMainClass().compareTo(t1.getMainClass()));
Grid.Column<ProjectPersist> groupIdCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getGroupID());
groupeId=new TextField(strGroupeId);
Grid.Column<ProjectPersist> groupIdCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getGroupID());
groupeId = new TextField(strGroupeId);
groupeId.setValueChangeMode(ValueChangeMode.EAGER);
groupeId.addValueChangeListener(e -> {
refreshtGrid(groupeId.getValue(), strGroupeId);
});
groupIdCo.setHeader(groupeId);
Grid.Column<ProjectPersist> artifactIDCO=projectPersistGrid.addColumn(projectPersist -> projectPersist.getArtifactID());
artifactId=new TextField(strArtefactID);
Grid.Column<ProjectPersist> artifactIDCO = projectPersistGrid.addColumn(projectPersist -> projectPersist.getArtifactID());
artifactId = new TextField(strArtefactID);
artifactId.setValueChangeMode(ValueChangeMode.EAGER);
artifactId.addValueChangeListener(e -> {
refreshtGrid(artifactId.getValue(), strArtefactID);
});
artifactIDCO.setHeader(artifactId);
Grid.Column<ProjectPersist> processIDco=projectPersistGrid.addColumn(projectPersist -> projectPersist.getProcessID());
processId=new TextField(strProcessID);
Grid.Column<ProjectPersist> processIDco = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProcessID());
processId = new TextField(strProcessID);
processId.setValueChangeMode(ValueChangeMode.EAGER);
processId.addValueChangeListener(e -> {
refreshtGrid(processId.getValue(), strProcessID);
@ -138,8 +117,18 @@ public class DeploymentView extends VerticalLayout implements AddLog{
processIDco.setHeader(processId);
Grid.Column<ProjectPersist> serverNameCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getServerName());
serverName=new TextField(strServerName);
Grid.Column<ProjectPersist> serverNameCo = projectPersistGrid.addColumn(projectPersist -> {
String result = null;
for (String serverName : projectPersist.getServerNames()) {
if (result != null) {
result = result + ":" + serverName;
} else {
result = serverName;
}
}
return result;
});
serverName = new TextField(strServerName);
serverName.setValueChangeMode(ValueChangeMode.EAGER);
serverName.addValueChangeListener(e -> {
refreshtGrid(serverName.getValue(), strServerName);
@ -148,21 +137,21 @@ public class DeploymentView extends VerticalLayout implements AddLog{
projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectVersion()).setHeader("Version")
.setComparator((projectPersist,t1) -> projectPersist.getProjectVersion().compareTo(t1.getProjectVersion()));
.setComparator((projectPersist, t1) -> projectPersist.getProjectVersion().compareTo(t1.getProjectVersion()));
Grid.Column<ProjectPersist> statusCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getStatus());
status=new ComboBox(strProcessID);
Grid.Column<ProjectPersist> statusCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getStatus());
status = new ComboBox(strProcessID);
status.setClassName("deployment-combobox");
ArrayList<String> tmp=new ArrayList<>();
ArrayList<String> tmp = new ArrayList<>();
tmp.add(ProjectPersist.DEFINI);
tmp.add(ProjectPersist.Deployable);
tmp.add(ProjectPersist.ADEFINIR);
tmp.add(" ");
status.setItems(tmp);
status.addValueChangeListener(e -> {
refreshtGrid(status.getValue()!=null?status.getValue().toString():" ", strStatus);
refreshtGrid(status.getValue() != null ? status.getValue().toString() : " ", strStatus);
});
statusCo.setHeader(status);
@ -172,9 +161,9 @@ public class DeploymentView extends VerticalLayout implements AddLog{
projectPersistGrid.addSelectionListener(selectionEvent -> {
if(selectionEvent.getFirstSelectedItem()!=null&&selectionEvent.getFirstSelectedItem().isPresent()) {
if (selectionEvent.getFirstSelectedItem() != null && selectionEvent.getFirstSelectedItem().isPresent()) {
majAction(selectionEvent.getFirstSelectedItem().get());
}else {
} else {
getDeploymentAction().getAssociateKieServer().setEnabled(false);
getDeploymentAction().getDefinirProject().setEnabled(false);
getDeploymentAction().getDeployer().setEnabled(false);
@ -183,41 +172,40 @@ public class DeploymentView extends VerticalLayout implements AddLog{
//add(new ConsoleDeploy());
}
private void refreshtGrid(String value,String type){
private void refreshtGrid(String value, String type) {
filterDataProvider.setFilter(filterGrid(value.toUpperCase(),type));
filterDataProvider.setFilter(filterGrid(value.toUpperCase(), type));
projectPersistGrid.getDataProvider().refreshAll();
}
private SerializablePredicate<ProjectPersist> filterGrid(String value, String type){
private SerializablePredicate<ProjectPersist> filterGrid(String value, String type) {
SerializablePredicate<ProjectPersist> columnPredicate = null;
if(value.equals("")||value.equals(" ")||type.equals(" ")){
if (value.equals("") || value.equals(" ") || type.equals(" ")) {
columnPredicate = asset -> (true);
}else {
} else {
if (type.equals(strArtefactID)) {
columnPredicate = asset -> (
asset.getArtifactID()!=null&&asset.getArtifactID().toUpperCase().contains(value.toUpperCase()));
}else if(type.equals(strGroupeId)){
columnPredicate = asset -> (asset.getGroupID()!=null&&asset.getGroupID().toUpperCase().contains(value.toUpperCase()));
}
else if(type.equals(strNameDeploy)){
columnPredicate = asset -> (asset.getDeploymentName()!=null&&asset.getDeploymentName().toUpperCase().contains(value.toUpperCase()));
} else if(type.equals(strNameProject)){
columnPredicate = asset -> (asset.getProjectName()!=null&&asset.getProjectName().toString().toUpperCase().contains(value.toUpperCase()));
}else if(type.equals(strProcessID)){
columnPredicate = asset -> (asset.getProcessID()!=null&&asset.getProcessID().toUpperCase().contains(value.toUpperCase()));
}else if(type.equals(strStatus)){
columnPredicate = asset -> (asset.getStatus()!=null&&asset.getStatus().toUpperCase().equals(value.toUpperCase()));
}else if(type.equals(strServerName)){
columnPredicate = asset -> (asset.getServerName()!=null&&asset.getServerName().toUpperCase().equals(value.toUpperCase()));
asset.getArtifactID() != null && asset.getArtifactID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strGroupeId)) {
columnPredicate = asset -> (asset.getGroupID() != null && asset.getGroupID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strNameDeploy)) {
columnPredicate = asset -> (asset.getDeploymentName() != null && asset.getDeploymentName().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strNameProject)) {
columnPredicate = asset -> (asset.getProjectName() != null && asset.getProjectName().toString().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strProcessID)) {
columnPredicate = asset -> (asset.getProcessID() != null && asset.getProcessID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strStatus)) {
columnPredicate = asset -> (asset.getStatus() != null && asset.getStatus().toUpperCase().equals(value.toUpperCase()));
}
}
return columnPredicate;
}
public void setDataProvider(){
HashMap<String,ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
if(projectPersists!=null) {
public void setDataProvider() {
HashMap<String, ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
if (projectPersists != null) {
dataProvider = new ListDataProvider<>(projectPersists.values());
filterDataProvider = dataProvider.withConfigurableFilter();
@ -229,7 +217,8 @@ public class DeploymentView extends VerticalLayout implements AddLog{
}
}
public void reinitFilter(){
public void reinitFilter() {
artifactId.setValue("");
groupeId.setValue("");
@ -237,34 +226,36 @@ public class DeploymentView extends VerticalLayout implements AddLog{
nameProject.setValue("");
nameDeploy.setValue("");
}
public void majAction(ProjectPersist projectPersist){
if(projectPersist.getStatus().equals(ProjectPersist.DEFINI)){
public void majAction(ProjectPersist projectPersist) {
if (projectPersist.getStatus().equals(ProjectPersist.DEFINI)) {
getDeploymentAction().getAssociateKieServer().setEnabled(true);
getDeploymentAction().getDefinirProject().setEnabled(false);
getDeploymentAction().getDeployer().setEnabled(false);
}else if(projectPersist.getStatus().equals(ProjectPersist.ADEFINIR)){
} else if (projectPersist.getStatus().equals(ProjectPersist.ADEFINIR)) {
getDeploymentAction().getAssociateKieServer().setEnabled(false);
getDeploymentAction().getDefinirProject().setEnabled(true);
getDeploymentAction().getDeployer().setEnabled(false);
}else if(projectPersist.getStatus().equals(ProjectPersist.Deployable)){
} else if (projectPersist.getStatus().equals(ProjectPersist.Deployable)) {
getDeploymentAction().getAssociateKieServer().setEnabled(false);
getDeploymentAction().getDefinirProject().setEnabled(false);
getDeploymentAction().getAssociateKieServer().setEnabled(true);
getDeploymentAction().getDefinirProject().setEnabled(true);
getDeploymentAction().getDeployer().setEnabled(true);
}
}
@Override
public void addRow(String textToAdd,UI ui) {
public void addRow(String textToAdd, UI ui) {
ui.access(()->{
ui.access(() -> {
HorizontalLayout horizontalLayout=new HorizontalLayout();
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setClassName("console-row");
Label date=new Label(new Date()+" : ");
Label date = new Label(new Date() + " : ");
date.setClassName("console-date");
horizontalLayout.add(date);
horizontalLayout.add(new Label(textToAdd));
@ -277,14 +268,15 @@ public class DeploymentView extends VerticalLayout implements AddLog{
ui.getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
ui.push();
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
ui.getSession().unlock();
}finally {
} finally {
ui.getSession().unlock();
}
}
public Grid<ProjectPersist> getProjectPersistGrid() {
return projectPersistGrid;
}

View file

@ -177,11 +177,12 @@
<run>
<extraHosts>
<host>mongodb:192.168.1.102</host>
<host>declasin:192.168.1.184</host>
<host>mongodb:172.17.0.1</host>
<host>kie-wb:172.17.0.1</host>
</extraHosts>
<ports>
<port>8080:8080</port>
<port>10080:8080</port>
<port>10001:8001</port>
</ports>
</run>
</image>

View file

@ -19,7 +19,7 @@ ENV KIE_SERVER_PROFILE standalone-full
ENV CHTIJBUG_VERSION 2.0.10
# Do NOT use demo neither examples by default in this image (no internet connection required).
ENV KIE_DEMO false
ENV JAVA_OPTS -Xms256m -Xmx2512m
ENV JAVA_OPTS -Xms256m -Xmx4512m
@ -33,10 +33,6 @@ ADD maven/kie-wb.war /opt/jboss/wildfly/standalone/deployments/$KIE_CONTEXT_PAT
#touch $JBOSS_HOME/standalone/deployments/$KIE_CONTEXT_PATH.war.dodeploy && \
# rm -rf $HOME/$KIE_CONTEXT_PATH.war
####### MVN REPO ############
# https://bugzilla.redhat.com/show_bug.cgi?id=1263738
RUN mkdir -p $HOME/.m2/repository/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION && \
curl -o $HOME/.m2/repository/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION/guvnor-asset-mgmt-project-$KIE_VERSION.jar $KIE_REPOSITORY/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION/guvnor-asset-mgmt-project-$KIE_VERSION.jar
####### SCRIPTS ############
USER root
@ -66,20 +62,32 @@ chown jboss:jboss $JBOSS_HOME/standalone/configuration/application-roles.propert
# Switchback to jboss user
USER root
RUN yum install -y git
#RUN yum install -y git
RUN mkdir /home/db
RUN mkdir /home/lucene
RUN mkdir /home/niodir
RUN mkdir /home/kie-example
RUN mkdir /m2_kiewb
ADD settings.xml /m2_kiewb/settings.xml
RUN mkdir /m2_kiewb/repository
####### MVN REPO ############
# https://bugzilla.redhat.com/show_bug.cgi?id=1263738
RUN mkdir -p /m2_kiewb/repository/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION && \
curl -o /m2_kiewb/repository/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION/guvnor-asset-mgmt-project-$KIE_VERSION.jar $KIE_REPOSITORY/org/guvnor/guvnor-asset-mgmt-project/$KIE_VERSION/guvnor-asset-mgmt-project-$KIE_VERSION.jar
RUN chown jboss:jboss /home/db
RUN chown jboss:jboss /home/lucene
RUN chown jboss:jboss /home/niodir
RUN chown jboss:jboss /home/kie-example
RUN chown jboss:jboss /m2_kiewb
RUN chown -R jboss:jboss /m2_kiewb/repository
#RUN cd /home/kie-example && git clone https://github.com/chtiJBUG/onboarding-nautic-project.git
#RUN cd /home/kie-example && git clone https://github.com/chtiJBUG/onboarding-carinsurance-project.git
#RUN cd /home/kie-example && git clone https://github.com/chtiJBUG/onboarding-loyalty-project.git
####### EXPOSE INTERNAL JBPM GIT PORT ############
EXPOSE 8001
EXPOSE 8080
####### RUNNING DROOLS-WB ############
VOLUME /home/db

View file

@ -2,7 +2,7 @@
# Start Wildfly with the given arguments.
echo "Running Drools Workbench on JBoss Wildfly..."
exec ./standalone.sh -b $JBOSS_BIND_ADDRESS -c $KIE_SERVER_PROFILE.xml -Dorg.kie.demo=$KIE_DEMO -Dorg.kie.example=$KIE_DEMO -Djava.net.preferIPv4Stack=true -Dorg.kie.example.repositories=/home/kie-example -Dorg.kie.example=true -Dorg.uberfire.metadata.index.dir=/home/lucene -Dorg.uberfire.nio.git.daemon.host=0.0.0.0 -Dorg.guvnor.m2repo.dir=$JBOSS_HOME/.m2/repository -DM2_HOME==$JBOSS_HOME/.m2/repository -Dorg.uberfire.nio.git.dir=/home/niodir -Derrai.bus.enable_sse_support=false
exec ./standalone.sh -b $JBOSS_BIND_ADDRESS -c $KIE_SERVER_PROFILE.xml -Djava.net.preferIPv4Stack=true -Dorg.uberfire.metadata.index.dir=/home/lucene -Dorg.uberfire.nio.git.daemon.host=0.0.0.0 -Dorg.guvnor.m2repo.dir=/m2_kiewb/repository -DM2_HOME=/m2_kiewb/repository -Dorg.uberfire.nio.git.dir=/home/niodir -Dorg.appformer.m2repo.url=http://localhost:8080/kie-wb/maven2 -Dkie.maven.settings.custom=/m2_kiewb/settings.xml -Dfile.encoding=UTF-8 -Duser.language=fr -Duser.country=FR
exit $?

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/m2_kiewb/repository</localRepository>
<servers>
<server>
<id>pymma-release</id>
<username>pymma-dev</username>
<password>VlcBe38jE9eNIu5H</password>
</server>
<server>
<id>pymma-snapshot</id>
<username>pymma-dev</username>
<password>VlcBe38jE9eNIu5H</password>
</server>
</servers>
<mirrors>
</mirrors>
<profiles>
<profile>
<id>pymma-declasin</id>
<repositories>
<repository>
<id>pymma-release</id>
<name>pymma repo release</name>
<url>https://nexus.pymma-software.com/nexus/content/repositories/pymma-release/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases>
</repository>
<repository>
<id>pymma-snapshot</id>
<name>pymma repo release</name>
<url>https://nexus.pymma-software.com/nexus/content/repositories/pymma-snapshot/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>pymma-declasin</activeProfile>
</activeProfiles>
</settings>

View file

@ -66,6 +66,14 @@
<orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-spring:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-core-starter:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-quartz2:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-core:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
<orderEntry type="library" name="Maven: com.mchange:c3p0:0.9.5.2" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="module" module-name="drools-framework-business-indexer-persistence" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-elasticsearch:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-elasticsearch:3.1.2.RELEASE" level="project" />
@ -122,14 +130,16 @@
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.29.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.29.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.29.Final" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="module" module-name="drools-framewwork-business-proxy-persistence" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:bson:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:mongodb-driver-core:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-ftp:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-core:2.23.0" level="project" />
<orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.54" level="project" />
<orderEntry type="library" name="Maven: commons-net:commons-net:3.6" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="module" module-name="drools-framework-runtime-entity" />
<orderEntry type="module" module-name="drools-framework-common" />
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />

View file

@ -48,13 +48,20 @@
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-quartz2</artifactId>
</dependency>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-business-indexer-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-business-proxy-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
@ -83,4 +90,126 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>docker-build</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-indexer</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:192.168.43.94</host>
<host>elasticsearchhost:192.168.43.94</host>
</extraHosts>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-deploy</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-indexer</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:192.168.1.100</host>
</extraHosts>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>mydeploy</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View file

@ -0,0 +1,12 @@
FROM openjdk:8-jre-slim
ADD application.properties /application.properties
ADD maven/drools-framework-business-indexer-app-1.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.config.location=file:./","-jar","/app.jar"]
#ENTRYPOINT ["java","-jar","/app.jar"]

View file

@ -0,0 +1,7 @@
spring.data.elasticsearch.cluster-nodes=elasticsearchhost:9300
kieserver.login=kieserver
kieserver.password=kieserver1
server.port=8070
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=mongodb:27017

View file

@ -20,10 +20,12 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
// CHECKSTYLE:OFF
@SpringBootApplication
@Configuration
@EnableMongoRepositories(basePackages = "org.chtijbug.drools.proxy.persistence.repository")
@EnableElasticsearchRepositories(basePackages = "org.chtijbug.drools.indexer.persistence.repository")
public class DroolsBusinessIndexerServer {

View file

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

View file

@ -1,24 +1,37 @@
package org.chtijbug.drools.indexer.route;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class IndexerRoute extends RouteBuilder {
@Value("${kieserver.login}")
private String login;
@Value("${kieserver.password}")
private String password;
private String host;
private String port;
private String id;
public IndexerRoute(String id,String login, String password, String host, String port) {
this.login = login;
this.password = password;
this.host = host;
this.port = port;
this.id=id;
}
@Override
public void configure() throws Exception {
System.out.println("coucou");
//from("sftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
String url="sftp://"+login+"@localhost:9080?password="+password+"&move=.done";
from(url).to("bean:storeService?method=store(${header.CamelFileName},${body})");
String url="sftp://"+login+"@"+host+":"+port+"?password="+password+"&move=.done";
from(url).routeId(id).to("bean:storeService?method=store(${header.CamelFileName},${body})");
}
}

View file

@ -0,0 +1,69 @@
package org.chtijbug.drools.indexer.service;
import org.apache.camel.CamelContext;
import org.chtijbug.drools.indexer.route.IndexerRoute;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
@Service("startRouteService")
public class StartRouteService {
@Value("${kieserver.login}")
private String login;
@Value("${kieserver.password}")
private String password;
@Autowired
CamelContext camelContext;
@Autowired
RuntimeRepository runtimeRepository;
private Map<String,RuntimePersist> routes = new HashMap<>();
private Map<String,IndexerRoute> routesCamel = new HashMap<>();
public void updateConfig() throws Exception {
for (RuntimePersist runtime : runtimeRepository.findAll()){
if (routes.containsKey(runtime.getId())==false){
IndexerRoute indexerRoute =new IndexerRoute(runtime.getId(),login,password,runtime.getSftpHost(),runtime.getSftpPort());
camelContext.addRoutes(indexerRoute);
routes.put(runtime.getSftpHost()+":"+runtime.getSftpPort(),runtime.duplicate());
routesCamel.put(runtime.getSftpHost()+":"+runtime.getSftpPort(),indexerRoute);
}else{
RuntimePersist existingRoutes = routes.get(runtime.getId());
if (!existingRoutes.getSftpHost().equals(runtime.getSftpHost())
|| !existingRoutes.getSftpPort().equals(runtime.getSftpPort())){
//routes must be reloaded
IndexerRoute routeToDelete=routesCamel.get(runtime.getId());
routesCamel.remove(runtime.getId());
camelContext.removeRoute(runtime.getId());
routes.remove(runtime.getId());
IndexerRoute indexerRoute =new IndexerRoute(runtime.getId(),login,password,runtime.getSftpHost(),runtime.getSftpPort());
camelContext.addRoutes(indexerRoute);
routes.put(runtime.getId(),runtime.duplicate());
routesCamel.put(runtime.getId(),indexerRoute);
}
}
}
}
@PostConstruct
public void constructIndexerRoute() throws Exception {
for (RuntimePersist runtime : runtimeRepository.findAll()){
IndexerRoute indexerRoute =new IndexerRoute(runtime.getId(),login,password,runtime.getSftpHost(),runtime.getSftpPort());
camelContext.addRoutes(indexerRoute);
routes.put(runtime.getId(),runtime.duplicate());
routesCamel.put(runtime.getId(),indexerRoute);
}
}
}

View file

@ -2,4 +2,6 @@ spring.data.elasticsearch.cluster-nodes=localhost:9300
kieserver.login=kieserver
kieserver.password=kieserver1
server.port=8070
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=localhost:27017

View file

@ -230,5 +230,131 @@
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>docker-build</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-proxy</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:172.17.0.1</host>
<host>kie-wb:172.17.0.1</host>
</extraHosts>
<ports>
<port>8200:8200</port>
<port>9080:9080</port>
</ports>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docker-deploy</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.21.0</version>
<configuration>
<!--registry>192.168.1.184:12500</registry-->
<dockerHost>${docker.Host}</dockerHost>
<!-- this is for Mac and Amazon Linux -->
<!--dockerHost>unix:///var/run/docker.sock</dockerHost-->
<verbose>true</verbose>
<images>
<image>
<name>runtime-proxy</name>
<build>
<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
<!--copies Jar to the maven directory (uses Assembly system)-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
<tags>
<tag>latest</tag>
</tags>
</build>
<run>
<extraHosts>
<host>mongodb:192.168.1.100</host>
</extraHosts>
<ports>
<port>8080:8080</port>
</ports>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>mydeploy</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View file

@ -0,0 +1,18 @@
FROM openjdk:8-jre-slim
EXPOSE 8200
EXPOSE 9080
ADD application.properties /application.properties
ADD maven/drools-framework-business-proxy-app-1.0-SNAPSHOT.jar app.jar
RUN mkdir /m2_kieserver
RUN mkdir /m2_kieserver/repository
ADD settings.xml /m2_kieserver/settings.xml
RUN mkdir /trace
RUN mkdir /niodir-kieserver
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Dspring.config.location=file:/ -DM2_HOME=/m2_kieserver -Dorg.chtijbug.server.tracedir=/trace -Dorg.appformer.m2repo.url=http://kie-wb:8080/kie-wb/maven2 -Dorg.uberfire.nio.git.dir=/niodir-kieserver -Dkie.maven.settings.custom=/m2_kieserver/settings.xml -Dorg.kie.server.repo=/niodir-kieserver -Dfile.encoding=UTF-8 -Duser.language=fr -Duser.country=FR -Dorg.kie.server.id=server1 -Dorg.chtijbug.server.sftpPort=9080","-jar","/app.jar"]
#ENTRYPOINT ["java","-jar","/app.jar"]

View file

@ -0,0 +1,23 @@
## ---------------------------------------------------------------------------
## Licensed to the Apache Software Foundation (ASF) under one or more
## contributor license agreements. See the NOTICE file distributed with
## this work for additional information regarding copyright ownership.
## The ASF licenses this file to You under the Apache License, Version 2.0
## (the "License"); you may not use this file except in compliance with
## the License. You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
# the name of Camel
server.port=8090
camel.springboot.name=MyCamel
# to reconfigure the camel servlet context-path mapping to use /api/* instead of /camel/*
camel.component.servlet.mapping.context-path=/api/*
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=mongodb:27017

View file

@ -0,0 +1,63 @@
<settings>
<localRepository>/m2_kieserver/repository</localRepository>
<servers>
<server>
<id>guvnor-m2-repo</id>
<username>admin</username>
<password>admin</password>
<configuration>
<wagonProvider>httpclient</wagonProvider>
<httpConfiguration>
<all>
<usePreemptive>true</usePreemptive>
</all>
</httpConfiguration>
</configuration>
</server>
</servers>
<profiles>
<profile>
<id>kie</id>
<repositories>
<repository>
<id>guvnor-m2-repo</id>
<name>Guvnor M2 Repo</name>
<url>http://kie-wb:8080/kie-wb/maven2/</url>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>guvnor-m2-repo</id>
<name>Guvnor M2 Repo</name>
<url>http://kie-wb:8080/kie-wb/maven2/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>kie</activeProfile>
</activeProfiles>
</settings>

View file

@ -7,6 +7,6 @@ import org.springframework.stereotype.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()");
from("quartz2://myGroup/myTimerName?cron=0/5+*+*+?+*+*").to("bean:kieService?method=updateConfig()");
}
}

View file

@ -27,6 +27,7 @@ public class DroolsRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
rest("/" + containerId).description(containerId + " Rest service")
.consumes("application/json")
.produces("application/json")
@ -34,6 +35,7 @@ public class DroolsRouter extends RouteBuilder {
// .param().name("containerId").type(path).description("Container ID where the rule artefact id deployed").dataType("integer").endParam()
.param().name("body").type(body).description("The Data drools should work on").endParam()
.responseMessage().code(200).message("Data drools worked on").endResponseMessage()
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.containerId + "," + this.processID + ",${body})");
}
}

View file

@ -17,6 +17,7 @@ package org.chtijbug.drools.proxy.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.CamelContext;
import org.apache.camel.Route;
import org.chtijbug.drools.proxy.camel.DroolsRouter;
import org.chtijbug.drools.proxy.persistence.model.ContainerPojoPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
@ -38,15 +39,13 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
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;
import java.util.UUID;
import java.util.*;
@Service("kieService")
public class KieServiceCommon {
@ -68,6 +67,8 @@ public class KieServiceCommon {
@Value("${server.port}")
private int serverPort;
private Map<String,DroolsRouter> routes = new HashMap<>();
public KieServiceCommon() {
// for now, if no server impl is passed as parameter, create one
this.server = KieServerLocator.getInstance();
@ -104,7 +105,11 @@ public class KieServiceCommon {
} catch (UnknownHostException e) {
logger.info("initCamelBusinessRoutes.getLocalHost", e);
}
RuntimePersist runtimePersist = new RuntimePersist(serverName, version, "http://" + hostName + ":" + serverPort, String.valueOf(serverPort), sftpPort);
RuntimePersist runtimePersist = new RuntimePersist(serverName, version, "http://" + hostName + ":" + serverPort, String.valueOf(serverPort), sftpPort,hostName,RuntimePersist.STATUS.UP.toString());
runtimeRepository.save(runtimePersist);
}else{
RuntimePersist runtimePersist =itIsMes.get(0);
runtimePersist.setStatus(RuntimePersist.STATUS.UP.toString());
runtimeRepository.save(runtimePersist);
}
try {
@ -118,6 +123,28 @@ public class KieServiceCommon {
}
}
@PreDestroy
public void stopRuntime(){
String serverName = System.getProperty("org.kie.server.id");
List<RuntimePersist> itIsMes = runtimeRepository.findByServerName(serverName);
if (itIsMes.size()==1){
RuntimePersist runtimePersist =itIsMes.get(0);
runtimePersist.setStatus(RuntimePersist.STATUS.DOWN.toString());
runtimeRepository.save(runtimePersist);
}
}
public void deleteCamelBusinessRoute(String containerId) throws Exception {
if (routes.containsKey(containerId)){
DroolsRouter routeToDelete = routes.get(containerId);
String target = routeToDelete.getRouteCollection().getRoutes().get(0).getId();
for (Route route : camelContext.getRoutes()){
if (route.getId().equals(target)){
camelContext.stopRoute(route.getId());
camelContext.removeRoute(route.getId());
}
}
}
}
public void initCamelBusinessRoute(ContainerPojoPersist container) throws Exception {
ClassLoader localClassLoader = null;
@ -140,8 +167,10 @@ public class KieServiceCommon {
Thread.currentThread().setContextClassLoader(classLoader);
String projectName = container.getContainerId();
String processId = container.getProcessID();
this.deleteCamelBusinessRoute(projectName);
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId);
camelContext.addRoutes(droolsRouter);
routes.put(containerId,droolsRouter);
} finally {
if (localClassLoader != null) {
Thread.currentThread().setContextClassLoader(localClassLoader);
@ -181,8 +210,7 @@ public class KieServiceCommon {
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());
this.disposeContainer(element.getContainerId());
KieContainerResource newContainer = new KieContainerResource();
newContainer.setContainerId(element.getContainerId());
newContainer.setReleaseId(new ReleaseId());
@ -194,7 +222,12 @@ public class KieServiceCommon {
element.setStatus(ContainerPojoPersist.STATUS.UP.toString());
containerRepository.save(element);
}
List<ContainerPojoPersist> containersToDelete = containerRepository.findByServerNameAndStatus(serverName, ContainerPojoPersist.STATUS.TODELETE.toString());
for (ContainerPojoPersist element : containersToDelete) {
this.disposeContainer(element.getContainerId());
this.deleteCamelBusinessRoute(element.getContainerId());
containerRepository.delete(element);
}
}
public KieContainerResource createContainerWithRestBusinessService(String id, KieContainerResource container, String className, String processID) {

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
@ -25,6 +25,15 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="drools-framewwork-business-proxy-persistence" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:bson:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.mongodb:mongodb-driver-core:3.8.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-mongodb:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.github.mkopylec:charon-spring-boot-starter:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />
@ -33,7 +42,6 @@
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.11.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
@ -41,7 +49,6 @@
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.7" level="project" />
@ -60,6 +67,18 @@
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot-starter:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-spring-boot:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-spring:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-core-starter:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-quartz2:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.camel:camel-core:2.23.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
<orderEntry type="library" name="Maven: com.mchange:c3p0:0.9.5.2" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.2" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />

View file

@ -9,9 +9,14 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>drools-framework-business-reverse-proxx</artifactId>
<artifactId>drools-framework-business-reverse-proxy</artifactId>
<dependencies>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-business-proxy-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.github.mkopylec</groupId>
<artifactId>charon-spring-boot-starter</artifactId>
@ -22,6 +27,15 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-quartz2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@ -67,7 +81,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-dependencies</artifactId>
<version>${camel.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

View file

@ -3,8 +3,10 @@ package org.chtijbug.drools.reverseproxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@SpringBootApplication
@EnableMongoRepositories(basePackages = "org.chtijbug.drools.proxy.persistence.repository")
public class DroolsBusinessReverseProxyServer {
public static void main(String[] args) {

View file

@ -0,0 +1,12 @@
package org.chtijbug.drools.reverseproxy.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/5+*+*+?+*+*").to("bean:updateService?method=updateConfig()");
}
}

View file

@ -5,16 +5,22 @@ import com.github.mkopylec.charon.configuration.MappingProperties;
import com.github.mkopylec.charon.core.http.HttpClientProvider;
import com.github.mkopylec.charon.core.mappings.MappingsCorrector;
import com.github.mkopylec.charon.core.mappings.MappingsProvider;
import org.chtijbug.drools.reverseproxy.service.UpdateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Component
public class CustomMappingsProvider extends MappingsProvider {
@Autowired
private UpdateService updateService;
public CustomMappingsProvider(ServerProperties server, CharonProperties charon, MappingsCorrector mappingsCorrector, HttpClientProvider httpClientProvider) {
super(server, charon, mappingsCorrector,httpClientProvider);
}
@ -23,28 +29,11 @@ public class CustomMappingsProvider extends MappingsProvider {
@Override
protected boolean shouldUpdateMappings(HttpServletRequest httpServletRequest) {
return false;
return updateService.getToUpdate();
}
@Override
protected List<MappingProperties> retrieveMappings() {
List<MappingProperties> total = new ArrayList<>();
MappingProperties mappingProperties = new MappingProperties();
total.add(mappingProperties);
mappingProperties.setName("fraud-doc");
mappingProperties.setPath("/fraud-doc");
mappingProperties.getCustomConfiguration().put("connect",200);
mappingProperties.getCustomConfiguration().put("read",200);
mappingProperties.setStripPath(true);
mappingProperties.getDestinations().add("http://macbook-pro-de-nicolas-2.local:8091/api/");
MappingProperties mappingProperties2 = new MappingProperties();
total.add(mappingProperties2);
mappingProperties2.setName("fraud-run");
mappingProperties2.setPath("/fraud-Oney-fraud");
mappingProperties2.getCustomConfiguration().put("connect",200);
mappingProperties2.getCustomConfiguration().put("read",200);
mappingProperties2.setStripPath(true);
mappingProperties2.getDestinations().add("http://macbook-pro-de-nicolas-2.local:8091/api/fraud-Oney-fraud/");
return total;
return updateService.retrievePath();
}
}

View file

@ -0,0 +1,129 @@
package org.chtijbug.drools.reverseproxy.service;
import com.github.mkopylec.charon.configuration.MappingProperties;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.*;
@Service("updateService")
public class UpdateService {
@Autowired
private ProjectRepository projectRepository;
@Autowired
private RuntimeRepository runtimeRepository;
private Map<String, RuntimePersist> runtimes = new HashMap<>();
private Map<String, ProjectPersist> projects = new HashMap<>();
private Boolean toUpdate = false;
private List<MappingProperties> mappings=new ArrayList<>();
public Boolean getToUpdate() {
return toUpdate;
}
public void updateConfig() {
if (this.toUpdate==false) {
this.toUpdate = isToUpdate();
if (this.toUpdate==true){
generateMappings();
}
}
}
private boolean isToUpdate() {
boolean result = false;
runtimes.clear();
List<RuntimePersist> runtimePersists = runtimeRepository.findAll();
for (RuntimePersist runtimePersist : runtimePersists) {
runtimes.put(runtimePersist.getServerName(), runtimePersist.duplicate());
}
List<ProjectPersist> projectPersists = projectRepository.findAll();
List<String> projectOk = new ArrayList<>();
for (ProjectPersist projectPersist : projectPersists) {
if (projectPersist.getServerNames().size() > 0) {
projectOk.add(projectPersist.getContainerID());
if (projects.containsKey(projectPersist.getContainerID()) == false) {
return true;
}
// if a new project is not in the already displayed
List<String> list1 = projectPersist.getServerNames();
int l1 = list1.size();
ProjectPersist run2 = projects.get(projectPersist.getContainerID());
List<String> list2 = run2.getServerNames();
if (list2.size() != list1.size()) {
return true;
}
list1.retainAll(list2);
if (list2.size() != list1.size()) {
return true;
}
}
}
// An existing project in the reverse is no more to be displayed
for (String goodId : projects.keySet()) {
if (projectOk.contains(goodId) == false) {
return true;
}
}
return result;
}
public List<MappingProperties> retrievePath() {
this.toUpdate=false;
return mappings;
}
private void generateMappings(){
projects.clear();
List<MappingProperties> paths = new ArrayList<>();
Collection<ProjectPersist> projectPersists = projectRepository.findAll();
for (ProjectPersist projectPersist : projectPersists) {
if (projectPersist.getServerNames().size() > 0) {
projects.put(projectPersist.getContainerID(), projectPersist.duplicate());
MappingProperties mappingProperties2 = new MappingProperties();
for (String serverName : projectPersist.getServerNames()) {
RuntimePersist runtimePersist = runtimes.get(serverName);
String hostName = runtimePersist.getHostname() + "/api/" + projectPersist.getContainerID();
mappingProperties2.getDestinations().add(hostName);
}
paths.add(mappingProperties2);
mappingProperties2.setName(projectPersist.getContainerID());
mappingProperties2.setPath("/" + projectPersist.getContainerID());
mappingProperties2.getCustomConfiguration().put("connect", 2000);
mappingProperties2.getCustomConfiguration().put("read", 2000);
mappingProperties2.setStripPath(true);
}
}
mappings.clear();
mappings.addAll(paths);
}
@PostConstruct
public void initConfig() {
List<RuntimePersist> runtimePersists = runtimeRepository.findAll();
for (RuntimePersist runtimePersist : runtimePersists) {
runtimes.put(runtimePersist.getServerName(), runtimePersist);
}
List<ProjectPersist> projectPersists = projectRepository.findAll();
for (ProjectPersist projectPersist : projectPersists) {
if (projectPersist.getServerNames().size() > 0) {
projects.put(projectPersist.getContainerID(), projectPersist.duplicate());
}
}
generateMappings();
}
}

View file

@ -1 +1,3 @@
server.port=9500
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=localhost:27017

View file

@ -9,7 +9,8 @@ public class ContainerPojoPersist {
public enum STATUS {
UP,
DOWN,
TODEPLOY
TODEPLOY,
TODELETE
}
@Id
private String id;

View file

@ -1,12 +1,12 @@
package org.chtijbug.drools.proxy.persistence.model;
import org.bson.types.ObjectId;
import org.chtijbug.drools.proxy.persistence.json.KeyProject;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Document
@ -37,7 +37,7 @@ public class ProjectPersist implements Serializable {
private String containerID;
private String serverName;
private List<String> serverNames= new ArrayList<>();
private String status;
@ -45,6 +45,19 @@ public class ProjectPersist implements Serializable {
public ProjectPersist(){}
public ProjectPersist(String deploymentName, KeyProject projectName, String mainClass, String groupID, String artifactID, String processID, String projectVersion, String containerID, List<String> serverNames, String status) {
this.deploymentName = deploymentName;
this.projectName = projectName;
this.mainClass = mainClass;
this.groupID = groupID;
this.artifactID = artifactID;
this.processID = processID;
this.projectVersion = projectVersion;
this.containerID = containerID;
this.serverNames = serverNames;
this.status = status;
}
public String getDeploymentName() {
return deploymentName;
}
@ -109,12 +122,12 @@ public class ProjectPersist implements Serializable {
this.projectVersion = projectVersion;
}
public String getServerName() {
return serverName;
public List<String> getServerNames() {
return serverNames;
}
public void setServerName(String serverName) {
this.serverName = serverName;
public void setServerName(List<String> serverNames) {
this.serverNames = serverNames;
}
public String getStatus() {
@ -132,4 +145,11 @@ public class ProjectPersist implements Serializable {
public void setClassNameList(List<String> classNameList) {
this.classNameList = classNameList;
}
public ProjectPersist duplicate(){
ArrayList<String> listServerNames = new ArrayList<String>();
listServerNames.addAll(serverNames);
ProjectPersist duplicate = new ProjectPersist(deploymentName,projectName,mainClass,groupID,artifactID,processID,projectVersion,containerID,listServerNames,status);
return duplicate;
}
}

View file

@ -7,7 +7,10 @@ import org.springframework.data.mongodb.core.mapping.Document;
@Document
public class RuntimePersist {
public enum STATUS {
UP,
DOWN
}
@Id
private String id=new ObjectId().toString();
@ -20,14 +23,25 @@ public class RuntimePersist {
private String serverPort;
private String sftpHost;
private String sftpPort;
public RuntimePersist(String serverName, String version, String hostname,String serverPort,String sftpPort) {
private String status;
public RuntimePersist(String serverName, String version, String hostname,String serverPort,String sftpPort,String sftpHost,String status) {
this.serverName = serverName;
this.version = version;
this.hostname = hostname;
this.serverPort = serverPort;
this.sftpPort = sftpPort;
this.sftpHost = sftpHost;
this.status=status;
}
public RuntimePersist duplicate(){
RuntimePersist duplicate = new RuntimePersist(serverName,version,hostname,serverPort,sftpPort,sftpHost,status);
return duplicate;
}
public String getId() {
@ -77,4 +91,20 @@ public class RuntimePersist {
public void setServerPort(String serverPort) {
this.serverPort = serverPort;
}
public String getSftpHost() {
return sftpHost;
}
public void setSftpHost(String sftpHost) {
this.sftpHost = sftpHost;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}

View file

@ -2,7 +2,6 @@ package org.chtijbug.drools.proxy.persistence.repository;
import org.chtijbug.drools.proxy.persistence.json.KeyProject;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@ -13,7 +12,7 @@ public interface ProjectRepository extends MongoRepository<ProjectPersist, Strin
public ProjectPersist findByProjectName(KeyProject projectName);
public ProjectPersist findByDeploymentName(String deploymentName);
public List<ProjectPersist> findByServerName(String serverName);
public List<ProjectPersist> findByServerNameAndDeploymentName(String serverName,String deploymentName);
public List<ProjectPersist> findByServerNamesIn(List<String> serverNames);
public List<ProjectPersist> findByServerNamesInAndDeploymentName(List<String> serverNames,String deploymentName);
}

View file

@ -22,6 +22,6 @@
<module>drools-framewwork-business-proxy-persistence</module>
<module>drools-framework-business-indexer-app</module>
<module>drools-framework-business-indexer-persistence</module>
<module>drools-framework-business-reverse-proxx</module>
<module>drools-framework-business-reverse-proxy</module>
</modules>
</project>