I think these decisions are at the heart of what design is all about ... Kind regards,
Peter Kriens On 19 feb. 2014, at 08:45, Jean-Baptiste Onofré <j...@nanthrax.net> wrote: > 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 <ch...@die-schneider.net> >> 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 >>> 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 >> > > -- > Jean-Baptiste Onofré > jbono...@apache.org > http://blog.nanthrax.net > Talend - http://www.talend.com > _______________________________________________ > OSGi Developer Mail List > 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