Elements in sun-domain-1_3.dtd that cause an incompatibility


ELEMENT cluster
    (server-ref*, resource-ref*, application-ref*, system-property*,
    property*)


ATTLIST cluster
    name CDATA #REQUIRED
    config-ref CDATA #REQUIRED
    heartbeat-port CDATA #REQUIRED
    heartbeat-address CDATA #REQUIRED
    heartbeat-enabled %boolean; "true"

As seen here the heartbeat-port and heartbeat-enabled attributes are REQUIRED and these are newly introduced in the sun-domain-1_3.dtd . This needs to be changed to IMPLIED

Workaround

I changed REQUIRED to IMPLIED for the attributes heartbeat-port and heartbeat-attribute in the sun-domain_1_2.dtd and sun-domain_1_3.dtd. Built the admin-core module and copied the 1.2, 1.3.dtds and appserv-rt.jar to my 9.1install-root/lib/dtds directory. The upgrade here creates the clusters/stand-alone instances afresh instead of copying the entire domain directory from source to target.

1. Did an inplace EE->EE upgrade (source had a cluster with one instance and a stand alone instance referring the nodeagent)
After an upgrade, i copied the required dtds and appserv-rt.jar into the lib directory.
I started the domain1 successfully.
Started the node-agent also successfully using the "asadmin start-node-agent --syncinstances=true --user admin NA" command.

2. Did an inplace EE->EE upgrade (source had only one stand alone instance referring the node-agent).
After an upgrade, i started the domain1 successfully. When i tried to start the node-agent, i hit a PELaunch problem.
"java.lang.NoClassDefFoundError: com/sun/enterprise/server/PELaunch"
This can be seen in the instance server.log. The classpath that has been passed is null, since in the domain.xml in the instance/config/ directory, there is no system classpath with the appserv-launch.jar.

Conclusion : The instance's config has not been synchronized. Do we have to pass the option "--syncinstances=true" everytime we startup the node-agent after an inplace upgrade?

The node-agent starts up fine when the heartbeat-port and heartbeat-attributes are made IMPLIED. There is no issue with the domain's certs.

Workaround 2 : Copying Domain from source to target

I tested the following manually. This is an 8.2ee -> 9.1ee SBS upgrade.

8.2ee setup : Default node-agent, stand-alone instance - sains1, cluster - cluster1, clustered instance - clus-ins1, hello.war and stateless-simple.ear deployed on DAS.

Before doing this, copied the modified 1.3.dtd and appserv-rt.jar into the lib directory of 9.1 (as mentioned in the above section)

1. Copied the directories under domain1 from source to target (except bin, imq, session-store, docroot).

2. Changed the dtd version from 1.1 to 1.3 in the domain.xml

3. Start domain (asadmin start-domain --user admin domain1).

4. Hit the "java.lang.NoClassDefFoundError: com/sun/enterprise/server/PELaunch" exception.

5. Manually edited the domain.xml - added the system-classpath with appserv-launch.jar in java-config element.

6. Start domain (Iteration 2)

Issues with Cluster / GMS:

7. Hit the issue with GMS (needed by the cluster)

An error occured during initialization
javax.management.RuntimeMBeanException: RuntimeException thrown by the invoke method of the Dynamic MBean
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:227)
        at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
        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:585)
        at com.sun.enterprise.admin.util.proxy.ProxyClass.invoke(ProxyClass.java:77)
        at $Proxy1.invoke(Unknown Source)
        at com.sun.enterprise.admin.server.core.jmx.SunoneInterceptor.invoke(SunoneInterceptor.java:297)
        at com.sun.enterprise.ee.cms.lifecycle.GMSLifecycleImpl.onInitialization(GMSLifecycleImpl.java:111)
        at com.sun.enterprise.server.ApplicationServer.onInitialization(ApplicationServer.java:240)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onInitialization(OnDemandServer.java:93)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:316)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
Caused by: java.lang.NullPointerException
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.getGMSConfigProps(GMSClientMBeanHelper.java:286)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.initGMSGroupForNamedCluster(GMSClientMBeanHelper.java:91)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForNamedCluster(GMSClientMBean.java:144)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForAllClusters(GMSClientMBean.java:127)
        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:585)
        at com.sun.jmx.mbeanserver.StandardMetaDataImpl.invoke(StandardMetaDataImpl.java:414)
        at javax.management.StandardMBean.invoke(StandardMBean.java:323)
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
        ... 20 more

8. Added the following to the domain.xml in the default-config, sains1-config and clus-ins1 config manually.

group-management-service fd-protocol-max-tries="3" fd-protocol-timeout-in-millis="2000" merge-protocol-max-interval-in-millis="10000" merge-protocol-min-interval-in-millis="5000" ping-protocol-timeout-in-millis="2000" vs-protocol-timeout-in-millis="1500"

Started the domain (Iteration 3), Still got the following exception. Any element missing in the domain.xml, that needs to be added?

An error occured during initialization
javax.management.RuntimeMBeanException: RuntimeException thrown by the invoke method of the Dynamic MBean
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:227)
        at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
        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:585)
        at com.sun.enterprise.admin.util.proxy.ProxyClass.invoke(ProxyClass.java:77)
        at $Proxy1.invoke(Unknown Source)
        at com.sun.enterprise.admin.server.core.jmx.SunoneInterceptor.invoke(SunoneInterceptor.java:297)
        at com.sun.enterprise.ee.cms.lifecycle.GMSLifecycleImpl.onInitialization(GMSLifecycleImpl.java:111)
        at com.sun.enterprise.server.ApplicationServer.onInitialization(ApplicationServer.java:240)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onInitialization(OnDemandServer.java:93)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:316)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
Caused by: java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:396)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.getGMSConfigProps(GMSClientMBeanHelper.java:298)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.initGMSGroupForNamedCluster(GMSClientMBeanHelper.java:91)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForNamedCluster(GMSClientMBean.java:144)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForAllClusters(GMSClientMBean.java:127)
        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:585)
        at com.sun.jmx.mbeanserver.StandardMetaDataImpl.invoke(StandardMetaDataImpl.java:414)
        at javax.management.StandardMBean.invoke(StandardMBean.java:323)
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
        ... 20 more

9. Added the heartbeat-enabled="true" to the domain.xml in the <cluster> element.
Tried to start the domain and got the following exception

An error occured during initialization
javax.management.RuntimeMBeanException: RuntimeException thrown by the invoke method of the Dynamic MBean
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:227)
        at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784)
        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:585)
        at com.sun.enterprise.admin.util.proxy.ProxyClass.invoke(ProxyClass.java:77)
        at $Proxy1.invoke(Unknown Source)
        at com.sun.enterprise.admin.server.core.jmx.SunoneInterceptor.invoke(SunoneInterceptor.java:297)
        at com.sun.enterprise.ee.cms.lifecycle.GMSLifecycleImpl.onInitialization(GMSLifecycleImpl.java:111)
        at com.sun.enterprise.server.ApplicationServer.onInitialization(ApplicationServer.java:240)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onInitialization(OnDemandServer.java:93)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:316)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
Caused by: java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:396)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.getGMSConfigProps(GMSClientMBeanHelper.java:298)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBeanHelper.initGMSGroupForNamedCluster(GMSClientMBeanHelper.java:91)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForNamedCluster(GMSClientMBean.java:144)
        at com.sun.enterprise.ee.admin.mbeans.GMSClientMBean.initGMSGroupForAllClusters(GMSClientMBean.java:127)
        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:585)
        at com.sun.jmx.mbeanserver.StandardMetaDataImpl.invoke(StandardMetaDataImpl.java:414)
        at javax.management.StandardMBean.invoke(StandardMBean.java:323)
        at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213)
        ... 20 more

10. Added group-management-service="INFO" to the module-log-levels in all configs and heartbeat-address and heartbeat-port in the cluster element.

Tried to start the domain and did not hit any issues with the cluster/GMS elements.

Workaround for this issue :

Upgrade tool should add the following (as a part of the transformation module)

1. heartbeat-enabled="true", heartbeat-address="any value in the range of 225.0.0.0 to 231.255..255.255", heartbeat-port="any integer" to the all the cluster elements in the domain.xml

2. group-management-service element with all its attributes in all the configs in domain.xml

3. group-management-service="INFO" in all the module-log-level elements.

Issues with Application Deployment:

The following exception was observed when the domain started up.

An exception was thrown during an ejb invocation on [TimerBean]|#]

[#|2006-12-11T10:55:08.714+0530|INFO|sun-appserver-ee9.1|javax.enterprise.system.container.ejb|_ThreadID=10;_ThreadName=main;|
javax.ejb.AccessLocalException: Client not authorized for this invocation.
        at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1152)
        at com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke(EJBLocalHomeInvocationHandler.java:203)
        at $Proxy17.checkStatus(Unknown Source)
        at com.sun.ejb.containers.TimerBeanContainer.doAfterApplicationDeploy(TimerBeanContainer.java:127)
        at com.sun.enterprise.server.AbstractLoader.loadEjbs(AbstractLoader.java:565)
        at com.sun.enterprise.server.ApplicationLoader.load(ApplicationLoader.java:183)
        at com.sun.enterprise.server.TomcatApplicationLoader.load(TomcatApplicationLoader.java:113)
        at com.sun.enterprise.server.AbstractManager.loadOneSystemApp(AbstractManager.java:331)
        at com.sun.enterprise.server.AbstractManager.loadSystem(AbstractManager.java:289)
        at com.sun.enterprise.server.SystemAppLifecycle.loadSystemApps(SystemAppLifecycle.java:149)
        at com.sun.enterprise.server.SystemAppLifecycle.onStartup(SystemAppLifecycle.java:95)
        at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:332)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:112)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:326)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
|#]

[#|2006-12-11T10:55:08.716+0530|WARNING|sun-appserver-ee9.1|javax.enterprise.system.container.ejb|_ThreadID=10;_ThreadName=main;TimerBean;_RequestID=4811f6d8-a636-415c-b443-34ac269094db;|EJB5108:Unable to initialize EJB Timer Service. The likely cause is the database has not been started or the timer database table has not been created.|#]

I found that the install_root/domains/domain1/generated/policy/*ejb_container_timer_app/ejb_jar/granted.policy does not have any permissions in it. Whereas, the file install_root/domains/domain1/generated/policy/*ejb_container_timer_app/granted.policy has all the javax.security.jacc.EJBMethodPermission.

Since we copy over the generated directory from 8.2ee to 9.1ee, and in 8.2ee, the granted.policy that has all the permissions is found in generated/policy/*ejb_container_timer_app directory and 9.1ee expects it to be in generated/policy/*ejb_container_timer_app/ejb_jar directory.

Is this an issue?

Back

Issues with com_sun_web_ui :

The com_sun_web_ui physical directory is not found in the 9.1eeInstall_root/lib/install/applications directory. This reflects as an exception shown below.

[#|2006-12-11T10:55:11.665+0530|SEVERE|sun-appserver-ee9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;_RequestID=4811f6d8-a636-415c-b443-34ac269094db;|WEB0200: Configuration error in web module [com_sun_web_ui] (while initializing virtual server [__asadmin])
com.sun.enterprise.config.ConfigException: I/O error while loading deployment descriptor for: com_sun_web_ui
cause: /opt/appserver-trial-1-91/lib/install/applications/com_sun_web_ui
        at com.sun.enterprise.instance.WebModulesManager.getDescriptor(WebModulesManager.java:381)
        at com.sun.enterprise.instance.WebModulesManager.getDescriptor(WebModulesManager.java:320)
        at com.sun.enterprise.web.VirtualServer.loadWebModuleConfig(VirtualServer.java:617)
        at com.sun.enterprise.web.VirtualServer.getWebModules(VirtualServer.java:466)
        at com.sun.enterprise.web.WebContainer.loadWebModules(WebContainer.java:954)
        at com.sun.enterprise.web.WebContainer.start(WebContainer.java:820)
        at com.sun.enterprise.web.PEWebContainer.startInstance(PEWebContainer.java:750)
        at com.sun.enterprise.web.PEWebContainerLifecycle.onStartup(PEWebContainerLifecycle.java:71)
        at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:332)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:112)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:326)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
Caused by: java.io.FileNotFoundException: /opt/appserver-trial-1-91/lib/install/applications/com_sun_web_ui
        at com.sun.enterprise.deployment.deploy.shared.FileArchive.open(FileArchive.java:66)
        at com.sun.enterprise.instance.WebModulesManager.getDescriptor(WebModulesManager.java:352)
        ... 16 more
|#]

Workaround for this issue :

Upgrade tool has to do the following (as a part of the transformation module)

1. Delete the com_sun_web_ui module from the domain.xml

2. Remove all the app references.

Back

__Issues with DefaultServlet package name :

__

The package name for DefaultServelet in default-web.xml has changed from com.sun.enterprise.web.servlets.DefaultServlet to org.apache.catalina.servlets.DefaultServlet.

This change has to be made by the upgrade tool

com.sun.enterprise.web.servlets.DefaultServlet
java.lang.ClassNotFoundException: com.sun.enterprise.web.servlets.DefaultServlet
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1507)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1096)
        at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:994)
        at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4689)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:5081)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:299)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1189)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:924)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1189)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:520)
        at org.apache.catalina.startup.Embedded.start(Embedded.java:916)
        at com.sun.enterprise.web.WebContainer.start(WebContainer.java:839)
        at com.sun.enterprise.web.PEWebContainer.startInstance(PEWebContainer.java:750)
        at com.sun.enterprise.web.PEWebContainerLifecycle.onStartup(PEWebContainerLifecycle.java:71)
        at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:332)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:112)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:326)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
        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:585)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
|#]

Workaround for this issue :

Upgrade tool has to add a transformation rule to edit the default-web.xml file. The com.sun.enterprise.web.servlets.DefaultServlet will be changed to org.apache.catalina.servlets.DefaultServlet.

Back