private ServiceResponse<KieScannerResource> createScanner(String id, KieContainerInstance kci) { if (kci.getScanner() == null) { InternalKieScanner scanner = (InternalKieScanner) KieServices.Factory.get().newKieScanner(kci.getKieContainer()); kci.setScanner(scanner); 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."); } }
public ServiceResponse<KieScannerResource> getScannerInfo(String id) { try { KieContainerInstance kci = context.getContainer(id); if (kci != null && kci.getKieContainer() != null) { KieScannerResource info = getScannerResource( kci ); kci.getResource().setScanner( info ); 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()); } }
public KieContainerInstance addIfDoesntExist(String containerId, KieContainerInstance ci) { synchronized ( containers ) { KieContainerInstance kci = containers.putIfAbsent(containerId, ci); if( kci != null && kci.getStatus() == KieContainerStatus.FAILED ) { // if previous container failed, allow override containers.put(containerId, ci); return null; } return kci; } }
if (kci != null) { synchronized (kci) { kci.setStatus(KieContainerStatus.DISPOSING); // just in case if (kci.getKieContainer() != null) { InternalKieContainer kieContainer = kci.getKieContainer(); kci.setKieContainer(null); // helps reduce concurrent access issues try {
KieContainerInstance ci = new KieContainerInstance(containerId, KieContainerStatus.CREATING); KieContainerInstance previous = null; InternalKieContainer kieContainer = (InternalKieContainer) ks.newKieContainer(releaseId); if (kieContainer != null) { ci.setKieContainer(kieContainer); ci.getResource().setStatus(KieContainerStatus.STARTED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.SUCCESS, "Container " + containerId + " successfully deployed with module " + releaseId + ".", ci.getResource()); } else { ci.getResource().setStatus(KieContainerStatus.FAILED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Failed to create container " + containerId + " with module " + releaseId + "."); ci.getResource().setStatus(KieContainerStatus.FAILED); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Failed to create container " + containerId + " with module " + releaseId + ": " + e.getClass().getName() + ": " + e.getMessage()); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Container " + containerId + " already exists.", previous.getResource());
private ServiceResponse<KieScannerResource> disposeScanner(String id, KieScannerResource resource, KieContainerInstance kci) { if (kci.getScanner() == null) { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Invalid call. Scanner already disposed. ", getScannerResource(kci)); } if (KieScannerStatus.STARTED.equals(mapStatus(kci.getScanner().getStatus())) || KieScannerStatus.SCANNING.equals(mapStatus(kci.getScanner().getStatus()))) { ServiceResponse<KieScannerResource> response = stopScanner(id, resource, kci); if (ResponseType.FAILURE.equals(response.getType())) { return response; } } kci.getScanner().shutdown(); kci.setScanner(null); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Kie scanner successfully shutdown.", getScannerResource(kci)); }
if (kci != null && kci.getKieContainer() != null) { String sessionId = null; KieSessionModel ksm = kci.getKieContainer().getKieSessionModel(sessionId); if( ksm != null ) { switch (ksm.getType() ) { case STATEFUL: ks = kci.getKieContainer().getKieSession(sessionId); break; case STATELESS: ks = kci.getKieContainer().getStatelessKieSession(sessionId); break; ks = kci.getKieContainer().getKieSession(); Command<?> cmd = kci.getMarshaller( MarshallingFormat.XSTREAM ).unmarshall(payload, Command.class); String result = kci.getMarshaller( MarshallingFormat.XSTREAM ).marshall(results); return new ServiceResponse<String>(ServiceResponse.ResponseType.SUCCESS, "Container " + containerId + " successfully called.", result); } else {
private ServiceResponse<KieScannerResource> stopScanner(String id, KieScannerResource resource, KieContainerInstance kci) { if (kci.getScanner() == null) { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Invalid call. Scanner is not instantiated. ", getScannerResource(kci)); } if (KieScannerStatus.STARTED.equals(mapStatus(kci.getScanner().getStatus())) || KieScannerStatus.SCANNING.equals(mapStatus(kci.getScanner().getStatus()))) { kci.getScanner().stop(); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Kie scanner successfully stopped.", getScannerResource(kci)); } else { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Invalid kie scanner status: " + mapStatus(kci.getScanner().getStatus()), getScannerResource(kci)); } }
public ServiceResponse<KieContainerResourceList> listContainers() { try { List<KieContainerResource> containers = new ArrayList<KieContainerResource>(); for (KieContainerInstance instance : context.getContainers()) { containers.add(instance.getResource()); } KieContainerResourceList cil = new KieContainerResourceList(containers); return new ServiceResponse<KieContainerResourceList>(ServiceResponse.ResponseType.SUCCESS, "List of created containers", cil); } catch (Exception e) { logger.error("Error retrieving list of containers", e); return new ServiceResponse<KieContainerResourceList>(ServiceResponse.ResponseType.FAILURE, "Error listing containers: " + e.getClass().getName() + ": " + e.getMessage()); } }
private void updateReleaseId() { if ( kieContainer != null ) { this.resource.setReleaseId( new ReleaseId( kieContainer.getContainerReleaseId() ) ); this.resource.setResolvedReleaseId( new ReleaseId( kieContainer.getReleaseId() ) ); } disposeMarshallers(); }
private ServiceResponse<KieScannerResource> scanNow(String id, KieScannerResource resource, KieContainerInstance kci) { if (kci.getScanner() == null) { createScanner( id, kci ); } KieScannerStatus kss = mapStatus( kci.getScanner().getStatus() ); if (KieScannerStatus.STOPPED.equals( kss ) || KieScannerStatus.CREATED.equals( kss ) || KieScannerStatus.STARTED.equals( kss )) { kci.getScanner().scanNow(); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Scan successfully executed.", getScannerResource(kci)); } else { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Invalid kie scanner status: " + kss, getScannerResource(kci)); } }
public ServiceResponse<KieContainerResource> getContainerInfo(String id) { try { KieContainerInstance ci = context.getContainer(id); if (ci != null) { if( ci.getResource().getScanner() == null ) { ci.getResource().setScanner( getScannerResource( ci ) ); } return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.SUCCESS, "Info for container " + id, ci.getResource()); } return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Container " + id + " is not instantiated."); } catch (Exception e) { logger.error("Error retrieving info for container '" + id + "'", e); return new ServiceResponse<KieContainerResource>(ServiceResponse.ResponseType.FAILURE, "Error retrieving container info: " + e.getClass().getName() + ": " + e.getMessage()); } }
public ServiceResponse<ReleaseId> updateContainerReleaseId(String id, ReleaseId releaseId) { if( releaseId == null ) { logger.error("Error updating releaseId for container '" + id + "'. ReleaseId is null."); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error updating releaseId for container " + id + ". ReleaseId is null. "); } try { KieContainerInstance kci = context.getContainer(id); // the following code is subject to a concurrent call to dispose(), but the cost of synchronizing it // would likely not be worth it. At this point a decision was made to fail the execution if a concurrent // call do dispose() is executed. if (kci != null && kci.getKieContainer() != null) { Results results = kci.getKieContainer().updateToVersion(releaseId); if (results.hasMessages(Level.ERROR)) { logger.error("Error updating releaseId for container " + id + " to version " + releaseId + "\nMessages: " + results.getMessages()); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error updating release id on container " + id + " to " + releaseId, kci.getResource().getReleaseId()); } else { return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.SUCCESS, "Release id successfully updated.", kci.getResource().getReleaseId()); } } else { return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Container " + id + " is not instantiated."); } } catch (Exception e) { logger.error("Error updating releaseId for container '" + id + "'", e); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error updating releaseId for container " + id + ": " + e.getClass().getName() + ": " + e.getMessage()); } }
private KieScannerResource getScannerResource(KieContainerInstance kci) { InternalKieScanner scanner = kci.getScanner(); KieScannerResource info = null; if (scanner != null) { info = new KieScannerResource(mapStatus(scanner.getStatus()), scanner.getPollingInterval()); } else { info = new KieScannerResource( KieScannerStatus.DISPOSED); } return info; }
public ServiceResponse<ReleaseId> getContainerReleaseId(String id) { try { KieContainerInstance ci = context.getContainer(id); if (ci != null) { return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.SUCCESS, "ReleaseId for container " + id, ci.getResource().getReleaseId()); } return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Container " + id + " is not instantiated."); } catch (Exception e) { logger.error("Error retrieving releaseId for container '" + id + "'", e); return new ServiceResponse<ReleaseId>(ServiceResponse.ResponseType.FAILURE, "Error retrieving container releaseId: " + e.getClass().getName() + ": " + e.getMessage()); } }
try { KieContainerInstance kci = context.getContainer(id); if (kci != null && kci.getKieContainer() != null) { ServiceResponse<KieScannerResource> result = null; switch (status) { break; kci.getResource().setScanner( result.getResult() ); // might be null, but that is ok return result; } else {
private ServiceResponse<KieScannerResource> startScanner(String id, KieScannerResource resource, KieContainerInstance kci) { if (kci.getScanner() == null) { ServiceResponse<KieScannerResource> response = createScanner(id, kci); if (ResponseType.FAILURE.equals(response.getType())) { return response; } } if (KieScannerStatus.STOPPED.equals(mapStatus(kci.getScanner().getStatus())) && resource.getPollInterval() != null) { kci.getScanner().start(resource.getPollInterval()); return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.SUCCESS, "Kie scanner successfully created.", getScannerResource(kci)); } else if (!KieScannerStatus.STOPPED.equals(mapStatus(kci.getScanner().getStatus()))) { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Invalid kie scanner status: " + mapStatus(kci.getScanner().getStatus()), getScannerResource(kci)); } else if (resource.getPollInterval() == null) { return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Invalid polling interval: " + resource.getPollInterval(), getScannerResource(kci)); } return new ServiceResponse<KieScannerResource>(ServiceResponse.ResponseType.FAILURE, "Unknown error starting scanner. Scanner was not started." + resource, getScannerResource(kci)); }