Hi Peter,

I agree, we had some discussion with Christian where he wanted to set all as bundle, whereas we have some pieces in Karaf where we just embed as private package. The challenge is to find the right balance between visibility, API, granularity, etc.

Regards
JB

On 02/18/2014 07:27 PM, Peter Kriens wrote:
My god, your mind must have been completely warped by Spring! :-) There have 
been eons before Spring when you still had to wire your app with this old 
fashioned out of style keyword call 'new'. :-)

Kidding aside, I actually do not recognize the problem. In general I just 
create the private objects with 'new' and lazily. I.e. I do not go out of my 
way to make them separate. One thing I learned about dependencies is that it is 
all or nothing. You should not look at each dependency an-sich but look what it 
means for the people that depend on you. Each class in your bundle is fair game 
since you're already coupled. There is no use trying to protect yourself from 
changes because you already in the same boat. So inside your bundle you use the 
normal Java access rules for getting some local privacy. And other than that, 
any external reference is a service.

In my experience, I find I have quite a large number of components that have a 
set of private adjoint classes. If I have a public API, I do not mind talking 
to my siblings in the same bundle through the service registry since quite 
often this turns out to be useful, if only for debugging. Realize that a 
service is really cheap, there are installations with ten thousands of services.

The trick here is cohesion. Inside a service I normally have small to medium 
sized program, using between a few to a 100 classes. I feel I've succeeded when 
that complexity looks really simple through the service API, with only a few 
adjoint classes. This is what modularity s all about, putting a lot of 
complexity inside and only showing an API to allow collaboration.

Don't hesitate to contact me if you have an actual use case and want to discuss 
it.

Kind regards,

        Peter Kriens





On 18 feb. 2014, at 10:16, Christian Schneider <[email protected]> wrote:

I think you are right that the number of classes to wire inside a bundle is 
much lower than the number of classes in a spring application. So there is less 
need for a DI solution.

The question is though how to do the wiring with java in practice. Do you have 
some larger examples for this? What I am especially concerned with is the 
handling of instance creation and DI setup when classes are partly created by 
hand and partly by DS.

Christian

On 17.02.2014 20:19, Peter Kriens wrote:
I do not think this is the idea of DS. Spring was invented to handle the 
byzantine complexity of an average Java application at the time. Trying to wire 
it all together had become a nightmare because there are ordering issues in 
initialization. The complexity of apps exploded because the complexity 
increases exponentially with the number of dependencies. So Spring provided a 
fantastic solution to this problem. However, it also introduced XML programming 
which is fundamentally bad (it is probably the worst language to code in ever 
devised by mankind). In the early naughties this was ok since Spring solved a 
real problem.

I think a natural DS application uses normal plain run of the mill Java code to 
wire the private beans. Since these are normally a small number, there are in 
general no ordering issues, specifically since the scope is private, no 
unexpected surprises. Also the wiring is much better done in Java because it 
gives you 100% type safety, error checking in the compiler, and lots of context 
help in your IDE. Since the problem is so much smaller and all your types are 
in private scope and you really want automatic wiring then there are lots of 
solutions: Picocontainer, Guice, etc.

DS works so well because it is highly cohesive. It basically does one thing, 
wiring services, and it does that extremely well. I would really think it would 
be shame if we try to turn it into another bloated monster ... :-)

Kind regards,

        Peter Kriens




--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

_______________________________________________
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


--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to