Index: cluster/admin/src/main/java/com/sun/enterprise/v3/admin/cluster/CopyConfigCommand.java =================================================================== --- cluster/admin/src/main/java/com/sun/enterprise/v3/admin/cluster/CopyConfigCommand.java (revision 41311) +++ cluster/admin/src/main/java/com/sun/enterprise/v3/admin/cluster/CopyConfigCommand.java (working copy) @@ -116,7 +116,7 @@ } //does dest config exist - Config destinationConfig = domain.getConfigNamed(destConfig); + final Config destinationConfig = domain.getConfigNamed(destConfig); if (destinationConfig != null ){ report.setMessage(localStrings.getLocalString( "Config.configExists", "Config {0} already exists.", destConfig)); @@ -131,34 +131,7 @@ final Config newCopy = (Config) ConfigSupport.apply(new SingleConfigCode(){ @Override public Object run(Configs configs ) throws PropertyVetoException, TransactionFailure { - final Config destCopy = (Config) config.deepCopy(configs); - if (systemproperties != null) { - final Properties properties = GenericCrudCommand.convertStringToProperties(systemproperties,':'); - - for (final Object key : properties.keySet()) { - final String propName = (String) key; - //cannot update a system property so remove it first - List sysprops = destCopy.getSystemProperty() ; - for (SystemProperty sysprop:sysprops) { - if (propName.equals(sysprop.getName())) { - sysprops.remove(sysprop); - break; - } - - } - - //Currently the systemproperties is not working due to this bug 12311 - SystemProperty newSysProp = destCopy.createChild(SystemProperty.class); - newSysProp.setName(propName); - newSysProp.setValue(properties.getProperty(propName)); - destCopy.getSystemProperty().add(newSysProp); - } - } - destCopy.setName(configName); - configs.getConfig().add(destCopy); - copyOfConfig = destCopy; - return destCopy; - + return copyConfig(configs,config,configName); } } ,domain.getConfigs()); Index: admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/CopyConfig.java =================================================================== --- admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/CopyConfig.java (revision 41311) +++ admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/CopyConfig.java (working copy) @@ -42,9 +42,13 @@ import org.glassfish.api.admin.AdminCommand; import org.glassfish.api.Param; +import org.glassfish.config.support.GenericCrudCommand; import org.jvnet.hk2.annotations.Inject; import java.util.List; +import java.util.Properties; +import java.beans.PropertyVetoException; +import org.jvnet.hk2.config.TransactionFailure; /** * This is the abstract class which will be used by the config beans @@ -65,4 +69,36 @@ protected Config copyOfConfig; + public Config copyConfig(Configs configs, Config config,String destConfigName) throws PropertyVetoException, + TransactionFailure{ + final Config destCopy = (Config) config.deepCopy(configs); + if (systemproperties != null) { + final Properties properties = GenericCrudCommand.convertStringToProperties(systemproperties,':'); + + for (final Object key : properties.keySet()) { + final String propName = (String) key; + //cannot update a system property so remove it first + List sysprops = destCopy.getSystemProperty() ; + for (SystemProperty sysprop:sysprops) { + if (propName.equals(sysprop.getName())) { + sysprops.remove(sysprop); + break; + } + + } + + //Currently the systemproperties is not working due to this bug 12311 + SystemProperty newSysProp = destCopy.createChild(SystemProperty.class); + newSysProp.setName(propName); + newSysProp.setValue(properties.getProperty(propName)); + destCopy.getSystemProperty().add(newSysProp); + } + } + final String configName = destConfigName; + destCopy.setName(configName); + configs.getConfig().add(destCopy); + copyOfConfig = destCopy; + return destCopy; + } + } Index: admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java =================================================================== --- admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java (revision 41311) +++ admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java (working copy) @@ -601,15 +601,16 @@ throw new TransactionFailure(msg); } final String configName = instance.getName() + "-config"; - instance.setConfigRef(configName); + instance.setConfigRef(configName); final CopyConfig command = (CopyConfig) runner .getCommand("copy-config", context.getActionReport(), context.getLogger()); - command.configs= new ArrayList(); - command.configs.add("default-config"); - command.configs.add(configName); - command.execute(context); - ourConfig = command.copyOfConfig; + + Configs configs = domain.getConfigs(); + Configs writableConfigs = tx.enroll(configs); + ourConfig = command.copyConfig(writableConfigs,domain.getConfigNamed("default-config"),configName); + + } for (Resource resource : domain.getResources().getResources()) { Index: admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java =================================================================== --- admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java (revision 41311) +++ admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java (working copy) @@ -524,7 +524,7 @@ public void decorate(AdminCommandContext context, final Cluster instance) throws TransactionFailure, PropertyVetoException { Logger logger = LogDomains.getLogger(Cluster.class, LogDomains.ADMIN_LOGGER); LocalStringManagerImpl localStrings = new LocalStringManagerImpl(Cluster.class); - + Transaction t = Transaction.getTransaction(instance); //There should be no instance/config with the same name as the cluster if ((domain.getServerNamed(instance.getName()) != null) || (domain.getConfigNamed(instance.getName()) != null)){ @@ -565,15 +565,13 @@ config.getName(), instance.getName())); } - + Configs configs = domain.getConfigs(); + Configs writableConfigs = t.enroll(configs); final String configName = instance.getName() + "-config"; instance.setConfigRef(configName); + command.copyConfig(writableConfigs,domain.getConfigNamed("default-config"),configName); + - command.configs= new ArrayList(); - command.configs.add("default-config"); - command.configs.add(configName); - command.execute(context); - } else { // cluster using specified config