@DELETE @Path("server/{serverInstanceId}") @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response disconnectKieServer(@Context HttpHeaders headers, @PathParam("serverInstanceId") String id, @QueryParam("location") String serverLocation) { try { KieServerInfo serverInfo = new KieServerInfo(id, "", "", Collections.<String>emptyList(), URLDecoder.decode(serverLocation, "UTF-8")); disconnect(serverInfo); logger.info("Server with id '{}' disconnected", id); } catch (UnsupportedEncodingException e) { logger.debug("Cannot URL decode kie server location due to unsupported encoding exception", e); } return null; }
private List<String> getCapabilitiesFromServer() { ResponseHandler responseHandler = getResponseHandler(); if (config.isJms() && !(responseHandler instanceof RequestReplyResponseHandler)) { setResponseHandler(new RequestReplyResponseHandler()); kieServerInfo = getServerInfo().getResult(); setResponseHandler(responseHandler); } else { kieServerInfo = getServerInfo().getResult(); } logger.debug("KieServicesClient connected to: {} version {}", kieServerInfo.getServerId(), kieServerInfo.getVersion()); List<String> capabilities = kieServerInfo.getCapabilities(); logger.debug("Supported capabilities by the server: {}", capabilities); return capabilities; }
@Override public synchronized void disconnect(KieServerInfo serverInfo) { ServerTemplate serverTemplate = templateStorage.load(serverInfo.getServerId()); if (serverTemplate != null) { logger.debug("Server id {} known to the controller, checking if given server exists", serverInfo.getServerId()); if (serverTemplate != null) { logger.info("Server {} disconnected from controller", serverInfo.getLocation()); ServerInstanceKey serverInstanceKey = ModelFactory.newServerInstanceKey(serverInfo.getServerId(), serverInfo.getLocation()); serverTemplate.deleteServerInstance(serverInstanceKey.getServerInstanceId()); templateStorage.update(serverTemplate); notifyOnDisconnect(serverInstanceKey, serverTemplate); } } }
ServerTemplate serverTemplate = templateStorage.load(serverInfo.getServerId()); KieServerSetup serverSetup = new KieServerSetup(); ServerInstanceKey serverInstanceKey = ModelFactory.newServerInstanceKey(serverInfo.getServerId(), serverInfo.getLocation()); List<Container> containerList = new ArrayList<Container>(); logger.debug("Server id {} know to the controller, checking if given server exists", serverInfo.getServerId()); if (!serverTemplate.hasServerInstance(serverInfo.getLocation())) { logger.debug("Server instance '{}' not yet registered", serverInfo.getLocation()); serverTemplate.addServerInstance(serverInstanceKey); logger.debug("KieServerInstance updated after connect from server {}", serverInfo.getLocation()); logger.debug("Server id {} unknown to this controller, registering...", serverInfo.getServerId()); serverTemplate = new ServerTemplate(); serverTemplate.setId(serverInfo.getServerId()); serverTemplate.setName(serverInfo.getName()); List<String> capabilities = new ArrayList<String>(); if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BRM)) { capabilities.add(Capability.RULE.toString()); if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BPM)) { capabilities.add(Capability.PROCESS.toString()); if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BRP)) { capabilities.add(Capability.PLANNING.toString()); logger.debug("KieServerInstance stored after connect (register) from server {}", serverInfo.getLocation()); templateStorage.store(serverTemplate);
@Override protected RouteBuilder createRouteBuilder() throws Exception { KieServerInfo info = new KieServerInfo("mock", "1.2.3"); List<String> capabilities = Arrays.asList(KieServerConstants.CAPABILITY_BPM, KieServerConstants.CAPABILITY_BPM_UI, KieServerConstants.CAPABILITY_BRM, KieServerConstants.CAPABILITY_BRP, KieServerConstants.CAPABILITY_CASE, KieServerConstants.CAPABILITY_DMN); info.setCapabilities(capabilities); ServiceResponse<KieServerInfo> response = new ServiceResponse<KieServerInfo>(ResponseType.SUCCESS, "Kie Server info"); response.setResult(info);
@Test public void testRest() throws Exception { MockEndpoint mockEndpoint = getMockEndpoint( "mock:result" ); mockEndpoint.expectedMessageCount( 1 ); Map<String, Object> headers = new HashMap<>(); headers.put(KIE_CLIENT, "kieServices"); headers.put(KIE_OPERATION, "getServerInfo"); template.sendBodyAndHeaders("direct:start", null, headers); assertMockEndpointsSatisfied(); KieServerInfo result = getResultMessage(mockEndpoint.getExchanges().get(0)).getBody(KieServerInfo.class); assertEquals("Server version", "1.2.3", result.getVersion()); }
public void addSession(KieServerInfo serverInfo, Session session) { List<Session> newSessions = new ArrayList<>(); List<Session> sessions = this.availableSessionsByUrl.putIfAbsent(serverInfo.getLocation(), newSessions); if (sessions == null) { sessions = newSessions; } sessions.add(session); this.sessionToUrl.put(session.getId(), serverInfo); logger.debug("Session '{}' associated with url: {}", session.getId(), serverInfo.getLocation()); }
@Override public <T> T getServicesClient(Class<T> serviceClient) { if (QueryServicesClient.class.isAssignableFrom(serviceClient)) { if (!serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BPM)) { throw new KieServicesException("Server that this client is connected to has no capabilities to handle " + serviceClient.getSimpleName());
@Test public void testCustomOperation() throws Exception { MockEndpoint mockEndpoint = getMockEndpoint( "mock:result" ); mockEndpoint.expectedMessageCount( 1 ); Map<String, Object> headers = new HashMap<>(); headers.put(KIE_CLIENT, "kieServices"); headers.put(KIE_OPERATION, "myCustomOperation"); template.sendBodyAndHeaders("direct:start", null, headers); assertMockEndpointsSatisfied(); KieServerInfo result = getResultMessage(mockEndpoint.getExchanges().get(0)).getBody(KieServerInfo.class); assertEquals("Server version", "1.2.3", result.getVersion()); }
public String removeSession(Session session) { this.availableSessionsById.remove(session.getId()); KieServerInfo serverInfo = sessionToUrl.remove(session.getId()); List<Session> sessions = availableSessionsByUrl.get(serverInfo.getLocation()); Iterator<Session> it = sessions.iterator(); while (it.hasNext()) { Session s = it.next(); if (s.getId().equals(session.getId())) { it.remove(); break; } } this.handlersPerSession.remove(session.getId()); logger.debug("Session '{}' removed to Web Socket manager", session.getId()); if (availableSessionsByUrl.get(serverInfo.getLocation()).isEmpty()) { return serverInfo.getLocation(); } return null; }
public ServiceResponse<KieServerInfo> getInfo() { try { Version version = KieServerEnvironment.getVersion(); String versionStr = version != null ? version.toString() : "Unknown-Version"; return new ServiceResponse<KieServerInfo>(ServiceResponse.ResponseType.SUCCESS, "Kie Server info", new KieServerInfo(versionStr)); } catch (Exception e) { logger.error("Error retrieving server info:", e); return new ServiceResponse<KieServerInfo>(ServiceResponse.ResponseType.FAILURE, "Error retrieving kie server info: " + e.getClass().getName() + ": " + e.getMessage()); } }
@Override public void afterResponseSent() { ServerTemplate serverTemplate = controller.getTemplateStorage().load(serverInfo.getServerId()); ServerInstanceKey serverInstanceKey = serverTemplate.getServerInstanceKeys().stream() .filter(server -> server.getUrl().equals(serverInfo.getLocation())) .findFirst() .get(); ServerInstance serverInstance = new ServerInstance(); serverInstance.setServerName(serverInstanceKey.getServerName()); serverInstance.setServerTemplateId(serverInstanceKey.getServerTemplateId()); serverInstance.setServerInstanceId(serverInstanceKey.getServerInstanceId()); serverInstance.setUrl(serverInstanceKey.getUrl()); controller.getNotificationService().notify(new ServerInstanceUpdated(serverInstance)); controller.getNotificationService().notify(new ServerInstanceConnected(serverInstance)); }
@Test public void testGetServerInfo() { stubFor(get(urlEqualTo("/")) .withHeader("Accept", equalTo("application/xml")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "application/xml") .withBody("<response type=\"SUCCESS\" msg=\"Kie Server info\">\n" + " <kie-server-info>\n" + " <version>1.2.3</version>\n" + " </kie-server-info>\n" + "</response>"))); KieServicesClient client = KieServicesFactory.newKieServicesClient(config); ServiceResponse<KieServerInfo> response = client.getServerInfo(); assertSuccess(response); assertEquals("Server version", "1.2.3", response.getResult().getVersion()); }
public boolean disconnectFromSingleController(KieServerInfo serverInfo, KieServerConfig config, String controllerUrl) { String connectAndSyncUrl = null; try { connectAndSyncUrl = controllerUrl + "/server/" + KieServerEnvironment.getServerId()+"/?location="+ URLEncoder.encode(serverInfo.getLocation(), "UTF-8"); String userName = config.getConfigItemValue(KieServerConstants.CFG_KIE_CONTROLLER_USER, "kieserver"); String password = loadControllerPassword(config); String token = config.getConfigItemValue(KieServerConstants.CFG_KIE_CONTROLLER_TOKEN); makeHttpDeleteRequestAndCreateCustomResponse(connectAndSyncUrl, null, userName, password, token); return true; } catch (Exception e) { // let's check all other controllers in case of running in cluster of controllers logger.debug("Exception encountered while syncing with controller at {} error {}", connectAndSyncUrl, e.getMessage(), e); return false; } }
@OnClose public void onKieServerDisconnect(@PathParam("server-id") String serverId, Session session, CloseReason closeReason) { synchronized (manager) { String url = manager.removeSession(session); if (url != null) { KieServerInfo serverInfo = new KieServerInfo(serverId, "", "", Collections.<String>emptyList(), url); disconnect(serverInfo); logger.info("Server with id '{}' disconnected", serverId); } } }
protected KieServerInfo getInfoInternal() { Version version = KieServerEnvironment.getVersion(); String serverId = KieServerEnvironment.getServerId(); String serverName = KieServerEnvironment.getServerName(); String versionStr = version != null ? version.toString() : "Unknown-Version"; List<String> capabilities = new ArrayList<String>(); for (KieServerExtension extension : context.getServerExtensions()) { capabilities.add(extension.getImplementedCapability()); } return new KieServerInfo(serverId, serverName, versionStr, capabilities, kieServerLocation); }