/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.profileservice.persistenceformat.test; import java.net.URL; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Unmarshaller; import javax.xml.transform.sax.SAXSource; import org.jboss.managed.api.ManagedComponent; import org.jboss.managed.api.ManagedObject; import org.jboss.metatype.api.values.CollectionValue; import org.jboss.metatype.api.values.GenericValue; import org.jboss.metatype.api.values.SimpleValueSupport; import org.jboss.resource.deployers.management.LocalDSInstanceClassFactory; import org.jboss.resource.deployers.management.MCFDGComponentMapper; import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup; import org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentMetaData; import org.jboss.system.deployers.managed.ServiceMetaDataICF; import org.jboss.system.metadata.ServiceMetaData; import org.jboss.system.server.profileservice.persistence.PersistenceFactory; import org.jboss.system.server.profileservice.persistence.xml.PersistedComponent; import org.jboss.system.server.profileservice.persistence.xml.PersistedManagedObject; import org.jboss.system.server.profileservice.persistence.xml.PersistenceRoot; import org.jboss.util.xml.JBossEntityResolver; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; /** * Test marshalling/unmarshalling with the JAXBAttachmentSerializer. * * @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a> * @version $Revision: 88716 $ */ public class LocalDataSourcePersistenceFormatTestCase extends AbstractPersistenceFormatTest { public LocalDataSourcePersistenceFormatTestCase(String name) throws Exception { super(name); } public void setUp() throws Exception { super.setUp(); } public void testProfileServiceTestDS() throws Throwable { getMOF().addInstanceClassFactory(new LocalDSInstanceClassFactory()); getMOF().addInstanceClassFactory(new ServiceMetaDataICF()); // addComponentMapper(new TestMapper(getPersistenceFactory())); // Initial parsing of the dataSource deployment ManagedConnectionFactoryDeploymentGroup deployment = parseDataSource("profileservice/persistence/profileservice-test-ds.xml"); assertNotNull(deployment); ManagedObject mo = getMOF().initManagedObject(deployment, null); ManagedComponent c = createDSComponent(mo); // Change values c.getProperty("min-pool-size").setValue(SimpleValueSupport.wrap(13)); c.getProperty("max-pool-size").setValue(SimpleValueSupport.wrap(53)); PersistenceRoot root = updateComponent(mo, c); assertNotNull(root); // Recreate deployment = parseDataSource("profileservice/persistence/profileservice-test-ds.xml"); // update the information getPersistenceFactory().restorePersistenceRoot(root, deployment, null); // Create the MO again mo = getMOF().initManagedObject(deployment, null); c = createDSComponent(mo); assertEquals(SimpleValueSupport.wrap(13), c.getProperty("min-pool-size").getValue()); assertEquals(SimpleValueSupport.wrap(53), c.getProperty("max-pool-size").getValue()); // Assert the attachment ManagedConnectionFactoryDeploymentGroup mcfdg = deployment; assertNotNull(mcfdg); // Assert services assertServices(mcfdg.getServices()); // Assert deployments assertDeployments(mcfdg.getDeployments()); // TODO Assert loader repository assertNotNull(mcfdg.getLoaderRepositoryConfig()); } protected void assertDeployments(List<ManagedConnectionFactoryDeploymentMetaData> deployments) { assertNotNull(deployments); assertEquals(1, deployments.size()); ManagedConnectionFactoryDeploymentMetaData deployment = deployments.get(0); assertNotNull(deployment); assertEquals(13, deployment.getMinSize()); assertEquals(53, deployment.getMaxSize()); } protected void assertServices(List<ServiceMetaData> services) { assertNotNull(services); assertEquals(2, services.size()); for(ServiceMetaData service : services) { assertNotNull(service.getCode()); assertNotNull(service.getAttributes()); assertFalse(service.getAttributes().isEmpty()); } } protected ManagedComponent createDSComponent(ManagedObject deployment) { CollectionValue collection = (CollectionValue) deployment.getProperty("deployments").getValue(); GenericValue generic = (GenericValue) collection.iterator().next(); ManagedObject mo = (ManagedObject) generic.getValue(); return createComponent(mo); } protected ManagedConnectionFactoryDeploymentGroup parseDataSource(String resource) throws Exception { // Get resource URL url = Thread.currentThread().getContextClassLoader().getResource(resource); // The input source InputSource input = new InputSource(url.openStream()); input.setSystemId(url.toURI().toString()); XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setEntityResolver(new JBossEntityResolver()); SAXSource source = new SAXSource(reader, input); // New JAXB context JAXBContext context = JAXBContext.newInstance(ManagedConnectionFactoryDeploymentGroup.class); Unmarshaller um = context.createUnmarshaller(); // Unmarshal JAXBElement<ManagedConnectionFactoryDeploymentGroup> elem = um.unmarshal(source, ManagedConnectionFactoryDeploymentGroup.class); return elem.getValue(); } private static class TestMapper extends MCFDGComponentMapper { public TestMapper(PersistenceFactory persistenceFactory) { super(persistenceFactory); } @Override protected PersistedComponent createComponent(Object attachment, ManagedComponent component) { // Note: this is using the TestMgtComponentImpl to get the MO ManagedObject mo = (ManagedObject) component.getParent(); PersistedManagedObject persisted = getPersistencePlugin().createPersistedManagedObject(mo); PersistedComponent persistedComponent = new PersistedComponent(persisted); setComponentName(persistedComponent, mo); return persistedComponent; } } }