[ 
https://issues.apache.org/jira/browse/FELIX-5131?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15092618#comment-15092618
 ] 

Thomas Watson commented on FELIX-5131:
--------------------------------------

I think we should implement as many of the List operations as feasible.  I 
don't really like the idea of implementing RandomAccess to avoid certain 
algorithms from using a list iterator.  But I do agree that CopyOnWriteList is 
in fact a random access list so I don't see any harm in adding it to the 
implements of CopyOnWriteList.

The issue is the CopyOnWriteList object is exposed when calling out to 
ResolveContext.insertHostedCapability.  The javadoc for that OSGi method does 
not state any limitations on the operations that can be supported on that 
object.  But I am pretty sure any resolver implementation is going to fail 
badly if the method does not result in adding/inserting the specified 
HostedCapability into the specified List.  For example, removing anything from 
the list is a good way to bust the resolver impl.

As a result I think we should at least implement all the add methods as well as 
a ListIterator that supports add and set operations.


> UnsupportedOperationException when embedding felix in WebSphere
> ---------------------------------------------------------------
>
>                 Key: FELIX-5131
>                 URL: https://issues.apache.org/jira/browse/FELIX-5131
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework, Resolver
>    Affects Versions: framework-5.2.0, resolver-1.6.0
>            Reporter: Thomas Schurins
>
> Hello, we are embedding the OSGi framework in our application (creating the 
> framework , managing its export packages, contolling the bundles &c.). This 
> works great in a lot of enviroments, but not on WebSphere (using the IBM 
> JDK): 
> {noformat}
> java.lang.UnsupportedOperationException
>       at 
> org.apache.felix.resolver.util.CopyOnWriteList.listIterator(CopyOnWriteList.java:218)
>       at java.util.Collections.binarySearch(Collections.java:1551)
>       at 
> org.apache.felix.framework.ResolveContextImpl.insertHostedCapability(ResolveContextImpl.java:103)
>       at org.apache.felix.resolver.Candidates.prepare(Candidates.java:934)
>       at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:233)
>       at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:159)
>       at 
> org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:431)
>       at 
> org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4109)
>       at org.apache.felix.framework.Felix.startBundle(Felix.java:2111)
>       at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1365)
>       at 
> org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
>       at java.lang.Thread.run(Thread.java:790)
> {noformat}
> The problem seems to be that in the IBM JDK, the Collections.binarySearch 
> method directly uses the listIterator of the list if it is not a RandomAccess 
> list (while the oracle JDK doesn't).
> A solution it to add the interface RandomAccess to the CopyOnWriteList class. 
> I've tested this locally and eveything runs fine.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to