/*
* 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.override.test;
import java.util.HashMap;
import java.util.Map;
import org.jboss.deployers.spi.management.KnownComponentTypes;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.DeploymentTemplateInfo;
import org.jboss.managed.api.Fields;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedDeployment;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.metatype.api.values.CompositeValue;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
/**
* Update a DS managed component without undeploying it.
* The {@see PersistedDataSourceUnitTestCase} will test if the changes were restored
* correctly after restarting AS.
*
* @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a>
* @version $Revision: 86164 $
*/
public class ProfileServiceOverrideTestCase extends AbstractProfileServiceTest
{
public ProfileServiceOverrideTestCase(String name)
{
super(name);
}
public void testDS() throws Exception
{
String deploymentName = "profileservice-test-ds.xml";
try
{
deployPackage(deploymentName);
ManagementView mgtView = getManagementView();
ManagedDeployment md = mgtView.getDeployment(deploymentName);
assertNotNull("Null managed deployment.", md);
ManagedComponent mc = md.getComponent("ProfileServiceTestDS");
assertNotNull("Null managed component", mc);
// This should work too
ManagedComponent comp = getManagedComponent(mgtView, "ProfileServiceTestDS");
assertNotNull(comp);
ManagedProperty jndiName = mc.getProperty("jndi-name");
// assert
assertEquals(jndiName.getValue(), SimpleValueSupport.wrap("ProfileServiceTestDS"));
// change value
jndiName.setValue(SimpleValueSupport.wrap("ChangedDsJNDIName"));
ManagedProperty property = mc.getProperty("prepared-statement-cache-size");
// assert
assertEquals("prepared-statement-cache-size: "+ property.getValue(), SimpleValueSupport.wrap(32), property.getValue());
// change value
property.setValue(SimpleValueSupport.wrap(34));
property = mc.getProperty("max-pool-size");
property.setValue(SimpleValueSupport.wrap(34));
ManagedProperty configProps = mc.getProperty("connection-properties");
assertNotNull(configProps);
CompositeValue collection = (CompositeValue) configProps.getValue();
configProps.setValue(collection);
// update component
mgtView.updateComponent(mc);
// See if the changes are reflected in the managedView after a reload
mgtView = getManagementView();
ManagedDeployment md2 = mgtView.getDeployment(deploymentName);
assertNotNull(md2);
ManagedComponent mc2 = md2.getComponent("ChangedDsJNDIName");
assertNotNull(mc2);
ManagedProperty changedProperty = mc2.getProperty("prepared-statement-cache-size");
assertEquals(changedProperty.getValue(), SimpleValueSupport.wrap(34));
mc2 = md2.getComponent("ProfileServiceTestDS");
assertNull(mc2);
mc2 = getManagedComponent(mgtView, "ProfileServiceTestDS");
assertNull(mc2);
}
catch(Exception e)
{
log.error(e);
undeployPackage(new String[] { deploymentName });
throw e;
}
finally
{
// Do not undeploy deployment, if everything went ok
// undeployPackage(new String[] { deploymentName });
}
}
public void testTemplateDS() throws Exception
{
String jndiName = "TestLocalDS";
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
propValues.put("driver-class", SimpleValueSupport.wrap("org.hsqldb.jdbcDriver"));
propValues.put("connection-url", SimpleValueSupport.wrap("jdbc:hsqldb:."));
propValues.put("connection-definition", SimpleValueSupport.wrap("javax.sql.DataSource"));
propValues.put("jndi-name", SimpleValueSupport.wrap(jndiName));
propValues.put("rar-name", SimpleValueSupport.wrap("jboss-local-jdbc.rar"));
// The management view
ManagementView mgtView = getManagementView();
DeploymentTemplateInfo dsInfo = mgtView.getTemplate("LocalTxDataSourceTemplate");
assertNotNull(dsInfo);
//
for(ManagedProperty property : dsInfo.getProperties().values())
{
MetaValue v = propValues.get(property.getName());
if(v != null)
{
property.setValue(v);
property.setField(Fields.META_TYPE, v.getMetaType());
}
}
//
mgtView.applyTemplate("LocalTestDS", dsInfo);
// Check
ManagedDeployment md = mgtView.getDeployment("LocalTestDS-ds.xml");
assertNotNull(md);
ManagedComponent mc = mgtView.getComponent(jndiName, KnownComponentTypes.DataSourceTypes.LocalTx.getType());
assertNotNull(mc);
ManagedProperty property = mc.getProperty("prepared-statement-cache-size");
// change value
property.setValue(SimpleValueSupport.wrap(34));
property = mc.getProperty("max-pool-size");
property.setValue(SimpleValueSupport.wrap(34));
mgtView.updateComponent(mc);
}
public void testNestedDS() throws Exception
{
String deploymentName = "profileservice-datasource.ear";
try
{
deployPackage(deploymentName);
ManagementView mgtView = getManagementView();
ManagedDeployment deployment = mgtView.getDeployment(deploymentName);
assertNotNull("Null managed deployment", deployment);
assertNotNull(deployment.getChildren());
assertFalse(deployment.getChildren().isEmpty());
// Update first DataSource
// get test-ds.xml child
ManagedDeployment md = null;
for(ManagedDeployment d : deployment.getChildren())
{
if(d.getName().endsWith("test-ds.xml"))
{
md = d;
break;
}
}
assertNotNull(md);
ManagedComponent mc = md.getComponent("ProfileServiceNestedTestDS");
assertNotNull("Null managed component", mc);
// This should work too
ManagedComponent comp = getManagedComponent(mgtView, "ProfileServiceNestedTestDS");
assertNotNull(comp);
ManagedProperty p = mc.getProperty("jndi-name");
p.setValue(SimpleValueSupport.wrap("ChangedNestedDsJNDIName"));
// Update prepared-statement-cache-size
ManagedProperty property = mc.getProperty("prepared-statement-cache-size");
// assert
assertEquals("prepared-statement-cache-size: "+ property.getValue(), SimpleValueSupport.wrap(32), property.getValue());
// change value
property.setValue(SimpleValueSupport.wrap(34));
// updateComponent and process()
mgtView.updateComponent(mc);
//
// Update 2nd DataSource
md = null;
for(ManagedDeployment d : deployment.getChildren())
{
if(d.getName().endsWith("test-second-ds.xml"))
{
md = d;
break;
}
}
assertNotNull(md);
mc = md.getComponent("OtherNestedTestDS");
// prepared-statement-cache-size
property = mc.getProperty("prepared-statement-cache-size");
// assert
assertEquals(property.getValue(), SimpleValueSupport.wrap(12));
// change
property.setValue(SimpleValueSupport.wrap(33));
// max-pool-size
property = mc.getProperty("max-pool-size");
// assert
assertEquals(property.getValue(), SimpleValueSupport.wrap(22));
// change
property.setValue(SimpleValueSupport.wrap(19));
// updateComponent and process()
mgtView.updateComponent(mc);
// See if the changes are reflected in the managedView after a reload
mgtView = getManagementView();
ManagedComponent comp2 = getManagedComponent(mgtView, "ChangedNestedDsJNDIName");
assertNotNull(comp2);
ManagedComponent comp3 = getManagedComponent(mgtView, "ProfileServiceNestedTestDS");
assertNull(comp3);
}
catch(Exception e)
{
log.error(e);
undeployPackage(new String[] { deploymentName });
throw e;
}
finally
{
// Do not undeploy deployment, if everything went ok
// undeployPackage(new String[] { deploymentName });
}
}
}