[ https://issues.apache.org/jira/browse/FELIX-650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12617805#action_12617805 ]
Richard S. Hall commented on FELIX-650: --------------------------------------- I will look into this patch when I look into your other patch, later this week. Thanks for the feedback. > Bundle-SymbolicName not handled correctly when header contains parameters > ------------------------------------------------------------------------- > > Key: FELIX-650 > URL: https://issues.apache.org/jira/browse/FELIX-650 > Project: Felix > Issue Type: Bug > Components: Framework > Reporter: Alin Dreghiciu > Assignee: Richard S. Hall > Attachments: FELIX-650.patch > > > The OSGi specs mandates that syntax for Bundle-Symbolicname is: > Bundle-SymbolicName ::= symbolic-name ( ';' parameter ) * > meaning that you can add parameters to symbolic name as for example > singleton:=true. > Let's use the following as an example: > Bundle-SymbolicName: org.ops4j.pax.url.mvn; singleton:=true > If I use such an parameter the bundle symbolic name returned by Felix > Bundle.getSymbolicName will be inclusive the parameters which is not correct. > In the example above the returned value will be org.ops4j.pax.url.mvn; > singleton:=true. > The problem is that some places in Felix lookup the symbolic name using a > pattern like: > ((FelixBundle) > bundle).getInfo().getCurrentHeader().get(Constants.BUNDLE_SYMBOLICNAME) > so, searching the headers for symbolic name not the parsed value. > This had the side effect of being able to install two bundles with same > symbolic name and version, fact that is prohibited by the specs. Felix has > the code to verify that you cannot install but the problem is that when > installing a bundle the symbolic name comparation is doen between the parsed > symbolic name of the bundle to be installed and the symbolic name of the > other bundles (already installed) where the symbolic name is determined using > the pattern above. > You can see this behavior in the example bellow. > I wil atach a path that solves this problem by changing the getSymbolicName > to lookup the symbolic name in the parsed values ("module" ICapability of the > current IModule) and change all the places that did it's own lookup of the > symbolic name to use Bundle.getSymbolicName. > But this is if we do not want an "invasive" change and it may not perform > well as the lookup is done all the time. A better cleaner/solution would be > to add symbolic name (and maybe version) to IModuleDefinition (I would say > but I'm not very aware of Felix implementation internals) and set the values > while creating the module as the values are already parsed by ManifestParser > (same place as when the capabilities/requirements are parsed/created). > -> install > file:/Users/alindreghiciu/.m2/repository/org/ops4j/pax/url/pax-url-mvn/0.3.0/pax-url-mvn-0.3.0.jar > Bundle ID: 5 > -> ps -s > START LEVEL 1 > ID State Level Symbolic name > [ 0] [Active ] [ 0] System Bundle (1.0.4) > [ 1] [Active ] [ 1] org.apache.felix.shell (1.0.1) > [ 2] [Active ] [ 1] org.apache.felix.shell.tui (1.0.1) > [ 3] [Active ] [ 1] org.apache.felix.bundlerepository (1.0.3) > [ 5] [Installed ] [ 1] org.ops4j.pax.url.mvn; singleton:=true (0.3.0) > -> install file:/Users/alindreghiciu/work/pax-url-mvn-0.3.0.jar > Bundle ID: 7 > -> ps -s > START LEVEL 1 > ID State Level Symbolic name > [ 0] [Active ] [ 0] System Bundle (1.0.4) > [ 1] [Active ] [ 1] org.apache.felix.shell (1.0.1) > [ 2] [Active ] [ 1] org.apache.felix.shell.tui (1.0.1) > [ 3] [Active ] [ 1] org.apache.felix.bundlerepository (1.0.3) > [ 5] [Installed ] [ 1] org.ops4j.pax.url.mvn; singleton:=true (0.3.0) > [ 7] [Installed ] [ 1] org.ops4j.pax.url.mvn; singleton:=true (0.3.0) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.