[
https://issues.apache.org/jira/browse/FELIX-3020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13058713#comment-13058713
]
Stuart McCulloch commented on FELIX-3020:
-----------------------------------------
More details about what might be going on... as well as enabling various
HotSpot options -XX:+AggressiveOpts also prepends a supplemental bootstrap jar
to the boot classpath. One of the classes included in this supplemental
bootstrap jar is a new TreeMap implementation inspired by Apache Harmony:
http://blogs.oracle.com/dagastine/entry/apache_harmony_thanks_for_the
According to the official TreeMap docs:
http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html
"All Map.Entry pairs returned by methods in this class and its views
represent snapshots of mappings at the time they were produced. They do not
support the Entry.setValue method. (Note however that it is possible to change
mappings in the associated map using put.)"
Which suggests that the current getCurrentLocalizedHeader method in
BundleImpl.java that iterates over the entry set and updates values by calling
"entry.setValue" just happened to work with the old TreeMap implementation.
However, with the alternative implementation switched in by -XX:+AggressiveOpts
you now get an exception when calling "entry.setValue". Note this restriction
on Map.Entry appears to be specific to TreeMaps.
The correct fix would seem to be to call "put" instead on the original map in
BundleImpl.java rather than expect the entry set to always be capable of
"write-through".
> Felix + Jetty 7 is not compatible with -XX:+AggressiveOpts
> -----------------------------------------------------------
>
> Key: FELIX-3020
> URL: https://issues.apache.org/jira/browse/FELIX-3020
> Project: Felix
> Issue Type: Improvement
> Components: Framework
> Environment: JDK 6
> Reporter: Brandon Ehle
>
> Right now if you enable -XX:+AggressiveOpts you get an exception on startup.
> I am not sure whether this is a Felix or Jetty 7 issue.
> ERROR: Bundle org.eclipse.jetty.osgi.boot [15] EventDispatcher: Error during
> dispatch. (java.lang.UnsupportedOperationException)
> java.lang.UnsupportedOperationException
> at
> java.util.AbstractMap$SimpleImmutableEntry.setValue(AbstractMap.java:726)
> at
> org.apache.felix.framework.BundleImpl.getCurrentLocalizedHeader(BundleImpl.java:448)
> at org.apache.felix.framework.Felix.getBundleHeaders(Felix.java:1444)
> at
> org.apache.felix.framework.BundleImpl.getHeaders(BundleImpl.java:316)
> at
> org.apache.felix.framework.BundleImpl.getHeaders(BundleImpl.java:298)
> at
> org.eclipse.jetty.osgi.boot.internal.webapp.WebBundleTrackerCustomizer.register(WebBundleTrackerCustomizer.java:148)
> at
> org.eclipse.jetty.osgi.boot.internal.webapp.WebBundleTrackerCustomizer.addingBundle(WebBundleTrackerCustomizer.java:78)
> at
> org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:439)
> at
> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
> at
> org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:233)
> at
> org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:413)
> at
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)
> at
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)
> at
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3833)
> at org.apache.felix.framework.Felix.startBundle(Felix.java:1803)
> at
> org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1179)
> at
> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
> at java.lang.Thread.run(Thread.java:662)
> ERROR: Bundle org.apache.felix.scr [11] EventDispatcher: Error during
> dispatch. (java.lang.UnsupportedOperationException)
> java.lang.UnsupportedOperationException
> at
> java.util.AbstractMap$SimpleImmutableEntry.setValue(AbstractMap.java:726)
> at
> org.apache.felix.framework.BundleImpl.getCurrentLocalizedHeader(BundleImpl.java:448)
> at org.apache.felix.framework.Felix.getBundleHeaders(Felix.java:1444)
> at
> org.apache.felix.framework.BundleImpl.getHeaders(BundleImpl.java:316)
> at
> org.apache.felix.framework.BundleImpl.getHeaders(BundleImpl.java:298)
> at
> org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:240)
> at
> org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:203)
> at
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)
> at
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)
> at
> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3833)
> at org.apache.felix.framework.Felix.startBundle(Felix.java:1803)
> at
> org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1179)
> at
> org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)
> at java.lang.Thread.run(Thread.java:662)
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira