public ServiceResponse<KieScannerResource> getScannerInfo(String id) { try { KieContainerInstanceImpl kci = context.getContainer(id); if (kci != null && kci.getKieContainer() != null) { KieScannerResource info = getScannerResource(kci); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Scanner info successfully retrieved", info); } else { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Unknown container " + id + "."); } } catch (Exception e) { logger.error("Error retrieving scanner info for container '" + id + "'.", e); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Error retrieving scanner info for container '" + id + "': " + e.getClass().getName() + ": " + e.getMessage()); } }
protected void registerWithAlias(KieContainerInstanceImpl kieContainerInstance) { KieContainerResource containerResource = kieContainerInstance.getResource(); String alias = getContainerAlias(containerResource); List<KieContainerInstanceImpl> byAlias = containersByAlias.get(alias); if (byAlias == null) { byAlias = new ArrayList<>(); containersByAlias.put(alias, byAlias); } byAlias.add(kieContainerInstance); }
private Message updateKieContainerToVersion(KieContainerInstanceImpl kci, ReleaseId releaseId) { String containerId = kci.getContainerId(); Message response = null; kci.clearExtraClasses(); kci.disposeMarshallers(); Results results = kci.getKieContainer().updateToVersion(releaseId); if (results.hasMessages(Level.ERROR)) { response = new Message(Severity.WARN, "Error updating releaseId for container " + containerId + " to version " + releaseId); for (org.kie.api.builder.Message builderMsg : results.getMessages()) { response.addMessage(builderMsg.getText()); } logger.error("Error updating releaseId for container " + containerId + " to version " + releaseId + "\nMessages: " + results.getMessages()); } else { kci.updateReleaseId(); response = new Message(Severity.INFO, "Kie container updated successfully to version " + releaseId); } return response; }
private List<KieContainerResource> getContainersWithMessages() { List<KieContainerResource> containers = new ArrayList<KieContainerResource>(); for (KieContainerInstanceImpl instance : context.getContainers()) { instance.getResource().setMessages(getMessagesForContainer(instance.getContainerId())); containers.add(instance.getResource()); } return containers; }
private ServiceResponse<KieScannerResource> createScanner(String id, KieContainerInstanceImpl kci) { if (kci.getScanner() == null) { List<Message> messages = getMessagesForContainer(id); messages.clear(); kci.createScanner(); messages.add(new Message(Severity.INFO, "Kie scanner successfully created.")); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Kie scanner successfully created.", getScannerResource(kci)); } else { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Error creating the scanner for container " + id + ". Scanner already exists."); } }
synchronized (kci) { eventSupport.fireBeforeContainerStopped(this, kci); kci.setStatus(KieContainerStatus.DISPOSING); // just in case if (kci.getKieContainer() != null) { org.kie.api.builder.ReleaseId releaseId = kci.getKieContainer().getReleaseId(); List<KieServerExtension> disposedExtensions = new ArrayList<KieServerExtension>(); try { logger.debug("Container {} (for release id {}) shutdown: In Progress", containerId, kci.getResource().getReleaseId()); logger.debug("Container {} (for release id {}) {} shutdown: DONE", containerId, kci.getResource().getReleaseId(), extension); disposedExtensions.add(extension); for (KieServerExtension extension : disposedExtensions) { extension.createContainer(containerId, kci, parameters); logger.debug("Container {} (for release id {}) {} restart: DONE", containerId, kci.getResource().getReleaseId(), extension); kci.setStatus(KieContainerStatus.STARTED); context.registerContainer(containerId, kci); logger.info("Container {} (for release id {}) STARTED after failed dispose", containerId, kci.getResource().getReleaseId()); if (kci.getScanner() != null && kci.getScanner().getStatus() != Status.SHUTDOWN) { kci.stopScanner(); InternalKieContainer kieContainer = kci.getKieContainer(); kci.setKieContainer(null); // helps reduce concurrent access issues logger.info("Container {} (for release id {}) successfully stopped", containerId, kci.getResource().getReleaseId());
try { KieContainerInstanceImpl kci = context.getContainer(containerId); if (kci != null && kci.getStatus().equals(KieContainerStatus.STARTED)) { Map<String, Object> parameters = getContainerParameters(kci.getKieContainer().getContainerReleaseId(), messages); logger.debug("Container {} (for release id {}) {} deactivation: DONE", containerId, kci.getKieContainer().getContainerReleaseId(), extension); kci.setStatus(KieContainerStatus.DEACTIVATED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.SUCCESS, "Container " + containerId + " deactivated successfully.", kci.getResource());
KieContainerInstanceImpl kci = (KieContainerInstanceImpl) context.getContainer( containerId, ContainerLocatorProvider.get().getLocator()); if (kci != null && kci.getKieContainer() != null) { type = (Class<? extends Command>) kci.getKieContainer().getClassLoader().loadClass(classType); Command<?> cmd = kci.getMarshaller( marshallingFormat ).unmarshall(payload, type);
if (kci != null && kci.getKieContainer() != null) { String containerId = kci.getContainerId(); KieScannerResource scannerState = kci.getResource().getScanner(); currentState.getContainers().forEach(containerResource -> { if (containerId.equals(containerResource.getContainerId())) {
if (kci != null && kci.getKieContainer() != null) { ReleaseId originalReleaseId = kci.getResource().getReleaseId(); Message updateMessage = updateKieContainerToVersion(kci, releaseId); if (updateMessage.getSeverity().equals(Severity.WARN)) { messages.add(updateMessage); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error updating release id on container " + containerId + " to " + releaseId, kci.getResource().getReleaseId()); if (updateMessage.getSeverity().equals(Severity.WARN)) { messages.add(updateMessage); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error reverting release id update on container " + containerId + " to original release id " + originalReleaseId, kci.getResource().getReleaseId()); messages.add(new Message(Severity.WARN, "Error updating release id on container " + containerId + " to " + releaseId + ", release id returned back to " + kci.getResource().getReleaseId())); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error updating release id on container " + containerId + " to " + releaseId + ", release id returned back to " + kci.getResource().getReleaseId(), kci.getResource().getReleaseId()); if (containerId.equals(containerResource.getContainerId())) { containerResource.setReleaseId(releaseId); containerResource.setResolvedReleaseId(new ReleaseId(kci.getKieContainer().getContainerReleaseId())); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.SUCCESS, "Release id successfully updated.", kci.getResource().getReleaseId()); } else { return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Container " + containerId + " is not instantiated.");
ReleaseId releaseId = container.getReleaseId(); try { KieContainerInstanceImpl ci = new KieContainerInstanceImpl(containerId, KieContainerStatus.CREATING, null, releaseId, this); ci.getResource().setContainerAlias(container.getContainerAlias()); KieContainerInstanceImpl previous = null; ci.setKieContainer(kieContainer); ci.getResource().setConfigItems(container.getConfigItems()); ci.getResource().setMessages(messages); logger.debug("Container {} (for release id {}) general initialization: DONE", containerId, releaseId); String errorMessage = "Failed to create scanner for container " + containerId + " with module " + releaseId + "."; messages.add(new Message(Severity.ERROR, errorMessage)); ci.getResource().setStatus(KieContainerStatus.FAILED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, errorMessage); ci.getResource().setStatus(KieContainerStatus.STARTED); logger.info("Container {} (for release id {}) successfully started", containerId, releaseId); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.SUCCESS, "Container " + containerId + " successfully deployed with module " + releaseId + ".", ci.getResource()); } else { ci.getResource().setStatus(KieContainerStatus.FAILED); ci.getResource().setReleaseId(releaseId); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Failed to create container " + containerId + " with module " + releaseId + "."); ci.getResource().setStatus(KieContainerStatus.FAILED); ci.getResource().setReleaseId(releaseId); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Failed to create container " + containerId + " with module " + releaseId + ".");
@Test public void buildConversationIdHeaderRunningContainer() { String kieServerId = "KieServerId"; KieServerEnvironment.setServerId(kieServerId); String groupId = "org.kie"; String artifactId = "testArtifact"; String version = "1.0"; ReleaseId releaseId = new ReleaseId(groupId, artifactId, version); KieContainerInstanceImpl containerInstanceImpl = new KieContainerInstanceImpl(CONTAINER_ID, KieContainerStatus.STARTED); containerInstanceImpl.getResource().setReleaseId(releaseId); when(registry.getContainer(CONTAINER_ID)).thenReturn(containerInstanceImpl); Header conversationIdHeader = RestUtils.buildConversationIdHeader(CONTAINER_ID, registry, headers); assertEquals(KieServerConstants.KIE_CONVERSATION_ID_TYPE_HEADER, conversationIdHeader.getName()); assertNotNull(conversationIdHeader.getValue()); assertTrue(conversationIdHeader.getValue().contains(groupId)); assertTrue(conversationIdHeader.getValue().contains(artifactId)); assertTrue(conversationIdHeader.getValue().contains(version)); assertTrue(conversationIdHeader.getValue().contains(CONTAINER_ID)); assertTrue(conversationIdHeader.getValue().contains(kieServerId)); }
ContainerLocatorProvider.get().getLocator()); KieContainerInstanceImpl kc = context.getContainer(containerId); Marshaller marshaller = kc.getMarshaller(marshallingFormat); Object planningProblem = marshaller.unmarshall(solvePlanningProblemCommand.getPlanningProblem(), Object.class);
@Test public void buildConversationIdHeaderCreatingContainer() { String kieServerId = "KieServerId"; KieServerEnvironment.setServerId(kieServerId); KieContainerInstanceImpl containerInstanceImpl = new KieContainerInstanceImpl(CONTAINER_ID, KieContainerStatus.CREATING); when(registry.getContainer(CONTAINER_ID)).thenReturn(containerInstanceImpl); Header conversationIdHeader = RestUtils.buildConversationIdHeader(CONTAINER_ID, registry, headers); assertNull(conversationIdHeader); } }
try { KieContainerInstanceImpl kci = context.getContainer(containerId); if (kci != null && kci.getStatus().equals(KieContainerStatus.DEACTIVATED)) { Map<String, Object> parameters = getContainerParameters(kci.getKieContainer().getContainerReleaseId(), messages); logger.debug("Container {} (for release id {}) {} activation: DONE", containerId, kci.getKieContainer().getContainerReleaseId(), extension); kci.setStatus(KieContainerStatus.STARTED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.SUCCESS, "Container " + containerId + " activated successfully.", kci.getResource());
if (kci != null && kci.getKieContainer() != null) { String sessionId = null; } else { ks = kci.getKieContainer().getKieSession(); type = (Class<? extends Command>) kci.getKieContainer().getClassLoader().loadClass(classType); Command<?> cmd = kci.getMarshaller( marshallingFormat ).unmarshall(payload, type); Marshaller marshaller = kci.getMarshaller(marshallingFormat); String result = marshaller.marshall(results);
private void setMessages(KieContainerInstanceImpl kci) { kci.getResource().setMessages(getMessagesForContainer(kci.getContainerId())); }
public ServiceResponse<DMNModelInfoList> getModels(String containerId) { try { KieContainerInstanceImpl kContainer = context.getContainer(containerId, ContainerLocatorProvider.get().getLocator()); KieSession kieSession = kContainer.getKieContainer().newKieSession(); DMNRuntime kieRuntime = kieSession.getKieRuntime(DMNRuntime.class); List<DMNModel> models = kieRuntime.getModels(); List<DMNModelInfo> result = models.stream().map(ModelEvaluatorServiceBase::modelToInfo).collect(Collectors.toList()); kieSession.dispose(); return new ServiceResponse<DMNModelInfoList>( ServiceResponse.ResponseType.SUCCESS, "OK models successfully retrieved from container '" + containerId + "'", new DMNModelInfoList( result ) ); } catch ( Exception e ) { LOG.error( "Error retrieving models from container '" + containerId + "'", e ); return new ServiceResponse<DMNModelInfoList>( ServiceResponse.ResponseType.FAILURE, "Error retrieving models from container '" + containerId + "'" + e.getMessage(), null ); } }
if (!updateResults.getResults().hasMessages(Level.ERROR)) { List<KieServerExtension> extensions = kieServer.getServerExtensions(); String containerId = kieContainerInstance.getContainerId(); ReleaseId releaseId = kieContainerInstance.getKieContainer().getContainerReleaseId(); kieContainerInstance.clearExtraClasses(); boolean disposedMarshallers = kieContainerInstance.updateReleaseId(); kieContainerInstance.disposeMarshallers();
protected void removeFromAlias(KieContainerInstanceImpl kieContainerInstance) { if (kieContainerInstance == null) { return; } KieContainerResource containerResource = kieContainerInstance.getResource(); String alias = getContainerAlias(containerResource); List<KieContainerInstanceImpl> byAlias = containersByAlias.get(alias); if (byAlias != null) { byAlias.remove(kieContainerInstance); } }