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

Reply via email to