Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.marmotta.kiwi.test.externalizer; import org.apache.commons.lang3.RandomStringUtils; import org.apache.marmotta.commons.vocabulary.XSD; import org.apache.marmotta.kiwi.infinispan.externalizer.*; import org.apache.marmotta.kiwi.infinispan.remote.CustomJBossMarshaller; import org.apache.marmotta.kiwi.model.rdf.*; import org.apache.marmotta.kiwi.test.TestValueFactory; import org.infinispan.commons.marshall.AdvancedExternalizer; import org.infinispan.commons.marshall.StreamingMarshaller; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.openrdf.model.Value; import org.openrdf.model.ValueFactory; import org.openrdf.model.vocabulary.OWL; import org.openrdf.model.vocabulary.RDFS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.Random; /** * Test the different externalizer implementations we provide for Infinispan * * @author Sebastian Schaffert (sschaffert@apache.org) */ public class ExternalizerTest { private static ValueFactory valueFactory = new TestValueFactory(); private static Random rnd = new Random(); private static Logger log = LoggerFactory.getLogger(ExternalizerTest.class); private static StreamingMarshaller marshaller, hotrod; @BeforeClass public static void setup() { AdvancedExternalizer[] externalizers = new AdvancedExternalizer[] { new UriExternalizer(), new BNodeExternalizer(), new StringLiteralExternalizer(), new DateLiteralExternalizer(), new BooleanLiteralExternalizer(), new IntLiteralExternalizer(), new DoubleLiteralExternalizer(), new TripleExternalizer() }; GlobalConfiguration globalConfiguration = new GlobalConfigurationBuilder().transport().defaultTransport() .serialization().addAdvancedExternalizer(externalizers).build(); Configuration defaultConfiguration = new ConfigurationBuilder().clustering().cacheMode(CacheMode.DIST_ASYNC) .build(); EmbeddedCacheManager cacheManager = new DefaultCacheManager(globalConfiguration, defaultConfiguration, true); marshaller = cacheManager.getCache().getAdvancedCache().getComponentRegistry().getCacheMarshaller(); hotrod = new CustomJBossMarshaller(); } @Test public void testUriResource() throws Exception { marshall( (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)), new UriExternalizer()); } @Test public void testCompressedUriResource() throws Exception { marshall((KiWiUriResource) valueFactory.createURI(XSD.Double.stringValue()), new UriExternalizer()); marshall((KiWiUriResource) valueFactory.createURI(RDFS.LABEL.stringValue()), new UriExternalizer()); marshall((KiWiUriResource) valueFactory.createURI(OWL.SAMEAS.stringValue()), new UriExternalizer()); } @Test public void testBNode() throws Exception { marshall((KiWiAnonResource) valueFactory.createBNode(), new BNodeExternalizer()); } @Test public void testStringLiteral() throws Exception { marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40)), new StringLiteralExternalizer()); } @Test public void testLongStringLiteral() throws Exception { marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.random(1000)), new StringLiteralExternalizer()); } @Test public void testLangLiteral() throws Exception { marshall((KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40), "en"), new StringLiteralExternalizer()); } @Test public void testTypeLiteral() throws Exception { marshall( (KiWiStringLiteral) valueFactory.createLiteral(RandomStringUtils.randomAscii(40), valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8))), new StringLiteralExternalizer()); } @Test public void testIntLiteral() throws Exception { marshall((KiWiIntLiteral) valueFactory.createLiteral(rnd.nextInt()), new IntLiteralExternalizer()); } @Test public void testTriple() throws Exception { KiWiUriResource s = (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); KiWiUriResource p = (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); KiWiNode o = (KiWiNode) randomNode(); KiWiTriple t = (KiWiTriple) valueFactory.createStatement(s, p, o); marshall(t, new TripleExternalizer()); } @Test public void testPrefixCompressedTriple() throws Exception { KiWiUriResource s = (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); KiWiUriResource p = (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); KiWiUriResource o = (KiWiUriResource) valueFactory .createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); KiWiTriple t = (KiWiTriple) valueFactory.createStatement(s, p, o); marshall(t, new TripleExternalizer()); } /** * Run the given object through the marshaller using an in-memory stream. * @param origin * @param <T> * @return */ private <T> void marshall(T origin, AdvancedExternalizer<T> externalizer) throws IOException, ClassNotFoundException, InterruptedException { log.info("- testing Java ObjectStream ..."); ByteArrayOutputStream outBytesOS = new ByteArrayOutputStream(); ObjectOutputStream outOS = new ObjectOutputStream(outBytesOS); outOS.writeObject(origin); outOS.close(); log.info(" object {}: serialized with {} bytes", origin, outBytesOS.size()); log.info("- testing externalizer directly ..."); ByteArrayOutputStream outBytes = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(outBytes); externalizer.writeObject(out, origin); out.close(); log.info(" object {}: serialized with {} bytes", origin, outBytes.size()); ByteArrayInputStream inBytes = new ByteArrayInputStream(outBytes.toByteArray()); ObjectInputStream in = new ObjectInputStream(inBytes); T destination1 = externalizer.readObject(in); Assert.assertEquals(origin, destination1); assertEqualsId(origin, destination1); log.info("- testing externalizer with infinispan cluster marshaller ..."); byte[] bytes = marshaller.objectToByteBuffer(origin); log.info(" object {}: serialized with {} bytes", origin, bytes.length); Object destination2 = marshaller.objectFromByteBuffer(bytes); Assert.assertEquals(origin, destination2); assertEqualsId(origin, destination2); log.info("- testing externalizer with infinispan hotrod marshaller ..."); byte[] bytesH = hotrod.objectToByteBuffer(origin); log.info(" object {}: serialized with {} bytes", origin, bytesH.length); Object destination3 = hotrod.objectFromByteBuffer(bytesH); Assert.assertEquals(origin, destination3); assertEqualsId(origin, destination3); } /** * Return a random RDF value, either a reused object (10% chance) or of any other kind. * @return */ protected Value randomNode() { Value object; switch (rnd.nextInt(6)) { case 0: object = valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); break; case 1: object = valueFactory.createBNode(); break; case 2: object = valueFactory.createLiteral(RandomStringUtils.randomAscii(40)); break; case 3: object = valueFactory.createLiteral(rnd.nextInt()); break; case 4: object = valueFactory.createLiteral(rnd.nextDouble()); break; case 5: object = valueFactory.createLiteral(rnd.nextBoolean()); break; default: object = valueFactory.createURI("http://localhost/" + RandomStringUtils.randomAlphanumeric(8)); break; } return object; } private static <T> void assertEqualsId(T o1, T o2) { if (o1 instanceof KiWiNode && o2 instanceof KiWiNode) { Assert.assertEquals(((KiWiNode) o1).getId(), ((KiWiNode) o2).getId()); } else if (o1 instanceof KiWiTriple && o2 instanceof KiWiTriple) { Assert.assertEquals(((KiWiTriple) o1).getId(), ((KiWiTriple) o2).getId()); } } }