/* * Copyright 2016 JBoss by Red Hat. * * Licensed 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. */ package org.kie.server.integrationtests.shared; import org.kie.server.integrationtests.shared.basetests.KieServerBaseIntegrationTest; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.drools.compiler.kie.builder.impl.KieServicesImpl; import org.jboss.resteasy.plugins.server.tjws.TJWSEmbeddedJaxrsServer; import org.kie.api.KieServices; import org.kie.server.api.KieServerConstants; import org.kie.server.api.KieServerEnvironment; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.remote.rest.common.resource.KieServerRestImpl; import org.kie.server.services.api.KieServerExtension; import org.kie.server.services.api.SupportedTransports; import org.kie.server.services.impl.KieServerImpl; public class KieServerExecutor { protected TJWSEmbeddedJaxrsServer server; // Need to hold kie server instance because we need to manually handle startup/shutdown behavior defined in // context listener org.kie.server.services.Bootstrap. Embedded server doesn't support ServletContextListeners. private KieServerImpl kieServer; private static SimpleDateFormat serverIdSuffixDateFormat = new SimpleDateFormat("yyyy-MM-DD-HHmmss_SSS"); public void startKieServer() { if (server != null) { throw new RuntimeException("Kie execution server is already created!"); } setKieServerProperties(); registerKieServerId(); server = new TJWSEmbeddedJaxrsServer(); server.setPort(TestConfig.getKieServerAllocatedPort()); server.start(); addServerSingletonResources(); } private void setKieServerProperties() { System.setProperty(KieServerConstants.CFG_BYPASS_AUTH_USER, "true"); System.setProperty(KieServerConstants.CFG_HT_CALLBACK, "custom"); System.setProperty(KieServerConstants.CFG_HT_CALLBACK_CLASS, "org.kie.server.integrationtests.jbpm.util.FixedUserGroupCallbackImpl"); System.setProperty(KieServerConstants.CFG_PERSISTANCE_DS, "jdbc/jbpm-ds"); System.setProperty(KieServerConstants.CFG_PERSISTANCE_TM, "org.hibernate.service.jta.platform.internal.BitronixJtaPlatform"); System.setProperty(KieServerConstants.KIE_SERVER_CONTROLLER, TestConfig.getControllerHttpUrl()); System.setProperty(KieServerConstants.CFG_KIE_CONTROLLER_USER, TestConfig.getUsername()); System.setProperty(KieServerConstants.CFG_KIE_CONTROLLER_PASSWORD, TestConfig.getPassword()); System.setProperty(KieServerConstants.KIE_SERVER_LOCATION, TestConfig.getEmbeddedKieServerHttpUrl()); System.setProperty(KieServerConstants.KIE_SERVER_STATE_REPO, "./target"); // kie server policy settings System.setProperty(KieServerConstants.KIE_SERVER_ACTIVATE_POLICIES, "KeepLatestOnly"); System.setProperty("policy.klo.interval", "5000"); } private void registerKieServerId() { if (KieServerEnvironment.getServerId() == null) { KieServerEnvironment.setServerId(KieServerBaseIntegrationTest.class.getSimpleName() + "@" + serverIdSuffixDateFormat.format(new Date())); KieServerEnvironment.setServerName("KieServer"); } } private void addServerSingletonResources() { kieServer = new KieServerImpl(); server.getDeployment().getRegistry().addSingletonResource(new KieServerRestImpl(kieServer)); List<KieServerExtension> extensions = kieServer.getServerExtensions(); for (KieServerExtension extension : extensions) { List<Object> components = extension.getAppComponents(SupportedTransports.REST); for (Object component : components) { server.getDeployment().getRegistry().addSingletonResource(component); } } } public void stopKieServer() { if (server == null) { throw new RuntimeException("Kie execution server is already stopped!"); } kieServer.destroy(); // The KieServices instance that was seen by the kieserver, will never be seen again at this point ((KieServicesImpl) KieServices.Factory.get()).nullAllContainerIds(); server.stop(); server = null; } }