[ 
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

        

Reply via email to