Aspects when you want to make something a service:
1) It has multiple implementations (where you would use a factory in
classic Java). E.g. XML Parser, Log, etc.
2) It abstracts a concept so multiple parties could provide it. For
example a JDBC connection
3) It is optional, for example a Log or Web service.
4) It makes sense to have more than one of it, a listener
5) It is not 100% reliable, a remote connection
A service allows you to abstract yourself from the implementation, allowing
implementations to offer you instances. None of this is applicable for a Base64
encoder so for me that is a library.
Kind regards,
Peter Kriens
On 18 nov 2010, at 21:15, Jeff McAffer wrote:
> IMHO there is a line there somewhere where code is just code. A base 64
> encoder could just be a mess of statics on a class somewhere. Should Arrays
> be a service? Do we need a HashMapFactory service? How you draw the line is
> up to your and your expected user's requirements. If you think that someone
> might actually have a better base 64 encoder or somehow not want to use yours
> in their deployment, then services are likely good for you. Otherwise, just
> write the code and use it.
>
> Jeff
>
>
> On 2010-11-18, at 9:14 AM, Jean-Baptiste Onofré wrote:
>
>> Hi Alexander,
>>
>> I prefer to use service because your bundle is completely decoupled from the
>> interface.
>>
>> As the service is identified by an interface, you can change your
>> implementation without changing your bundle.
>>
>> If you use Import/Export, changing the implementation means that you have to
>> update your bundle, which is not the case using a service.
>>
>> Regards
>> JB
>>
>> On 11/18/2010 09:01 AM, Alexander Shutyaev wrote:
>>> I have a very general question concerning usage of services versus
>>> Import/Export package. What would be the main principles in choosing
>>> between one of these schemes?
>>>
>>> Let's say I want to write a BASE64 encode/decode utility. Plain old java
>>> way would be to write a class like
>>>
>>> public class Base64Utility
>>> {
>>> public static String encode(byte[] data) {}
>>> public static byte[] decode(String encodedData) {}
>>> }
>>>
>>> To use it I would Import the package it resides in and then write
>>> something like
>>>
>>> String s = Base64Utility.encode(mydata);
>>>
>>> On the other hand I could register an OSGi service under an interface
>>> similar to the class shown above. That would require some extra actions.
>>> But is it right to create service for such a primitive class? How do I
>>> know when to use a service and when to just Import/Export the class
>>> (sorry, package) I need?
>>>
>>>
>>>
>>> _______________________________________________
>>> OSGi Developer Mail List
>>> [email protected]
>>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>> _______________________________________________
>> OSGi Developer Mail List
>> [email protected]
>> https://mail.osgi.org/mailman/listinfo/osgi-dev
>
>
> _______________________________________________
> OSGi Developer Mail List
> [email protected]
> https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev