package org.hivedb.services; import org.apache.cxf.Bus; import org.apache.cxf.BusException; import org.apache.cxf.BusFactory; import org.apache.cxf.aegis.databinding.AegisDatabinding; import org.apache.cxf.binding.BindingFactoryManager; import org.apache.cxf.binding.soap.SoapBindingFactory; import org.apache.cxf.binding.soap.SoapTransportFactory; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import org.apache.cxf.transport.ConduitInitiatorManager; import org.apache.cxf.transport.DestinationFactoryManager; import org.apache.cxf.transport.local.LocalTransportFactory; import org.apache.cxf.wsdl.WSDLManager; import org.apache.cxf.wsdl11.WSDLManagerImpl; import org.hivedb.configuration.EntityConfig; import org.hivedb.hibernate.DataAccessObject; import org.hivedb.util.Lists; import org.hivedb.util.database.test.HiveTest; import org.hivedb.util.database.test.HiveTest.Config; import org.hivedb.util.database.test.WeatherReport; import org.hivedb.util.functional.Filter; import org.hivedb.util.functional.Unary; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.BeforeClass; import org.junit.Test; import java.io.Serializable; import java.util.Arrays; import java.util.Collection; @Config("hive_default") public class DataGenerationServiceTest extends HiveTest { @Test public void testGeneration() throws Exception { Collection<Class<?>> classes = getMappedClasses(); DataGenerationService service = new DataGenerationServiceImpl(classes, getHive()); int partitionKeyCount = 2; int instanceCount = 4; Collection<Long> ids = service.generate(WeatherReport.class.getName(), partitionKeyCount, instanceCount); assertEquals(partitionKeyCount*instanceCount, ids.size()); DataAccessObject<Object, Serializable> dao = (DataAccessObject<Object, Serializable>) getDao(WeatherReport.class); Collection<Object> instances = Lists.newArrayList(); for(Long id : ids) { Object instance = dao.get(Integer.valueOf(id.toString())); assertNotNull(instance); instances.add(instance); } final EntityConfig entityConfig = getEntityHiveConfig().getEntityConfig(WeatherReport.class); assertEquals(partitionKeyCount, Filter.grepUnique(new Unary<Object, Object>(){ public Object f(Object item) { return entityConfig.getPrimaryIndexKey(item); }}, instances).size()); assertEquals(partitionKeyCount*instanceCount, Filter.grepUnique(new Unary<Object, Object>(){ public Object f(Object item) { return entityConfig.getId(item); }}, instances).size()); } @Test public void overTheWire() throws Exception { Collection<Class<?>> classes = getMappedClasses(); DataGenerationService service = new DataGenerationServiceImpl(classes, getHive()); JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean(); sf.setAddress("local://generate"); sf.setServiceBean(service); sf.setServiceClass(DataGenerationService.class); sf.setDataBinding(new AegisDatabinding()); sf.getServiceFactory().setDataBinding(new AegisDatabinding()); sf.create().start(); JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(DataGenerationService.class); factory.setAddress("local://generate"); factory.setDataBinding(new AegisDatabinding()); factory.getServiceFactory().setDataBinding(new AegisDatabinding()); DataGenerationService client = (DataGenerationService)factory.create(); int partitionKeyCount = 2; int instanceCount = 4; Collection<Long> ids = client.generate(WeatherReport.class.getName(), partitionKeyCount, instanceCount); assertEquals(partitionKeyCount*instanceCount, ids.size()); for(Long io : ids) { assertNotNull(io); System.out.println(io + " " + io.getClass().getName()); } } @BeforeClass public static void initializeSOAPLocalTransport() throws BusException { String[] transports = new String[]{ "http://cxf.apache.org/transports/local", "http://schemas.xmlsoap.org/soap/http", "http://schemas.xmlsoap.org/wsdl/soap/http" }; LocalTransportFactory local = new LocalTransportFactory(); local.setTransportIds(Arrays.asList(transports)); Bus bus = BusFactory.newInstance().createBus(); SoapBindingFactory bindingFactory = new SoapBindingFactory(); bindingFactory.setBus(bus); bus.getExtension(BindingFactoryManager.class).registerBindingFactory("http://schemas.xmlsoap.org/wsdl/soap/", bindingFactory); bus.getExtension(BindingFactoryManager.class).registerBindingFactory("http://schemas.xmlsoap.org/wsdl/soap/http", bindingFactory); DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class); SoapTransportFactory soap = new SoapTransportFactory(); soap.setBus(bus); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/", soap); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/", soap); dfm.registerDestinationFactory("http://cxf.apache.org/transports/local", soap); LocalTransportFactory localTransport = new LocalTransportFactory(); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", localTransport); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", localTransport); dfm.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", localTransport); dfm.registerDestinationFactory("http://cxf.apache.org/transports/local", localTransport); ConduitInitiatorManager extension = bus.getExtension(ConduitInitiatorManager.class); extension.registerConduitInitiator(LocalTransportFactory.TRANSPORT_ID, localTransport); extension.registerConduitInitiator("http://schemas.xmlsoap.org/wsdl/soap/", localTransport); extension.registerConduitInitiator("http://schemas.xmlsoap.org/soap/http", localTransport); extension.registerConduitInitiator("http://schemas.xmlsoap.org/soap/", localTransport); WSDLManagerImpl manager = new WSDLManagerImpl(); manager.setBus(bus); bus.setExtension(manager, WSDLManager.class); } }