Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 319020 - Important reordering for J2EEInit.initEMFModels()
Summary: Important reordering for J2EEInit.initEMFModels()
Status: RESOLVED FIXED
Alias: None
Product: WTP Java EE Tools
Classification: WebTools
Component: jst.j2ee (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.2.1   Edit
Assignee: Carl Anderson CLA
QA Contact: Chuck Bridgham CLA
URL:
Whiteboard: PMC_approved
Keywords:
Depends on: 315286
Blocks:
  Show dependency tree
 
Reported: 2010-07-06 11:11 EDT by Carl Anderson CLA
Modified: 2010-07-08 15:34 EDT (History)
0 users

See Also:
ccc: pmc_approved? (david_williams)
ccc: pmc_approved? (raghunathan.srinivasan)
ccc: pmc_approved? (naci.dai)
deboer: pmc_approved+
ccc: pmc_approved? (neil.hauge)
ccc: pmc_approved? (kaloyan)
cbridgha: review+


Attachments
Move TaglibPackage's initialization after WebapplicationPackage (2.15 KB, patch)
2010-07-06 11:34 EDT, Carl Anderson CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Carl Anderson CLA 2010-07-06 11:11:57 EDT
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.
Comment 1 Carl Anderson CLA 2010-07-06 11:32:16 EDT
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
Comment 2 Carl Anderson CLA 2010-07-06 11:34:39 EDT
Created attachment 173570 [details]
Move TaglibPackage's initialization after WebapplicationPackage
Comment 3 Chuck Bridgham CLA 2010-07-07 09:12:30 EDT
approved
Comment 4 Carl Anderson CLA 2010-07-07 09:25:15 EDT
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.
Comment 5 Carl Anderson CLA 2010-07-07 11:35:01 EDT
Committed to HEAD for WTP 3.2.1 and WTP 3.3