Two more fun facts on resource processors for future reference :)

1) You can create them through the client API, but you need to add an
Deployment-ProvidesResourceProcessor attribute. Eg from my client the
artifact representation looks...

      {
        "attributes": {
          "artifactName": "Apache Felix Autoconf processor",
          "artifactDescription": "Autoconf processor",
          "mimetype": "application/vnd.osgi.bundle",
          "url": "file:///C:/bramk/Apache
Maven/local-repository/org/apache/felix/org.apache.felix.deployment.rp.autoconf/0.1.0/org.apache.felix.deployment.rp.autoconf-0.1.0.jar",
          "processorPid": "",
          "Bundle-Name": "Apache Felix Autoconf processor",
          "Bundle-SymbolicName": "org.apache.felix.deployment.rp.autoconf",
          "Bundle-Version": "0.1.0",
          "Deployment-ProvidesResourceProcessor" :
"org.osgi.deployment.rp.autoconf"
        },
        "tags": {
        }
      },


2) You can't see them from the client side but it appears you can delete them...

C:\bramk\Amdatu>curl -v -X DELETE
http://localhost:8080/client/work/rest-4/artifact/%28%26%28Bundle-SymbolicName%3Dorg.apache.felix.deployment.rp.autoconf%29%28
Bundle-Version%3D0.1.0%29%29"
* About to connect() to localhost port 8080 (#0)
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 8080 (#0)
> DELETE 
> /client/work/rest-4/artifact/%28%26%28Bundle-SymbolicName%3Dorg.apache.felix.deployment.rp.autoconf%29%28Bundle-Version%3D0.1.0%29%29
>  HTTP/1.1
> User-Agent: curl/7.21.4 (i386-pc-win32) libcurl/7.21.4 zlib/1.2.5
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Server: Jetty(6.1.x)
<
* Connection #0 to host localhost left intact
* Closing connection #0

Regards,
Bram


On Mon, Aug 22, 2011 at 2:53 PM, Bram de Kruijff <bdekrui...@gmail.com> wrote:
> Hi Marcel,
>
> On Mon, Aug 22, 2011 at 1:11 PM, Marcel Offermans
> <marcel.offerm...@luminis.nl> wrote:
>> Hello Bram,
>>
>> On 18 Aug 2011, at 21:13 , Bram de Kruijff wrote:
>>
>>> a couple more notes/questions on the configuration mechanism.
>>>
>>> 1) Seems that (at least) using the REST api I am required to set
>>> "processorPid" : "org.osgi.deployment.rp.autoconf". Without it the
>>> artifact will be created, but once associated to a target things fail
>>> (exception below). From an api user perspective this feels
>>> inconsistent (as it is different form bundles where you can leave it
>>> empty or commit it altogether) and/or at least I'd expect an error on
>>> creation because it apparently is required.
>>
>> Here I can safely say I was not done yet with the REST API, and I agree we 
>> could help the user a bit more!
>>
>>> From an implementation
>>> perspective I am wondering why it needs to be specified at all as the
>>> helpers map mimetypes to processors anyway.
>>
>> I'd have to take a closer look to see why we did this. Perhaps Angelo 
>> remembers? :)
>>
>>> Server side logged exception when leaving the attribute empty string:
>>> (note the empty string in the message ;)
>>>
>>> [Warn ] 
>>> [012]org.apache.ace.client.repository.stateful.StatefulGatewayRepository;org.osgi.service.event.EventHandler:
>>> EventAdmin: Exception during event dispatc
>>> h [org.osgi.service.event.Event
>>> [topic=org/apache/ace/client/repository/public/Group2LicenseAssociation/ADDED]
>>> | [org.apache.ace.client.repository.stateful.Stat
>>> efulGatewayRepository, org.osgi.service.event.EventHandler] |
>>> Bundle(org.apache.ace.client.repository.impl [12])]
>>> java.lang.IllegalStateException: Unable to create deployment version:
>>> there is no resource processing bundle available that publishes
>>>        at 
>>> org.apache.ace.client.repository.stateful.impl.StatefulGatewayRepositoryImpl.getNecessaryDeploymentArtifacts(StatefulGatewayRepositoryImpl.java:495)
>>>
>>>
>>> Server side logged exception when omitting the attribute:
>>>
>>> g! java.lang.IllegalArgumentException: Neither the key nor the value
>>> should be null.[Warn ]
>>> [012]org.apache.ace.client.repository.stateful.StatefulGatewayReposi
>>> tory;org.osgi.service.event.EventHandler: EventAdmin: Exception during
>>> event dispatch [org.osgi.service.event.Event
>>> [topic=org/apache/ace/client/repository/publ
>>> ic/Group2LicenseAssociation/ADDED] |
>>> [org.apache.ace.client.repository.stateful.StatefulGatewayRepository,
>>> org.osgi.service.event.EventHandler] | Bundle(org.apa
>>> che.ace.client.repository.impl [12])]
>>>
>>>        at 
>>> org.apache.ace.client.repository.impl.DeploymentArtifactImpl.addDirective(DeploymentArtifactImpl.java:98)
>>
>> Point taken, we can make this a lot less cryptic!
>>
>>> 2) The velocity based properties substituion in metatype works once
>>> you find out you need to wrap the in "${context.<tag>}". Documenting
>>> this will save a lot of people a lot of searching and frustration ;)
>>> As of yet I am unclear whether I can use the more powerful stuff such
>>> as "foreach( $license in $gateway.children)" as described at
>>> http://incubator.apache.org/ace/template-mechanism.html, but from the
>>> implementation I guess not?
>>
>> Agreed, part of that document is still "wishful thinking". It needs an 
>> update. Do you need the "more powerful stuff"?
>
> Not sure/guess not as I do not yet fully understand what
> "gateway.children" means anyway. As mentioned below I'm not convinced
> the velocity model fits our use case best anyway, so no +1 from my
> end. Just noticed that it was not on the context passed into velocity
> :)
>
>>> Furthermote I am wondering about why velocity is used at all. The
>>> metatype provides us with declarative attributes descriptions that
>>> allows UIs to provide appropriate input fields (eg felix webconsole) .
>>> It could allow webui for example to spawn a "specify required missing
>>> attributes" dialog upon association to a target. The velocity model is
>>> non declarative making this stuff harder?
>>
>> There are a couple of reasons why we used Velocity for this:
>>
>> 1) Not every bundle that has configuration data uses the metatype 
>> specification, so we cannot rely exclusively on it.
>> 2) When we implemented this, webconsole did not exist yet, and I had not 
>> seen many people use metatype.
>>
>> I do think it's a nice idea to add support for metatype to allow you to 
>> create configurations for the bundles you want to deploy. I don't see how we 
>> can ever determine that if you associate a bundle to a target that nobody 
>> already specifies properties for a bundle, so I don't think we can spawn a 
>> dialog when you associate a bundle with a target. However, we can recognize 
>> that a bundle has static metatype information associated with it, and we can 
>> create a dialog to provide that data and store it in the OBR so you can 
>> deploy it alongside the bundle.
>
> Clear. Something like that yes. Thanks for the insights. Thinking some
> more about it :)
>
> Regard.
> Bram
>
>> Greetings, Marcel
>>
>>
>

Reply via email to