Community
Participate
Working Groups
When I went through and set up the ordering for initialization in J2EEInit.initEMFModels(), I based it off of the ordering required by the J2EE XSD files. However, since initParams were put into WebapplicationPackage, there is a dependence from TaglibPackage to WebapplicationPackage. This can cause problems during the traversal of J2EEInit.initEMFModels(), and thus a reordering is needed.
Here is a stack trace from an encounter of this problem in an adopter product: Exception in thread "Thread-7" java.lang.ExceptionInInitializerError at java.lang.J9VMInternals.initialize(J9VMInternals.java:222) at sun.misc.Unsafe.ensureClassInitialized(Native Method) at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25) at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122) at java.lang.reflect.Field.acquireFieldAccessor(Field.java:934) at java.lang.reflect.Field.getFieldAccessor(Field.java:901) at java.lang.reflect.Field.get(Field.java:360) at org.eclipse.emf.ecore.plugin.RegistryReader$EPackageDescriptor.getEPackage(RegistryReader.java:274) at org.eclipse.emf.ecore.impl.EPackageRegistryImpl.getEPackage(EPackageRegistryImpl.java:133) at org.eclipse.jst.j2ee.webapplication.internal.impl.WebapplicationPackageImpl.initializePackageContents(WebapplicationPackageImpl.java:1579) at org.eclipse.jst.j2ee.webapplication.internal.impl.WebapplicationPackageImpl.init(WebapplicationPackageImpl.java:337) at org.eclipse.jst.j2ee.webapplication.WebapplicationPackage.<clinit>(WebapplicationPackage.java:1230) at java.lang.J9VMInternals.initializeImpl(Native Method) at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) at sun.misc.Unsafe.ensureClassInitialized(Native Method) at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25) at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122) at java.lang.reflect.Field.acquireFieldAccessor(Field.java:934) at java.lang.reflect.Field.getFieldAccessor(Field.java:901) at java.lang.reflect.Field.get(Field.java:360) at org.eclipse.emf.ecore.plugin.RegistryReader$EPackageDescriptor.getEPackage(RegistryReader.java:274) at org.eclipse.emf.ecore.impl.EPackageRegistryImpl.getEPackage(EPackageRegistryImpl.java:133) at org.eclipse.jst.j2ee.taglib.internal.impl.TaglibPackageImpl.initializePackageContents(TaglibPackageImpl.java:719) at org.eclipse.jst.j2ee.taglib.internal.impl.TaglibPackageImpl.init(TaglibPackageImpl.java:154) at org.eclipse.jst.j2ee.taglib.internal.TaglibPackage.<clinit>(TaglibPackage.java:66) at java.lang.J9VMInternals.initializeImpl(Native Method) at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) at org.eclipse.jst.j2ee.internal.J2EEInit$20.run(J2EEInit.java:342) at java.lang.Thread.run(Thread.java:736) Caused by: java.lang.NullPointerException at org.eclipse.emf.common.util.AbstractEList.getNonDuplicates(AbstractEList.java:1167) at org.eclipse.emf.common.util.AbstractEList.addAll(AbstractEList.java:372) at org.eclipse.emf.ecore.impl.EClassImpl.getEAllStructuralFeatures(EClassImpl.java:767) at org.eclipse.emf.ecore.impl.EClassImpl.freeze(EClassImpl.java:132) at org.eclipse.emf.ecore.impl.EModelElementImpl.freeze(EModelElementImpl.java:100) at org.eclipse.emf.ecore.impl.EPackageImpl.freeze(EPackageImpl.java:203) at org.eclipse.jst.j2ee.jsp.internal.impl.JspPackageImpl.init(JspPackageImpl.java:127) at org.eclipse.jst.j2ee.jsp.JspPackage.<clinit>(JspPackage.java:74) at java.lang.J9VMInternals.initializeImpl(Native Method) at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) ... 28 more
Created attachment 173570 [details] Move TaglibPackage's initialization after WebapplicationPackage
approved
This fix is important to ensure proper initialization of the EMF models. There is no workaround. I have run the JUnit bucket against it and tested this by hand. The fix is to move TaglibPackage's initialization after WebapplicationPackage. Chuck Bridgham has reviewed this fix. This is an extremely low risk fix- all that is happening is a simple reordering of the deferred initialization of the EMF models, to comply with the hard coded dependencies.
Committed to HEAD for WTP 3.2.1 and WTP 3.3