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> <version>1.0-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>war</packaging> <packaging>jar</packaging>
<artifactId>drools-framework-admin-console</artifactId> <artifactId>drools-framework-admin-console</artifactId>
<properties> <properties>
@ -220,32 +220,10 @@
<build> <build>
<finalName>drools-framework-admin-console</finalName> <finalName>drools-framework-admin-console</finalName>
<pluginManagement>
<plugins> <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> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId> <artifactId>maven-clean-plugin</artifactId>
@ -264,23 +242,17 @@
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dvaadin.productionMode</jvmArguments>
</configuration>
<executions> <executions>
<execution> <execution>
<goals> <goals>
<goal>repackage</goal> <goal>repackage</goal>
</goals> </goals>
<configuration>
<classifier>spring-boot</classifier>
<mainClass>
org.chtijbug.drools.console.DroolsSpringBootConsoleApplication
</mainClass>
</configuration>
</execution> </execution>
</executions> </executions>
<configuration>
<executable>true</executable>
</configuration>
</plugin> </plugin>
</plugins> </plugins>
@ -288,11 +260,9 @@
<profiles> <profiles>
<profile> <!--profile>
<id>productionMode</id> <id>productionMode</id>
<!--activation>
<activeByDefault>true</activeByDefault>
</activation!-->
<dependencies> <dependencies>
<dependency> <dependency>
@ -327,6 +297,130 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </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> </profile>
</profiles> </profiles>
</project> </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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -44,154 +45,159 @@ public class ProjectPersistService {
@Autowired @Autowired
private RuntimeRepository runtimeRepository; private RuntimeRepository runtimeRepository;
public ProjectPersistService(){ public ProjectPersistService() {
this.config = AppContext.getApplicationContext().getBean(KieConfigurationData.class); 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) { if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse); projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse);
projectRepository.save(projectPersist); projectRepository.save(projectPersist);
addProjectToSession(projectPersist,true); addProjectToSession(projectPersist, true);
}else { } else {
addProjectToSession(projectPersist,false); addProjectToSession(projectPersist, false);
} }
} }
} }
public HashMap<String,ProjectPersist> getProjectsSession() { public HashMap<String, ProjectPersist> getProjectsSession() {
return (HashMap<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(PROJECT); return (HashMap<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(PROJECT);
} }
public void addProjectToSession(ProjectPersist projectPersist,boolean isModifiable) { public void addProjectToSession(ProjectPersist projectPersist,boolean isModifiable) {
HashMap<String,ProjectPersist> projectPersists=getProjectsSession(); HashMap<String, ProjectPersist> projectPersists = getProjectsSession();
if(projectPersists==null){ if (projectPersists == null) {
projectPersists=new HashMap<>(); projectPersists = new HashMap<>();
} }
if(isModifiable){ if (isModifiable) {
projectPersists.put(projectPersist.getProjectName().toString(),projectPersist); projectPersists.put(projectPersist.getProjectName().toString(), projectPersist);
}else { } else {
ProjectPersist tmp=projectPersists.get(projectPersist.getProjectName().toString()); ProjectPersist tmp = projectPersists.get(projectPersist.getProjectName().toString());
if(tmp==null){ if (tmp == null) {
projectPersists.put(projectPersist.getProjectName().toString(),projectPersist); projectPersists.put(projectPersist.getProjectName().toString(), projectPersist);
} }
} }
VaadinSession.getCurrent().setAttribute(PROJECT, projectPersists); 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){ projectPersist.getServerNames().clear();
return false; for (RuntimePersist runtimePersist : runtimePersists) {
}else { 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.setStatus(ProjectPersist.Deployable);
projectPersist.setContainerID(projectPersist.getDeploymentName()+"-"+projectPersist.getProjectName()); projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName());
projectRepository.save(projectPersist); projectRepository.save(projectPersist);
addProjectToSession(projectPersist,true); addProjectToSession(projectPersist, true);
return 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(), waitForJobToBeEnded(config.getKiewbUrl(), userConnectedService.getUserConnected().getUserName(),
userConnectedService.getUserConnected().getUserPassword(), projectPersist, addLog,ui); userConnectedService.getUserConnected().getUserPassword(), projectPersist, addLog, ui);
return false; return false;
} }
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectResponse platformProjectResponse) {
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectResponse platformProjectResponse){ ProjectPersist projectPersist = new ProjectPersist();
ProjectPersist projectPersist=new ProjectPersist();
projectPersist.setArtifactID(platformProjectResponse.getArtifactId()); projectPersist.setArtifactID(platformProjectResponse.getArtifactId());
projectPersist.setGroupID(platformProjectResponse.getGroupId()); 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.setProjectVersion(platformProjectResponse.getVersion());
projectPersist.setStatus(ProjectPersist.ADEFINIR); projectPersist.setStatus(ProjectPersist.ADEFINIR);
projectPersist.setClassNameList(platformProjectResponse.getJavaClasses()); projectPersist.setClassNameList(platformProjectResponse.getJavaClasses());
return projectPersist; 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() { public void run() {
JobStatus result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(), 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(), 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()); // ContainerPojoPersist toto = containerRepository.findByServerNameAndContainerId(projectPersist.getContainerID());
List<RuntimePersist> kieservers = runtimeRepository.findByServerName(projectPersist.getServerName()); for (String serverName : projectPersist.getServerNames()) {
if (kieservers.size()==1) { List<RuntimePersist> kieservers = runtimeRepository.findByServerName(serverName);
ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(projectPersist.getServerName(),projectPersist.getContainerID()); if (kieservers.size() == 1) {
if (existingContainer==null) { ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(serverName, projectPersist.getContainerID());
if (existingContainer == null) {
ContainerPojoPersist newContainer = new ContainerPojoPersist(); ContainerPojoPersist newContainer = new ContainerPojoPersist();
newContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString()); newContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString());
newContainer.setClassName(projectPersist.getMainClass()); newContainer.setClassName(projectPersist.getMainClass());
newContainer.setProcessID(projectPersist.getProcessID()); newContainer.setProcessID(projectPersist.getProcessID());
newContainer.setContainerId(projectPersist.getContainerID()); newContainer.setContainerId(projectPersist.getContainerID());
newContainer.setServerName(projectPersist.getServerName()); newContainer.setServerName(serverName);
newContainer.setGroupId(projectPersist.getGroupID()); newContainer.setGroupId(projectPersist.getGroupID());
newContainer.setArtifactId(projectPersist.getArtifactID()); newContainer.setArtifactId(projectPersist.getArtifactID());
newContainer.setVersion(projectPersist.getProjectVersion()); newContainer.setVersion(projectPersist.getProjectVersion());
containerRepository.save(newContainer); containerRepository.save(newContainer);
}else{ } else {
existingContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString()); existingContainer.setStatus(ContainerPojoPersist.STATUS.TODEPLOY.toString());
containerRepository.save(existingContainer); 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(); 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"; String isJobDone = "NO";
while ("NO".equals(isJobDone)) { while ("NO".equals(isJobDone)) {
@ -201,11 +207,11 @@ public class ProjectPersistService {
if ("DUPLICATE_RESOURCE".equals(jobStatus.getStatus()) if ("DUPLICATE_RESOURCE".equals(jobStatus.getStatus())
|| "SUCCESS".equals(jobStatus.getStatus())) { || "SUCCESS".equals(jobStatus.getStatus())) {
isJobDone = "YES"; isJobDone = "YES";
workOnGoingView.addRow("JobID=" + jobID + " finished",ui); workOnGoingView.addRow("JobID=" + jobID + " finished", ui);
} else if ("ACCEPTED".equals(jobStatus.getStatus()) } else if ("ACCEPTED".equals(jobStatus.getStatus())
|| ("APPROVED".equals(jobStatus.getStatus()))) { || ("APPROVED".equals(jobStatus.getStatus()))) {
try { try {
workOnGoingView.addRow("JobID=" + jobID + " not yet finished",ui); workOnGoingView.addRow("JobID=" + jobID + " not yet finished", ui);
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); 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() { public ProjectRepository getProjectRepository() {
return projectRepository; return projectRepository;
} }

View file

@ -11,6 +11,8 @@ public class UserConnectedService {
public static String ASSET = "2"; public static String ASSET = "2";
public static String SPACE = "3"; public static String SPACE = "3";
public static String PROJECT = "4"; public static String PROJECT = "4";
public static String CURRENTPROJECT = "5";
public UserConnected getUserConnected() { public UserConnected getUserConnected() {
return (UserConnected) VaadinSession.getCurrent().getAttribute(USER); return (UserConnected) VaadinSession.getCurrent().getAttribute(USER);
@ -41,10 +43,10 @@ public class UserConnectedService {
} }
public void addProjectToSession(String projectName) { public void addProjectToSession(String projectName) {
VaadinSession.getCurrent().setAttribute(PROJECT, projectName); VaadinSession.getCurrent().setAttribute(CURRENTPROJECT, projectName);
} }
public String getProject() { 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.console.view.DeploymentView;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist; import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist; import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class AssociateProjectKie extends VerticalLayout { public class AssociateProjectKie extends VerticalLayout {
@ -26,39 +26,40 @@ public class AssociateProjectKie extends VerticalLayout {
private ProjectPersistService projectPersistService; 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"); 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"); label.setClassName("creation-runtime-title");
add(label); 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"); label2.setClassName("creation-runtime-title2");
add(label2); add(label2);
gridRuntime=new GridRuntime(); gridRuntime = new GridRuntime(projectPersist);
add(gridRuntime); add(gridRuntime);
associer=new Button("Associer"); associer = new Button("Link and Save");
associer.setEnabled(false); associer.setEnabled(false);
associer.setClassName("login-application-connexion"); associer.setClassName("login-application-connexion");
add(associer); add(associer);
associer.addClickListener(buttonClickEvent -> { 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) { if (tmp == true) {
boolean tmp = projectPersistService.associate(projectPersist,runtimePersist);
if(tmp==true){
deploymentView.setDataProvider(); deploymentView.setDataProvider();
dialog.close(); dialog.close();
}else { } else {
associer.setEnabled(false); associer.setEnabled(false);
Notification.show("There is already a project of this name on this runtime"); 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 -> { gridRuntime.addSelectionListener(selectionEvent -> {
if(selectionEvent.getFirstSelectedItem()!=null&&selectionEvent.getFirstSelectedItem().isPresent()) { if (selectionEvent.getFirstSelectedItem() != null && selectionEvent.getFirstSelectedItem().isPresent()) {
associer.setEnabled(true); associer.setEnabled(true);
}else { } else {
associer.setEnabled(false); associer.setEnabled(false);
} }
}); });

View file

@ -36,6 +36,7 @@ public class DefineProject extends VerticalLayout {
private UserConnectedService userConnectedService; private UserConnectedService userConnectedService;
private ProjectPersistService projectPersistService; private ProjectPersistService projectPersistService;
private boolean createMode;
public DefineProject(DeploymentView deploymentView,Dialog dialog, ProjectPersist projectPersist){ public DefineProject(DeploymentView deploymentView,Dialog dialog, ProjectPersist projectPersist){
@ -52,8 +53,12 @@ public class DefineProject extends VerticalLayout {
label2.setClassName("creation-runtime-title2"); label2.setClassName("creation-runtime-title2");
add(label2); add(label2);
nameDeploy=new TextFieldPerso("Name Deployment","",VaadinIcon.FILE_TEXT.create()); nameDeploy=new TextFieldPerso("Deployment Name ","",VaadinIcon.FILE_TEXT.create());
nameDeploy.getTextField().setRequired(true); nameDeploy.getTextField().setRequired(true);
if (projectPersist.getDeploymentName()!=null
&& projectPersist.getDeploymentName().length()>0){
nameDeploy.getTextField().setValue((projectPersist.getDeploymentName()));
}
nameDeploy.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> { nameDeploy.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify(); verify();
projectPersist.setDeploymentName(nameDeploy.getTextField().getValue().replaceAll(" ","_")); projectPersist.setDeploymentName(nameDeploy.getTextField().getValue().replaceAll(" ","_"));
@ -69,6 +74,10 @@ public class DefineProject extends VerticalLayout {
mainClass=new ComboBoxPerso("MainClass", VaadinIcon.TREE_TABLE.create()); mainClass=new ComboBoxPerso("MainClass", VaadinIcon.TREE_TABLE.create());
mainClass.getComboBox().setItems(projectPersist.getClassNameList()); mainClass.getComboBox().setItems(projectPersist.getClassNameList());
mainClass.getComboBox().setRequired(true); mainClass.getComboBox().setRequired(true);
if (projectPersist.getMainClass()!= null
&& projectPersist.getMainClass().length()>0){
mainClass.getComboBox().setValue("class="+(String)projectPersist.getMainClass());
}
mainClass.getComboBox().addValueChangeListener(textFieldStringComponentValueChangeEvent -> { mainClass.getComboBox().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify(); verify();
String mainClassName=(String)mainClass.getComboBox().getValue(); String mainClassName=(String)mainClass.getComboBox().getValue();
@ -82,6 +91,10 @@ public class DefineProject extends VerticalLayout {
processID=new TextFieldPerso("Process ID","",VaadinIcon.TASKS.create()); processID=new TextFieldPerso("Process ID","",VaadinIcon.TASKS.create());
processID.getTextField().setRequired(true); processID.getTextField().setRequired(true);
if (projectPersist.getProcessID()!= null
&& projectPersist.getProcessID().length()>0){
processID.getTextField().setValue(projectPersist.getProcessID());
}
processID.getTextField().setValueChangeMode(ValueChangeMode.EAGER); processID.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
processID.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> { processID.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify(); verify();
@ -90,11 +103,20 @@ public class DefineProject extends VerticalLayout {
add(processID); 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); valider.setEnabled(false);
createMode=true;
}
valider.setClassName("login-application-connexion"); valider.setClassName("login-application-connexion");
valider.addClickListener(buttonClickEvent -> { valider.addClickListener(buttonClickEvent -> {
if (createMode==true) {
projectPersist.setStatus(ProjectPersist.DEFINI); projectPersist.setStatus(ProjectPersist.DEFINI);
}
projectPersistService.addProjectToSession(projectPersist,true); projectPersistService.addProjectToSession(projectPersist,true);
projectPersistService.getProjectRepository().save(projectPersist); projectPersistService.getProjectRepository().save(projectPersist);
deploymentView.setDataProvider(); 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 org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
import com.vaadin.flow.component.html.Label; import com.vaadin.flow.component.html.Label;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class GridRuntime extends Grid<RuntimePersist> { public class GridRuntime extends Grid<RuntimePersist> {
@ -24,6 +25,7 @@ public class GridRuntime extends Grid<RuntimePersist> {
private TextField version; private TextField version;
private TextField status;
private String strRuntimeName="Runtime Name"; private String strRuntimeName="Runtime Name";
@ -31,6 +33,7 @@ public class GridRuntime extends Grid<RuntimePersist> {
private String strVersion="Version"; private String strVersion="Version";
private String strStatus="State";
private ProjectPersistService projectPersistService; private ProjectPersistService projectPersistService;
private RuntimeService runtimeService; private RuntimeService runtimeService;
@ -38,14 +41,30 @@ public class GridRuntime extends Grid<RuntimePersist> {
private ListDataProvider<RuntimePersist> dataProvider; private ListDataProvider<RuntimePersist> dataProvider;
private ConfigurableFilterDataProvider<RuntimePersist,Void,SerializablePredicate<RuntimePersist>> filterDataProvider; 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); projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
runtimeService= AppContext.getApplicationContext().getBean(RuntimeService.class); runtimeService= AppContext.getApplicationContext().getBean(RuntimeService.class);
setClassName("deployment-grid-perso"); setClassName("deployment-grid-perso");
setSelectionMode(Grid.SelectionMode.SINGLE); setSelectionMode(Grid.SelectionMode.MULTI);
Grid.Column<RuntimePersist> runtimeNameCo=addColumn(runtimePersist -> runtimePersist.getServerName()); Grid.Column<RuntimePersist> runtimeNameCo=addColumn(runtimePersist -> runtimePersist.getServerName());
runtimeName=new TextField(strRuntimeName); runtimeName=new TextField(strRuntimeName);
@ -70,11 +89,18 @@ public class GridRuntime extends Grid<RuntimePersist> {
refreshtGrid(version.getValue(), strVersion); refreshtGrid(version.getValue(), strVersion);
}); });
versionCo.setHeader(version); 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 -> { addColumn(new ComponentRenderer<>(runtimePersist -> {
List<String> serverList = new ArrayList<>();
List<ProjectPersist> projectPersists=projectPersistService.getProjectRepository().findByServerName(runtimePersist.getServerName()); serverList.add(runtimePersist.getServerName());
List<ProjectPersist> projectPersists=projectPersistService.getProjectRepository().findByServerNamesIn(serverList);
Label label=new Label(projectPersists!=null?projectPersists.size()+"":"0"); 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.service.util.AppContext;
import org.chtijbug.drools.console.vaadinComponent.Squelette.SqueletteComposant; import org.chtijbug.drools.console.vaadinComponent.Squelette.SqueletteComposant;
import org.chtijbug.drools.console.vaadinComponent.leftMenu.Action.DeploymentAction; 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 org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set;
@StyleSheet("css/accueil.css") @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 //GRID composant
private final String strNameDeploy = "Deploy name";
private Grid<ProjectPersist> projectPersistGrid; private final String strNameProject = "Project name";
private final String strGroupeId = "Groupe ID";
private ListDataProvider<ProjectPersist> dataProvider; private final String strArtefactID = "Artefact ID";
private ConfigurableFilterDataProvider<ProjectPersist,Void,SerializablePredicate<ProjectPersist>> filterDataProvider;
private DeploymentAction deploymentAction;
//TEXTFIELD search //TEXTFIELD search
private final String strProcessID = "Process ID";
private TextField nameDeploy; private final String strServerName = "Server Name";
private final String strStatus = "Status";
private TextField nameProject; private Grid<ProjectPersist> projectPersistGrid;
private ListDataProvider<ProjectPersist> dataProvider;
private TextField groupeId; private ConfigurableFilterDataProvider<ProjectPersist, Void, SerializablePredicate<ProjectPersist>> filterDataProvider;
private DeploymentAction deploymentAction;
private TextField artifactId;
private TextField processId;
private TextField serverName;
private ComboBox status;
//CONSTANTE Textfield //CONSTANTE Textfield
private TextField nameDeploy;
private final String strNameDeploy="Deploy name"; private TextField nameProject;
private TextField groupeId;
private final String strNameProject="Project name"; private TextField artifactId;
private TextField processId;
private final String strGroupeId="Groupe ID"; private TextField serverName;
private ComboBox status;
private final String strArtefactID="Artefact ID";
private final String strProcessID="Process ID";
private final String strServerName="Server Name";
private final String strStatus="Status";
//SERVICE //SERVICE
private ProjectPersistService projectPersistService; private ProjectPersistService projectPersistService;
private SqueletteComposant squeletteComposant; private SqueletteComposant squeletteComposant;
public DeploymentView(SqueletteComposant squeletteComposant) { public DeploymentView(SqueletteComposant squeletteComposant) {
this.squeletteComposant=squeletteComposant; this.squeletteComposant = squeletteComposant;
projectPersistService=AppContext.getApplicationContext().getBean(ProjectPersistService.class); projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
setClassName("deployment-content"); setClassName("deployment-content");
add(new Label("Project")); add(new Label("Project"));
projectPersistGrid=new Grid<>(); projectPersistGrid = new Grid<>();
projectPersistGrid.setClassName("deployment-grid-perso"); projectPersistGrid.setClassName("deployment-grid-perso");
projectPersistGrid.setSelectionMode(Grid.SelectionMode.SINGLE); projectPersistGrid.setSelectionMode(Grid.SelectionMode.SINGLE);
Grid.Column<ProjectPersist> deployNameCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getDeploymentName()); Grid.Column<ProjectPersist> deployNameCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getDeploymentName());
nameDeploy=new TextField(strNameDeploy); nameDeploy = new TextField(strNameDeploy);
nameDeploy.setValueChangeMode(ValueChangeMode.EAGER); nameDeploy.setValueChangeMode(ValueChangeMode.EAGER);
nameDeploy.addValueChangeListener(e -> { nameDeploy.addValueChangeListener(e -> {
refreshtGrid(nameDeploy.getValue(), strNameDeploy); refreshtGrid(nameDeploy.getValue(), strNameDeploy);
}); });
deployNameCo.setHeader(nameDeploy); deployNameCo.setHeader(nameDeploy);
Grid.Column<ProjectPersist> nameProjectCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectName()); Grid.Column<ProjectPersist> nameProjectCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectName());
nameProject=new TextField(strNameProject); nameProject = new TextField(strNameProject);
nameProject.setValueChangeMode(ValueChangeMode.EAGER); nameProject.setValueChangeMode(ValueChangeMode.EAGER);
nameProject.addValueChangeListener(e -> { nameProject.addValueChangeListener(e -> {
refreshtGrid(nameProject.getValue(), strNameProject); refreshtGrid(nameProject.getValue(), strNameProject);
@ -111,26 +90,26 @@ public class DeploymentView extends VerticalLayout implements AddLog{
nameProjectCo.setHeader(nameProject); nameProjectCo.setHeader(nameProject);
projectPersistGrid.addColumn(projectPersist -> projectPersist.getMainClass()).setHeader("ClassName") 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()); Grid.Column<ProjectPersist> groupIdCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getGroupID());
groupeId=new TextField(strGroupeId); groupeId = new TextField(strGroupeId);
groupeId.setValueChangeMode(ValueChangeMode.EAGER); groupeId.setValueChangeMode(ValueChangeMode.EAGER);
groupeId.addValueChangeListener(e -> { groupeId.addValueChangeListener(e -> {
refreshtGrid(groupeId.getValue(), strGroupeId); refreshtGrid(groupeId.getValue(), strGroupeId);
}); });
groupIdCo.setHeader(groupeId); groupIdCo.setHeader(groupeId);
Grid.Column<ProjectPersist> artifactIDCO=projectPersistGrid.addColumn(projectPersist -> projectPersist.getArtifactID()); Grid.Column<ProjectPersist> artifactIDCO = projectPersistGrid.addColumn(projectPersist -> projectPersist.getArtifactID());
artifactId=new TextField(strArtefactID); artifactId = new TextField(strArtefactID);
artifactId.setValueChangeMode(ValueChangeMode.EAGER); artifactId.setValueChangeMode(ValueChangeMode.EAGER);
artifactId.addValueChangeListener(e -> { artifactId.addValueChangeListener(e -> {
refreshtGrid(artifactId.getValue(), strArtefactID); refreshtGrid(artifactId.getValue(), strArtefactID);
}); });
artifactIDCO.setHeader(artifactId); artifactIDCO.setHeader(artifactId);
Grid.Column<ProjectPersist> processIDco=projectPersistGrid.addColumn(projectPersist -> projectPersist.getProcessID()); Grid.Column<ProjectPersist> processIDco = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProcessID());
processId=new TextField(strProcessID); processId = new TextField(strProcessID);
processId.setValueChangeMode(ValueChangeMode.EAGER); processId.setValueChangeMode(ValueChangeMode.EAGER);
processId.addValueChangeListener(e -> { processId.addValueChangeListener(e -> {
refreshtGrid(processId.getValue(), strProcessID); refreshtGrid(processId.getValue(), strProcessID);
@ -138,8 +117,18 @@ public class DeploymentView extends VerticalLayout implements AddLog{
processIDco.setHeader(processId); processIDco.setHeader(processId);
Grid.Column<ProjectPersist> serverNameCo=projectPersistGrid.addColumn(projectPersist -> projectPersist.getServerName()); Grid.Column<ProjectPersist> serverNameCo = projectPersistGrid.addColumn(projectPersist -> {
serverName=new TextField(strServerName); 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.setValueChangeMode(ValueChangeMode.EAGER);
serverName.addValueChangeListener(e -> { serverName.addValueChangeListener(e -> {
refreshtGrid(serverName.getValue(), strServerName); refreshtGrid(serverName.getValue(), strServerName);
@ -148,21 +137,21 @@ public class DeploymentView extends VerticalLayout implements AddLog{
projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectVersion()).setHeader("Version") 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()); Grid.Column<ProjectPersist> statusCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getStatus());
status=new ComboBox(strProcessID); status = new ComboBox(strProcessID);
status.setClassName("deployment-combobox"); status.setClassName("deployment-combobox");
ArrayList<String> tmp=new ArrayList<>(); ArrayList<String> tmp = new ArrayList<>();
tmp.add(ProjectPersist.DEFINI); tmp.add(ProjectPersist.DEFINI);
tmp.add(ProjectPersist.Deployable); tmp.add(ProjectPersist.Deployable);
tmp.add(ProjectPersist.ADEFINIR); tmp.add(ProjectPersist.ADEFINIR);
tmp.add(" "); tmp.add(" ");
status.setItems(tmp); status.setItems(tmp);
status.addValueChangeListener(e -> { status.addValueChangeListener(e -> {
refreshtGrid(status.getValue()!=null?status.getValue().toString():" ", strStatus); refreshtGrid(status.getValue() != null ? status.getValue().toString() : " ", strStatus);
}); });
statusCo.setHeader(status); statusCo.setHeader(status);
@ -172,9 +161,9 @@ public class DeploymentView extends VerticalLayout implements AddLog{
projectPersistGrid.addSelectionListener(selectionEvent -> { projectPersistGrid.addSelectionListener(selectionEvent -> {
if(selectionEvent.getFirstSelectedItem()!=null&&selectionEvent.getFirstSelectedItem().isPresent()) { if (selectionEvent.getFirstSelectedItem() != null && selectionEvent.getFirstSelectedItem().isPresent()) {
majAction(selectionEvent.getFirstSelectedItem().get()); majAction(selectionEvent.getFirstSelectedItem().get());
}else { } else {
getDeploymentAction().getAssociateKieServer().setEnabled(false); getDeploymentAction().getAssociateKieServer().setEnabled(false);
getDeploymentAction().getDefinirProject().setEnabled(false); getDeploymentAction().getDefinirProject().setEnabled(false);
getDeploymentAction().getDeployer().setEnabled(false); getDeploymentAction().getDeployer().setEnabled(false);
@ -183,41 +172,40 @@ public class DeploymentView extends VerticalLayout implements AddLog{
//add(new ConsoleDeploy()); //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(); projectPersistGrid.getDataProvider().refreshAll();
} }
private SerializablePredicate<ProjectPersist> filterGrid(String value, String type){
private SerializablePredicate<ProjectPersist> filterGrid(String value, String type) {
SerializablePredicate<ProjectPersist> columnPredicate = null; SerializablePredicate<ProjectPersist> columnPredicate = null;
if(value.equals("")||value.equals(" ")||type.equals(" ")){ if (value.equals("") || value.equals(" ") || type.equals(" ")) {
columnPredicate = asset -> (true); columnPredicate = asset -> (true);
}else { } else {
if (type.equals(strArtefactID)) { if (type.equals(strArtefactID)) {
columnPredicate = asset -> ( columnPredicate = asset -> (
asset.getArtifactID()!=null&&asset.getArtifactID().toUpperCase().contains(value.toUpperCase())); asset.getArtifactID() != null && asset.getArtifactID().toUpperCase().contains(value.toUpperCase()));
}else if(type.equals(strGroupeId)){ } else if (type.equals(strGroupeId)) {
columnPredicate = asset -> (asset.getGroupID()!=null&&asset.getGroupID().toUpperCase().contains(value.toUpperCase())); columnPredicate = asset -> (asset.getGroupID() != null && asset.getGroupID().toUpperCase().contains(value.toUpperCase()));
} } else if (type.equals(strNameDeploy)) {
else if(type.equals(strNameDeploy)){ columnPredicate = asset -> (asset.getDeploymentName() != null && asset.getDeploymentName().toUpperCase().contains(value.toUpperCase()));
columnPredicate = asset -> (asset.getDeploymentName()!=null&&asset.getDeploymentName().toUpperCase().contains(value.toUpperCase())); } else if (type.equals(strNameProject)) {
} else if(type.equals(strNameProject)){ columnPredicate = asset -> (asset.getProjectName() != null && asset.getProjectName().toString().toUpperCase().contains(value.toUpperCase()));
columnPredicate = asset -> (asset.getProjectName()!=null&&asset.getProjectName().toString().toUpperCase().contains(value.toUpperCase())); } else if (type.equals(strProcessID)) {
}else if(type.equals(strProcessID)){ columnPredicate = asset -> (asset.getProcessID() != null && asset.getProcessID().toUpperCase().contains(value.toUpperCase()));
columnPredicate = asset -> (asset.getProcessID()!=null&&asset.getProcessID().toUpperCase().contains(value.toUpperCase())); } else if (type.equals(strStatus)) {
}else if(type.equals(strStatus)){ columnPredicate = asset -> (asset.getStatus() != null && asset.getStatus().toUpperCase().equals(value.toUpperCase()));
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()));
} }
} }
return columnPredicate; return columnPredicate;
} }
public void setDataProvider(){
HashMap<String,ProjectPersist> projectPersists = projectPersistService.getProjectsSession(); public void setDataProvider() {
if(projectPersists!=null) {
HashMap<String, ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
if (projectPersists != null) {
dataProvider = new ListDataProvider<>(projectPersists.values()); dataProvider = new ListDataProvider<>(projectPersists.values());
filterDataProvider = dataProvider.withConfigurableFilter(); filterDataProvider = dataProvider.withConfigurableFilter();
@ -229,7 +217,8 @@ public class DeploymentView extends VerticalLayout implements AddLog{
} }
} }
public void reinitFilter(){
public void reinitFilter() {
artifactId.setValue(""); artifactId.setValue("");
groupeId.setValue(""); groupeId.setValue("");
@ -237,34 +226,36 @@ public class DeploymentView extends VerticalLayout implements AddLog{
nameProject.setValue(""); nameProject.setValue("");
nameDeploy.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().getAssociateKieServer().setEnabled(true);
getDeploymentAction().getDefinirProject().setEnabled(false); getDeploymentAction().getDefinirProject().setEnabled(false);
getDeploymentAction().getDeployer().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().getAssociateKieServer().setEnabled(false);
getDeploymentAction().getDefinirProject().setEnabled(true); getDeploymentAction().getDefinirProject().setEnabled(true);
getDeploymentAction().getDeployer().setEnabled(false); getDeploymentAction().getDeployer().setEnabled(false);
}else if(projectPersist.getStatus().equals(ProjectPersist.Deployable)){ } else if (projectPersist.getStatus().equals(ProjectPersist.Deployable)) {
getDeploymentAction().getAssociateKieServer().setEnabled(false); getDeploymentAction().getAssociateKieServer().setEnabled(true);
getDeploymentAction().getDefinirProject().setEnabled(false); getDeploymentAction().getDefinirProject().setEnabled(true);
getDeploymentAction().getDeployer().setEnabled(true); getDeploymentAction().getDeployer().setEnabled(true);
} }
} }
@Override @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"); horizontalLayout.setClassName("console-row");
Label date=new Label(new Date()+" : "); Label date = new Label(new Date() + " : ");
date.setClassName("console-date"); date.setClassName("console-date");
horizontalLayout.add(date); horizontalLayout.add(date);
horizontalLayout.add(new Label(textToAdd)); horizontalLayout.add(new Label(textToAdd));
@ -277,14 +268,15 @@ public class DeploymentView extends VerticalLayout implements AddLog{
ui.getPushConfiguration().setPushMode(PushMode.AUTOMATIC); ui.getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
ui.push(); ui.push();
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
ui.getSession().unlock(); ui.getSession().unlock();
}finally { } finally {
ui.getSession().unlock(); ui.getSession().unlock();
} }
} }
public Grid<ProjectPersist> getProjectPersistGrid() { public Grid<ProjectPersist> getProjectPersistGrid() {
return projectPersistGrid; return projectPersistGrid;
} }

View file

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

View file

@ -19,7 +19,7 @@ ENV KIE_SERVER_PROFILE standalone-full
ENV CHTIJBUG_VERSION 2.0.10 ENV CHTIJBUG_VERSION 2.0.10
# Do NOT use demo neither examples by default in this image (no internet connection required). # Do NOT use demo neither examples by default in this image (no internet connection required).
ENV KIE_DEMO false 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 && \ #touch $JBOSS_HOME/standalone/deployments/$KIE_CONTEXT_PATH.war.dodeploy && \
# rm -rf $HOME/$KIE_CONTEXT_PATH.war # 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 ############ ####### SCRIPTS ############
USER root USER root
@ -66,20 +62,32 @@ chown jboss:jboss $JBOSS_HOME/standalone/configuration/application-roles.propert
# Switchback to jboss user # Switchback to jboss user
USER root USER root
RUN yum install -y git #RUN yum install -y git
RUN mkdir /home/db RUN mkdir /home/db
RUN mkdir /home/lucene RUN mkdir /home/lucene
RUN mkdir /home/niodir RUN mkdir /home/niodir
RUN mkdir /home/kie-example 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/db
RUN chown jboss:jboss /home/lucene RUN chown jboss:jboss /home/lucene
RUN chown jboss:jboss /home/niodir RUN chown jboss:jboss /home/niodir
RUN chown jboss:jboss /home/kie-example 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-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-carinsurance-project.git
#RUN cd /home/kie-example && git clone https://github.com/chtiJBUG/onboarding-loyalty-project.git #RUN cd /home/kie-example && git clone https://github.com/chtiJBUG/onboarding-loyalty-project.git
####### EXPOSE INTERNAL JBPM GIT PORT ############ ####### EXPOSE INTERNAL JBPM GIT PORT ############
EXPOSE 8001 EXPOSE 8001
EXPOSE 8080
####### RUNNING DROOLS-WB ############ ####### RUNNING DROOLS-WB ############
VOLUME /home/db VOLUME /home/db

View file

@ -2,7 +2,7 @@
# Start Wildfly with the given arguments. # Start Wildfly with the given arguments.
echo "Running Drools Workbench on JBoss Wildfly..." 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 $? 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-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-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-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="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.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" /> <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-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-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: 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="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-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: 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: 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-runtime-entity" />
<orderEntry type="module" module-name="drools-framework-common" /> <orderEntry type="module" module-name="drools-framework-common" />
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" /> <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />

View file

@ -48,13 +48,20 @@
<artifactId>camel-spring-boot-starter</artifactId> <artifactId>camel-spring-boot-starter</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-quartz2</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.pymmasoftware.jbpm</groupId> <groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-business-indexer-persistence</artifactId> <artifactId>drools-framework-business-indexer-persistence</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-business-proxy-persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.camel</groupId> <groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId> <artifactId>camel-ftp</artifactId>
@ -83,4 +90,126 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </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> </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.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
// CHECKSTYLE:OFF // CHECKSTYLE:OFF
@SpringBootApplication @SpringBootApplication
@Configuration @Configuration
@EnableMongoRepositories(basePackages = "org.chtijbug.drools.proxy.persistence.repository")
@EnableElasticsearchRepositories(basePackages = "org.chtijbug.drools.indexer.persistence.repository") @EnableElasticsearchRepositories(basePackages = "org.chtijbug.drools.indexer.persistence.repository")
public class DroolsBusinessIndexerServer { 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; package org.chtijbug.drools.indexer.route;
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class IndexerRoute extends RouteBuilder { public class IndexerRoute extends RouteBuilder {
@Value("${kieserver.login}")
private String login; private String login;
@Value("${kieserver.password}")
private String 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 @Override
public void configure() throws Exception { public void configure() throws Exception {
System.out.println("coucou"); System.out.println("coucou");
//from("sftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo"); //from("sftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
String url="sftp://"+login+"@localhost:9080?password="+password+"&move=.done"; String url="sftp://"+login+"@"+host+":"+port+"?password="+password+"&move=.done";
from(url).to("bean:storeService?method=store(${header.CamelFileName},${body})"); 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.login=kieserver
kieserver.password=kieserver1 kieserver.password=kieserver1
server.port=8070
spring.data.mongodb.database=businessProxyDB
spring.data.mongodb.host=localhost:27017

View file

@ -230,5 +230,131 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </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> </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 { public class AutodeployRouter extends RouteBuilder {
@Override @Override
public void configure() throws Exception { 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 @Override
public void configure() throws Exception { public void configure() throws Exception {
rest("/" + containerId).description(containerId + " Rest service") rest("/" + containerId).description(containerId + " Rest service")
.consumes("application/json") .consumes("application/json")
.produces("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("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() .param().name("body").type(body).description("The Data drools should work on").endParam()
.responseMessage().code(200).message("Data drools worked on").endResponseMessage() .responseMessage().code(200).message("Data drools worked on").endResponseMessage()
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.containerId + "," + this.processID + ",${body})"); .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 com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.CamelContext; import org.apache.camel.CamelContext;
import org.apache.camel.Route;
import org.chtijbug.drools.proxy.camel.DroolsRouter; import org.chtijbug.drools.proxy.camel.DroolsRouter;
import org.chtijbug.drools.proxy.persistence.model.ContainerPojoPersist; import org.chtijbug.drools.proxy.persistence.model.ContainerPojoPersist;
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist; 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 org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject; import javax.inject.Inject;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@Service("kieService") @Service("kieService")
public class KieServiceCommon { public class KieServiceCommon {
@ -68,6 +67,8 @@ public class KieServiceCommon {
@Value("${server.port}") @Value("${server.port}")
private int serverPort; private int serverPort;
private Map<String,DroolsRouter> routes = new HashMap<>();
public KieServiceCommon() { public KieServiceCommon() {
// for now, if no server impl is passed as parameter, create one // for now, if no server impl is passed as parameter, create one
this.server = KieServerLocator.getInstance(); this.server = KieServerLocator.getInstance();
@ -104,7 +105,11 @@ public class KieServiceCommon {
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
logger.info("initCamelBusinessRoutes.getLocalHost", 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); runtimeRepository.save(runtimePersist);
} }
try { 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 { public void initCamelBusinessRoute(ContainerPojoPersist container) throws Exception {
ClassLoader localClassLoader = null; ClassLoader localClassLoader = null;
@ -140,8 +167,10 @@ public class KieServiceCommon {
Thread.currentThread().setContextClassLoader(classLoader); Thread.currentThread().setContextClassLoader(classLoader);
String projectName = container.getContainerId(); String projectName = container.getContainerId();
String processId = container.getProcessID(); String processId = container.getProcessID();
this.deleteCamelBusinessRoute(projectName);
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId); DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, kieContainerInstance, processId);
camelContext.addRoutes(droolsRouter); camelContext.addRoutes(droolsRouter);
routes.put(containerId,droolsRouter);
} finally { } finally {
if (localClassLoader != null) { if (localClassLoader != null) {
Thread.currentThread().setContextClassLoader(localClassLoader); Thread.currentThread().setContextClassLoader(localClassLoader);
@ -181,8 +210,7 @@ public class KieServiceCommon {
String serverName = System.getProperty("org.kie.server.id"); String serverName = System.getProperty("org.kie.server.id");
List<ContainerPojoPersist> containers = containerRepository.findByServerNameAndStatus(serverName, ContainerPojoPersist.STATUS.TODEPLOY.toString()); List<ContainerPojoPersist> containers = containerRepository.findByServerNameAndStatus(serverName, ContainerPojoPersist.STATUS.TODEPLOY.toString());
for (ContainerPojoPersist element : containers) { for (ContainerPojoPersist element : containers) {
//this.disposeContainer(element.getContainerId()); this.disposeContainer(element.getContainerId());
KieContainerResource newContainer = new KieContainerResource(); KieContainerResource newContainer = new KieContainerResource();
newContainer.setContainerId(element.getContainerId()); newContainer.setContainerId(element.getContainerId());
newContainer.setReleaseId(new ReleaseId()); newContainer.setReleaseId(new ReleaseId());
@ -194,7 +222,12 @@ public class KieServiceCommon {
element.setStatus(ContainerPojoPersist.STATUS.UP.toString()); element.setStatus(ContainerPojoPersist.STATUS.UP.toString());
containerRepository.save(element); 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) { public KieContainerResource createContainerWithRestBusinessService(String id, KieContainerResource container, String className, String processID) {

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <component name="FacetManager">
<facet type="Spring" name="Spring"> <facet type="Spring" name="Spring">
<configuration /> <configuration />
@ -25,6 +25,15 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <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: 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-web:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter: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: 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-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: 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-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.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" /> <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" 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: 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-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.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-jdk8:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310: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-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-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.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-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: org.apache.commons:commons-collections4:4.2" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />

View file

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

View file

@ -3,8 +3,10 @@ package org.chtijbug.drools.reverseproxy;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@SpringBootApplication @SpringBootApplication
@EnableMongoRepositories(basePackages = "org.chtijbug.drools.proxy.persistence.repository")
public class DroolsBusinessReverseProxyServer { public class DroolsBusinessReverseProxyServer {
public static void main(String[] args) { 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.http.HttpClientProvider;
import com.github.mkopylec.charon.core.mappings.MappingsCorrector; import com.github.mkopylec.charon.core.mappings.MappingsCorrector;
import com.github.mkopylec.charon.core.mappings.MappingsProvider; 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.boot.autoconfigure.web.ServerProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Component @Component
public class CustomMappingsProvider extends MappingsProvider { public class CustomMappingsProvider extends MappingsProvider {
@Autowired
private UpdateService updateService;
public CustomMappingsProvider(ServerProperties server, CharonProperties charon, MappingsCorrector mappingsCorrector, HttpClientProvider httpClientProvider) { public CustomMappingsProvider(ServerProperties server, CharonProperties charon, MappingsCorrector mappingsCorrector, HttpClientProvider httpClientProvider) {
super(server, charon, mappingsCorrector,httpClientProvider); super(server, charon, mappingsCorrector,httpClientProvider);
} }
@ -23,28 +29,11 @@ public class CustomMappingsProvider extends MappingsProvider {
@Override @Override
protected boolean shouldUpdateMappings(HttpServletRequest httpServletRequest) { protected boolean shouldUpdateMappings(HttpServletRequest httpServletRequest) {
return false; return updateService.getToUpdate();
} }
@Override @Override
protected List<MappingProperties> retrieveMappings() { protected List<MappingProperties> retrieveMappings() {
List<MappingProperties> total = new ArrayList<>(); return updateService.retrievePath();
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;
} }
} }

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 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 { public enum STATUS {
UP, UP,
DOWN, DOWN,
TODEPLOY TODEPLOY,
TODELETE
} }
@Id @Id
private String id; private String id;

View file

@ -1,12 +1,12 @@
package org.chtijbug.drools.proxy.persistence.model; package org.chtijbug.drools.proxy.persistence.model;
import org.bson.types.ObjectId;
import org.chtijbug.drools.proxy.persistence.json.KeyProject; import org.chtijbug.drools.proxy.persistence.json.KeyProject;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Document @Document
@ -37,7 +37,7 @@ public class ProjectPersist implements Serializable {
private String containerID; private String containerID;
private String serverName; private List<String> serverNames= new ArrayList<>();
private String status; private String status;
@ -45,6 +45,19 @@ public class ProjectPersist implements Serializable {
public ProjectPersist(){} 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() { public String getDeploymentName() {
return deploymentName; return deploymentName;
} }
@ -109,12 +122,12 @@ public class ProjectPersist implements Serializable {
this.projectVersion = projectVersion; this.projectVersion = projectVersion;
} }
public String getServerName() { public List<String> getServerNames() {
return serverName; return serverNames;
} }
public void setServerName(String serverName) { public void setServerName(List<String> serverNames) {
this.serverName = serverName; this.serverNames = serverNames;
} }
public String getStatus() { public String getStatus() {
@ -132,4 +145,11 @@ public class ProjectPersist implements Serializable {
public void setClassNameList(List<String> classNameList) { public void setClassNameList(List<String> classNameList) {
this.classNameList = 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 @Document
public class RuntimePersist { public class RuntimePersist {
public enum STATUS {
UP,
DOWN
}
@Id @Id
private String id=new ObjectId().toString(); private String id=new ObjectId().toString();
@ -20,14 +23,25 @@ public class RuntimePersist {
private String serverPort; private String serverPort;
private String sftpHost;
private String sftpPort; 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.serverName = serverName;
this.version = version; this.version = version;
this.hostname = hostname; this.hostname = hostname;
this.serverPort = serverPort; this.serverPort = serverPort;
this.sftpPort = sftpPort; 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() { public String getId() {
@ -77,4 +91,20 @@ public class RuntimePersist {
public void setServerPort(String serverPort) { public void setServerPort(String serverPort) {
this.serverPort = 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.json.KeyProject;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist; 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.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -13,7 +12,7 @@ public interface ProjectRepository extends MongoRepository<ProjectPersist, Strin
public ProjectPersist findByProjectName(KeyProject projectName); public ProjectPersist findByProjectName(KeyProject projectName);
public ProjectPersist findByDeploymentName(String deploymentName); public ProjectPersist findByDeploymentName(String deploymentName);
public List<ProjectPersist> findByServerName(String serverName); public List<ProjectPersist> findByServerNamesIn(List<String> serverNames);
public List<ProjectPersist> findByServerNameAndDeploymentName(String serverName,String deploymentName); public List<ProjectPersist> findByServerNamesInAndDeploymentName(List<String> serverNames,String deploymentName);
} }

View file

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