dev@glassfish.java.net

Re: upgrading v2 config elements to v3 elements

From: Jerome Dochez <jerome.dochez_at_oracle.com>
Date: Wed, 18 Aug 2010 11:33:17 -0700

*all* the objects you want to change *must* be locked and part of the
config transaction.
you can lock more than one object at a time inside a transaction,
usually using one the other apply() method on ConfigSupport.

On 8/18/10 10:53 AM, Carla Mott wrote:
> Jerome Dochez wrote:
>> I will eventually fix the NPE but the issue is that once again, you
>> used the readonly reference to the object rather than the locked view.
> ok. I updated that and now get the following error. I finally set
> the node agents to null and was able to remove the node-agents
> elements from domain.xml that way.
>
> d.getNodeAgents().getNodeAgent().clear();
>
>
> Aug 18, 2010 5:24:51 PM
> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade postConstruct
> SEVERE: Failure while upgrading node-agent from V2 to V3
> org.jvnet.hk2.config.TransactionFailure: Not part of a transaction !
> at
> org.jvnet.hk2.config.ConfigSupport._apply(ConfigSupport.java:194)
> at
> org.jvnet.hk2.config.ConfigSupport.apply(ConfigSupport.java:130)
> at
> org.jvnet.hk2.config.ConfigSupport.apply(ConfigSupport.java:109)
> at
> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade.postConstruct(NodeAgentConfigUpgrade.java:92)
>
> at
> com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:109)
> at
> com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:92)
> at
> com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:68)
> at
> com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:136)
>
> at
> com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:61)
>
> at
> org.glassfish.config.support.DomainXml.upgrade(DomainXml.java:145)
> at org.glassfish.config.support.DomainXml.run(DomainXml.java:111)
> at
> com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.populateConfig(AbstractModulesRegistryImpl.java:167)
>
> at
> com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createHabitat(AbstractModulesRegistryImpl.java:149)
>
> at
> com.sun.enterprise.module.bootstrap.Main.createHabitat(Main.java:430)
> at
> org.jvnet.hk2.osgiadapter.HK2Main.createHabitat(HK2Main.java:92)
> at
> com.sun.enterprise.glassfish.bootstrap.GlassFishActivator$1.newGlassFish(GlassFishActivator.java:86)
>
> at
> com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:113)
>
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:98)
>
> at
> com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:61)
> Caused by: java.lang.IllegalStateException: Not part of a transaction !
> at org.jvnet.hk2.config.ConfigBean$2.remove(ConfigBean.java:206)
> at java.util.AbstractList$Itr.remove(AbstractList.java:360)
> at java.util.AbstractList.removeRange(AbstractList.java:559)
> at java.util.AbstractList.clear(AbstractList.java:217)
> at
> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade$1.run(NodeAgentConfigUpgrade.java:132)
>
> at
> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade$1.run(NodeAgentConfigUpgrade.java:92)
>
> at
> org.jvnet.hk2.config.ConfigSupport$1.run(ConfigSupport.java:112)
> at
> org.jvnet.hk2.config.ConfigSupport._apply(ConfigSupport.java:171)
> ... 22 more
>>>>> Aug 18, 2010 3:44:18 AM com.sun.enterprise.util.EarlyLogger add
>>>>>>> Also how do I remove the node-agents element?
>>>>>> I don't see a node-agents element on Server ? is it somewhere else ?
>>>>> node-agents element is on Domain. there is a node-agents-ref
>>>>> attribute on Server.
>>>> so it's a collection of node-agent, you should just remove elements
>>>> from the collection or remove all elements.
>>>> something like :
>>>> domain.getNodeAgents().removeAll();
>>> I tried too that but get a compile time error.
>>>
>>> INFO] Compiling 1 source file to
>>> /Users/cmott/logging/v3/cluster/admin/target/classes
>>> /Users/cmott/logging/v3/cluster/admin/src/main/java/com/sun/enterprise/v3/admin/cluster/NodeAgentConfigUpgrade.java:137:
>>> cannot find symbol
>>> symbol : method removeAll()
>>> location: interface com.sun.enterprise.config.serverbeans.NodeAgents
>>> domain.getNodeAgents().removeAll();
>>> ^
>>>>>> the node-agents
>>>>>>> Carla
>>>>>>>
>>>>>>> Jerome Dochez wrote:
>>>>>>>> use the variable d as passed to the run() method rather than
>>>>>>>> domain which is still the readonly view of the domain config
>>>>>>>> object.
>>>>>>>>
>>>>>>>> On Aug 17, 2010, at 4:38 PM, Carla Mott wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I'm trying to write up the code to upgrade v2 (node-agents) to
>>>>>>>>> v3 (nodes). In my case, I need to create elements (nodes and
>>>>>>>>> node) based on information that is in the node-agents and
>>>>>>>>> node-agent elements in v2. I then need to remove the
>>>>>>>>> node-agents references from the config. I tried to create a
>>>>>>>>> nodes elements but get the stace trace below.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> What does this error mean? How do I get a locked parent config
>>>>>>>>> object? The parent object for both nodes and node-agents is
>>>>>>>>> domain. When I try to create the child 'nodes' I get this
>>>>>>>>> error. My code looks like:
>>>>>>>>>
>>>>>>>>> ConfigSupport.apply(new SingleConfigCode<Domain>() {
>>>>>>>>> public Object run(Domain d) throws
>>>>>>>>> PropertyVetoException, TransactionFailure {
>>>>>>>>>
>>>>>>>>> Nodes nodes=domain.createChild(Nodes.class);
>>>>>>>>> for( NodeAgent na: agList){
>>>>>>>>> String host=null;
>>>>>>>>> Node node = nodes.createChild(Node.class);
>>>>>>>>> node.setName(na.getName());
>>>>>>>>> node.setType("CONFIG");
>>>>>>>>>
>>>>>>>>> node.setInstallDir("${com.sun.aas.installRoot}");
>>>>>>>>> List<Property> agentProp
>>>>>>>>> =na.getProperty(); //get the properties and see if host name
>>>>>>>>> is specified
>>>>>>>>> for ( Property p : agentProp) {
>>>>>>>>> String name = p.getName();
>>>>>>>>> if (name.equals("client-hostname"))
>>>>>>>>> node.setNodeHost(p.getValue());
>>>>>>>>> //create the node with a host
>>>>>>>>> name //else get the
>>>>>>>>> host name of the machine running on and use that
>>>>>>>>> }
>>>>>>>>> nodes.getNode().add(node);
>>>>>>>>> }
>>>>>>>>> domain.setNodes(nodes);
>>>>>>>>>
>>>>>>>>> List<Server> serverList=servers.getServer();
>>>>>>>>> if (serverList.size() <= 0)
>>>>>>>>> return null;
>>>>>>>>>
>>>>>>>>> for (Server s: serverList){
>>>>>>>>> s.setNode(s.getNodeAgentRef());
>>>>>>>>> s.setNodeAgentRef(null);
>>>>>>>>> }
>>>>>>>>> //remove the node-agent element
>>>>>>>>>
>>>>>>>>> return null;
>>>>>>>>> }
>>>>>>>>> }, domain);
>>>>>>>>> } catch (Exception e) {
>>>>>>>>> Logger.getAnonymousLogger().log(Level.SEVERE,
>>>>>>>>> "Failure while upgrading node-agent from V2 to
>>>>>>>>> V3", e);
>>>>>>>>> throw new RuntimeException(e);
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Carla
>>>>>>>>>
>>>>>>>>> Aug 17, 2010 10:18:55 PM
>>>>>>>>> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade
>>>>>>>>> postConstruct
>>>>>>>>> SEVERE: Failure while upgrading node-agent from V2 to V3
>>>>>>>>> org.jvnet.hk2.config.TransactionFailure: Must use a locked
>>>>>>>>> parent config object for instantiating new config object
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigBeanProxy$Duck.createChild(ConfigBeanProxy.java:126)
>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>>> at
>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>>>> at
>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>>>> at org.jvnet.hk2.config.Dom.invokeDuckMethod(Dom.java:941)
>>>>>>>>> at org.jvnet.hk2.config.Dom.invoke(Dom.java:894)
>>>>>>>>> at
>>>>>>>>> org.glassfish.config.support.TranslatedConfigView.invoke(TranslatedConfigView.java:84)
>>>>>>>>> at $Proxy19.createChild(Unknown Source)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade$1.run(NodeAgentConfigUpgrade.java:90)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade$1.run(NodeAgentConfigUpgrade.java:87)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigSupport$1.run(ConfigSupport.java:112)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigSupport._apply(ConfigSupport.java:171)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigSupport.apply(ConfigSupport.java:130)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigSupport.apply(ConfigSupport.java:109)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.v3.admin.cluster.NodeAgentConfigUpgrade.postConstruct(NodeAgentConfigUpgrade.java:87)
>>>>>>>>> at
>>>>>>>>> com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:109)
>>>>>>>>> at
>>>>>>>>> com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:92)
>>>>>>>>> at
>>>>>>>>> com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:68)
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> com.sun.hk2.component.EventPublishingInhabitant.get(EventPublishingInhabitant.java:136)
>>>>>>>>> at
>>>>>>>>> com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:61)
>>>>>>>>> at
>>>>>>>>> org.glassfish.config.support.DomainXml.upgrade(DomainXml.java:145)
>>>>>>>>>
>>>>>>>>> at
>>>>>>>>> org.glassfish.config.support.DomainXml.run(DomainXml.java:111)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.populateConfig(AbstractModulesRegistryImpl.java:167)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createHabitat(AbstractModulesRegistryImpl.java:149)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.module.bootstrap.Main.createHabitat(Main.java:430)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.osgiadapter.HK2Main.createHabitat(HK2Main.java:92)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.glassfish.bootstrap.GlassFishActivator$1.newGlassFish(GlassFishActivator.java:86)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.glassfish.bootstrap.GlassFishMain$Launcher.launch(GlassFishMain.java:113)
>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>>>>> at
>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>>>>>> at
>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.glassfish.bootstrap.GlassFishMain.main(GlassFishMain.java:98)
>>>>>>>>> at
>>>>>>>>> com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:61)
>>>>>>>>>
>>>>>>>>> Caused by: java.lang.ClassCastException
>>>>>>>>> at java.lang.Class.cast(Class.java:2990)
>>>>>>>>> at
>>>>>>>>> org.jvnet.hk2.config.ConfigBeanProxy$Duck.createChild(ConfigBeanProxy.java:123)
>>>>>>>>> ... 34 more
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>
>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>>
>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>