Hi Tim,

> In summary, don’t try to pass functions using service properties, use 
> services because it’s what they are for.

Hmmmm. Ok, interesting point. I’ll have to dwell on that a little more, but I 
think it makes sense.

Thanks a lot for the suggestions. I think it puts me on the right path.


Cheers,
=David



> On Jul 16, 2018, at 16:16, Tim Ward <tim.w...@paremus.com> wrote:
> 
> I think what you’re looking for is DS!
> 
> Take the following (apologies for classes typed in email, these may be 
> missing semicolons etc)"
> 
> @Component(configurationPid=“my.class”, configurationPolicy=REQUIRE)
> public class MyClass {
> 
>     @Reference
>     ScriptFunction function;
> 
>     // Rest of your implementation in here
> 
> }
> 
> @Component(configurationPid=“my.function”, configurationPolicy=REQUIRE)
> public class FunctionComponent implements ScriptFunction {
> 
>     @Config {
>         String[] script() default {“return”};
> 
>         boolean chained() default false;
>     }
> 
>     @Reference(cardinality=OPTIONAL)
>     ScriptFunction function;
> 
>     @Activate
>     Void start(Config config) {
>         // Get the script and set up the ScriptEngine
>     }
> 
>     @Override
>     public Object execute(Object[] args) {
>         // run the function, and if chained, apply the next function
>     }
> }
> 
> Then use configurations to set up the functions:
> 
> // Target your component at the start
> my.class: {
>         “function.target”: “(name=start)"
>     },
> 
> // Set up the start function and make its reference mandatory
> "my.function~start”: {
>         “name”: “start”,
>         “script”: “return args[0] + 1”,
>         “chained”: true,
>         “function.target”: “(name=end)”,
>         “function.cardinality.minimum”: 1
>     },
> 
> // Set up an end function
> "my.function~start”: {
>         “name”: “end”,
>         “script”: “return args[0] * 7”
>     }
> 
> 
> All done with configuration, and probably 100 lines of code. In summary, 
> don’t try to pass functions using service properties, use services because 
> it’s what they are for. You can then make it easy to add configurable 
> scripting functions, optimised native functions, or whatever else you want to 
> apply!
> 
> Best Regards,
> 
> Tim
> 
>> On 16 Jul 2018, at 02:09, David Leangen via osgi-dev <osgi-dev@mail.osgi.org 
>> <mailto:osgi-dev@mail.osgi.org>> wrote:
>> 
>> 
>> Thanks, Peter. That could actually be useful in some cases.
>> 
>> I guess what I’m really looking for right now though is a way to inject a 
>> lambda function.
>> 
>> I suppose what I could do it have a 2-step configuration: the first step 
>> would have constant configuration values being read as per usual via the 
>> Configurator, and my lambdas provided from a Java class (or perhaps parsed 
>> from a configuration file if I can find a way to do that). Then for the 
>> second step the two could be combined, put into a Dictionary, and the actual 
>> service would be instantiated based on the combined constant+lambda 
>> configuration.
>> 
>> I would ideally like to keep the constants and the lambdas together in a 
>> configuration file, but maybe that is just not possible right now.
>> 
>> In any case, this sounds very frameworky to me, so I was hoping that 
>> something like this already exists…
>> 
>> 
>> Cheers,
>> =David
>> 
>> 
>> 
>>> On Jul 15, 2018, at 1:01, Peter Kriens <peter.kri...@aqute.biz 
>>> <mailto:peter.kri...@aqute.biz>> wrote:
>>> 
>>> The v2Archive OSGi enRoute has a Configurer that uses a subset of the bnd 
>>> Macro language. This supports ${system;..} and ${system_allow_fail}. These 
>>> take shell command lines.
>>> 
>>> P
>>> 
>>> 
>>> 
>>>> On 14 Jul 2018, at 09:07, David Leangen via osgi-dev 
>>>> <osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>> wrote:
>>>> 
>>>> 
>>>> Thanks, BJ.
>>>> 
>>>> Yeah, right now I am using a Dictionary exactly how you mentioned, but I 
>>>> am wondering if there is a way to maintain it the same way I do as for my 
>>>> configurations.
>>>> 
>>>> Has there ever been a discussion about possibly including this type of 
>>>> thing in the spec? For instance, a spec could include a script (saved in a 
>>>> configuration file), and the script could be parsed and included in a 
>>>> Configuration.
>>>> 
>>>> Has nobody ever encountered this use case? If you have, how did you solve 
>>>> it?
>>>> 
>>>> 
>>>> Cheers,
>>>> =David
>>>> 
>>>> 
>>>>> On Jul 14, 2018, at 5:04, BJ Hargrave <hargr...@us.ibm.com 
>>>>> <mailto:hargr...@us.ibm.com>> wrote:
>>>>> 
>>>>> Component properties are basically service properties which are basically 
>>>>> meant to be things that can go in a Configuration: 
>>>>> https://osgi.org/specification/osgi.core/7.0.0/framework.module.html#i3217016
>>>>>  
>>>>> <https://osgi.org/specification/osgi.core/7.0.0/framework.module.html#i3217016>.
>>>>>  Complex objects including objects implementing functional interfaces are 
>>>>> not in scope for a Configuration.
>>>>>  
>>>>> That said, I imagine you could pass any value object in the Dictionary 
>>>>> supplied to ComponentFactory.newInstance since they are not stored in 
>>>>> Configuration Admin and SCR would not police the value object types :-)
>>>>> --
>>>>> 
>>>>> BJ Hargrave
>>>>> Senior Technical Staff Member, IBM // office: +1 386 848 1781
>>>>> OSGi Fellow and CTO of the OSGi Alliance // mobile: +1 386 848 3788
>>>>> hargr...@us.ibm.com <mailto:hargr...@us.ibm.com>
>>>>>  
>>>>>  
>>>>> ----- Original message -----
>>>>> From: David Leangen via osgi-dev <osgi-dev@mail.osgi.org 
>>>>> <mailto:osgi-dev@mail.osgi.org>>
>>>>> Sent by: osgi-dev-boun...@mail.osgi.org 
>>>>> <mailto:osgi-dev-boun...@mail.osgi.org>
>>>>> To: David Leangen via osgi-dev <osgi-dev@mail.osgi.org 
>>>>> <mailto:osgi-dev@mail.osgi.org>>
>>>>> Cc:
>>>>> Subject: [osgi-dev] Functions as configuration
>>>>> Date: Fri, Jul 13, 2018 3:32 PM
>>>>>  
>>>>> Hi!
>>>>> 
>>>>> Is there any way to include functions as part of a component 
>>>>> configuration?
>>>>> 
>>>>> 
>>>>> Cheers,
>>>>> =David
>>>>> 
>>>>> _______________________________________________
>>>>> OSGi Developer Mail List
>>>>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
>>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev 
>>>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev>
>>>>>  
>>>>>  
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> OSGi Developer Mail List
>>>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
>>>> https://mail.osgi.org/mailman/listinfo/osgi-dev 
>>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev>
>> 
>> _______________________________________________
>> OSGi Developer Mail List
>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
> 

_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to