Java tutorial
/* * Copyright 2012 JBoss Inc * * 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.drools.guvnor.server.generators; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.io.IOUtils; import org.drools.guvnor.client.asseteditor.drools.serviceconfig.AssetReference; import org.drools.guvnor.client.asseteditor.drools.serviceconfig.ServiceConfig; import org.drools.guvnor.client.asseteditor.drools.serviceconfig.ServiceKAgentConfig; import org.drools.guvnor.client.asseteditor.drools.serviceconfig.ServiceKBaseConfig; import org.drools.guvnor.client.asseteditor.drools.serviceconfig.ServiceKSessionConfig; import org.drools.guvnor.client.rpc.MavenArtifact; import org.jboss.shrinkwrap.api.ArchivePath; import org.jboss.shrinkwrap.api.Node; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.apache.commons.io.FilenameUtils.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.AssertBehaviorOption.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.ClockType.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.EventProcessingOption.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.MarshallingOption.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.ProtocolOption.*; import static org.drools.guvnor.client.asseteditor.drools.serviceconfig.SessionType.*; import static org.drools.guvnor.server.generators.ServiceWarGenerator.*; import static org.drools.guvnor.server.maven.cache.GuvnorArtifactCacheSupport.*; import static org.junit.Assert.*; public class MultipleKBasesKSessionsGeneratorTest { private static final List<AssetReference> resources = new ArrayList<AssetReference>() { { add(new AssetReference("myPkg", "a", "drl", "http://localhost/c/source", "uuid1")); add(new AssetReference("myPkg", "aa", "drl", "http://localhost/cc/source", "uuid2")); add(new AssetReference("myPkg", "ab", "changeset", "http://localhost/cd/source", "uuid3")); } }; private static final List<AssetReference> models = new ArrayList<AssetReference>() { { add(new AssetReference("myPkg", "a.jar", "model", "http://localhost/a.jar", "uudi44")); } }; @Before @After public void cleanUp() { cleanTempDir(); } @Test public void testMultiKBaseKSession() throws IOException, URISyntaxException { setupLocalCache(); final ServiceConfig config = new ServiceConfig() { { final ServiceKBaseConfig kbase1 = new ServiceKBaseConfig("kbase1"); kbase1.addModels(models); kbase1.addResources(resources); kbase1.setAssetsUser("admin"); kbase1.setAssetsPassword("admin"); kbase1.setAssertBehavior(IDENTITY); final ServiceKSessionConfig ksession1 = new ServiceKSessionConfig("ksession1"); ksession1.setType(STATEFUL); ksession1.setUrl("myksession1"); ksession1.setKeepReference(true); ksession1.setClockType(PSEUDO); final ServiceKSessionConfig ksession2 = new ServiceKSessionConfig("ksession2"); ksession2.setUrl("myksession2"); ksession2.setKeepReference(false); ksession2.setMarshalling(JAXB); kbase1.addKsession(ksession1); kbase1.addKsession(ksession2); addKBase(kbase1); final ServiceKBaseConfig kbase2 = new ServiceKBaseConfig("kbase2"); kbase2.addResource( new AssetReference("myPkg", "ax", "changeset", "http://localhost/cd/source", "uuidx9")); kbase2.setAssetsUser("admin"); kbase2.setAssetsPassword("admin"); kbase2.setMbeans(true); kbase2.setEventProcessingMode(STREAM); final ServiceKSessionConfig ksession3 = new ServiceKSessionConfig("ksession3"); ksession3.setUrl("myksession3"); ksession3.setProtocol(WEB_SERVICE); ksession3.setClockType(REALTIME); final ServiceKSessionConfig ksession4 = new ServiceKSessionConfig("ksession4"); ksession4.setProtocol(WEB_SERVICE); ksession4.setMarshalling(JSON); kbase2.addKsession(ksession3); kbase2.addKsession(ksession4); addKBase(kbase2); } }; final File temp = File.createTempFile("drools-service", ".jar"); // Delete temp file when program exits. temp.deleteOnExit(); final OutputStream out = new FileOutputStream(temp); buildWar(config, (Map<String, File>) null, out); final WebArchive archive = ShrinkWrap.createFromZipFile(WebArchive.class, temp); for (final Map.Entry<ArchivePath, Node> entry : archive.getContent().entrySet()) { final String extension = getExtension(entry.getKey().get()); final String fileName = getName(entry.getKey().get()); if (extension.equalsIgnoreCase("xml")) { validateGeneratedFiles("multi1", fileName, toString(entry.getValue().getAsset().openStream())); } } } @Test public void testMultiKBaseKSessionAndKAgents() throws IOException, URISyntaxException { setupLocalCache(); final ServiceConfig config = new ServiceConfig() { { final ServiceKBaseConfig kbase1 = new ServiceKBaseConfig("kbase1"); kbase1.addModels(models); kbase1.addResources(resources); kbase1.setAssetsUser("admin"); kbase1.setAssetsPassword("admin"); kbase1.setAssertBehavior(IDENTITY); final ServiceKSessionConfig ksession1 = new ServiceKSessionConfig("ksession1"); ksession1.setType(STATEFUL); ksession1.setUrl("myksession1"); ksession1.setKeepReference(true); ksession1.setClockType(PSEUDO); final ServiceKSessionConfig ksession2 = new ServiceKSessionConfig("ksession2"); ksession2.setUrl("myksession2"); ksession2.setKeepReference(false); ksession2.setMarshalling(JAXB); kbase1.addKsession(ksession1); kbase1.addKsession(ksession2); final ServiceKAgentConfig kagent1 = new ServiceKAgentConfig("kagent1"); kagent1.setNewInstance(false); kagent1.setUseKBaseClassloader(true); kagent1.addResource(resources.get(0)); kagent1.addResource(resources.get(1)); final ServiceKAgentConfig kagent2 = new ServiceKAgentConfig("kagent2"); kagent2.setNewInstance(false); kbase1.addKagent(kagent1); kbase1.addKagent(kagent2); addKBase(kbase1); final ServiceKBaseConfig kbase2 = new ServiceKBaseConfig("kbase2"); kbase2.addResource( new AssetReference("myPkg", "ax", "changeset", "http://localhost/cd/source", "uuidx9")); kbase2.setAssetsUser("admin"); kbase2.setAssetsPassword("admin"); kbase2.setMbeans(true); kbase2.setEventProcessingMode(STREAM); final ServiceKSessionConfig ksession3 = new ServiceKSessionConfig("ksession3"); ksession3.setUrl("myksession3"); ksession3.setProtocol(WEB_SERVICE); ksession3.setClockType(REALTIME); final ServiceKSessionConfig ksession4 = new ServiceKSessionConfig("ksession4"); ksession4.setProtocol(WEB_SERVICE); ksession4.setMarshalling(JSON); kbase2.addKsession(ksession3); kbase2.addKsession(ksession4); final ServiceKAgentConfig kagent3 = new ServiceKAgentConfig("kagent3"); kagent3.setUseKBaseClassloader(true); final ServiceKAgentConfig kagent4 = new ServiceKAgentConfig("kagent4"); kagent4.setUseKBaseClassloader(true); kagent4.setNewInstance(true); final ServiceKAgentConfig kagent5 = new ServiceKAgentConfig("kagent5"); kagent5.addResource(resources.get(2)); kbase2.addKagent(kagent3); kbase2.addKagent(kagent4); kbase2.addKagent(kagent5); addKBase(kbase2); } }; final File temp = File.createTempFile("drools-service", ".jar"); // Delete temp file when program exits. temp.deleteOnExit(); final OutputStream out = new FileOutputStream(temp); buildWar(config, (Map<String, File>) null, out); final WebArchive archive = ShrinkWrap.createFromZipFile(WebArchive.class, temp); for (final Map.Entry<ArchivePath, Node> entry : archive.getContent().entrySet()) { final String extension = getExtension(entry.getKey().get()); final String fileName = getName(entry.getKey().get()); if (extension.equalsIgnoreCase("xml")) { validateGeneratedFiles("multi2", fileName, toString(entry.getValue().getAsset().openStream())); } } } private void setupLocalCache() { final Collection<String> repositories = new ArrayList<String>() { { add(getURLtoLocalUserMavenRepo()); } }; final Collection<MavenArtifact> dependencies = new ArrayList<MavenArtifact>() { { add(new MavenArtifact("log4j:log4j:jar:1.2.16:compile")); add(new MavenArtifact("jdom:jdom:jar:1.0:compile")); } }; buildCache(repositories, dependencies); } private void validateGeneratedFiles(final String folder, final String fileName, final String generatedContent) { final String origContent = getResourceContent( "org/drools/guvnor/server/generators/" + folder + "/" + fileName); assertEquals("Following file content doesn't match - " + fileName, origContent, generatedContent); } public String toString(final InputStream is) throws IOException { if (is != null) { final Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { Reader reader = new BufferedReader(new InputStreamReader(is)); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { is.close(); } return writer.toString(); } else { return ""; } } private static String getResourceContent(final String fileName) { try { ByteArrayOutputStream outContent = new ByteArrayOutputStream(); BufferedInputStream inContent = new BufferedInputStream( MultipleKBasesKSessionsGeneratorTest.class.getClassLoader().getResourceAsStream(fileName)); IOUtils.copy(inContent, outContent); return outContent.toString(); } catch (IOException ex) { throw new IllegalArgumentException("Error " + fileName, ex); } } }