Return-Path: Delivered-To: apmail-incubator-river-dev-archive@minotaur.apache.org Received: (qmail 70497 invoked from network); 17 Oct 2009 03:40:41 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 17 Oct 2009 03:40:41 -0000 Received: (qmail 38219 invoked by uid 500); 17 Oct 2009 03:40:41 -0000 Delivered-To: apmail-incubator-river-dev-archive@incubator.apache.org Received: (qmail 38113 invoked by uid 500); 17 Oct 2009 03:40:41 -0000 Mailing-List: contact river-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: river-dev@incubator.apache.org Delivered-To: mailing list river-dev@incubator.apache.org Received: (qmail 38103 invoked by uid 99); 17 Oct 2009 03:40:40 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 17 Oct 2009 03:40:40 +0000 X-ASF-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of hedhman@gmail.com designates 72.14.220.157 as permitted sender) Received: from [72.14.220.157] (HELO fg-out-1718.google.com) (72.14.220.157) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 17 Oct 2009 03:40:37 +0000 Received: by fg-out-1718.google.com with SMTP id 16so600622fgg.0 for ; Fri, 16 Oct 2009 20:40:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to :content-type; bh=Fssx8jAmyn8I67SOpb5xGhTKqEHaTUasb1z79DCVdqw=; b=uzGwJ+ouTwk4FffSIE5Rt+U9yhVU9aIwAHnUqAcwyKPJsTLDW0Yg0IABIU7+ykAHKn V+cqJzaw7XAvQQKSwGSkd44x3KZL8olQ0CyjndZVw2gcw2hOjs+75InzgaOLJZCZZUlj f+hXzgmPPrrfqH4BEWut1IFiFNUxx3/0SjJBI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type; b=jIF2/Gn2wDD+0mjLmu5DOrw9hUvHemKiGXxEwS+0gl1sty6K/ibB24wBAX6e/4sXRM MS0W/BdRB9a0XSQOi2KEqNefkMRMi42syilkHoc22T6b/isArveAbkVQ6RaKQ5q2TD56 Y6l54g3WJRw0uXdnyDyrbfOv6zJ2tE14DOVaU= MIME-Version: 1.0 Sender: hedhman@gmail.com Received: by 10.239.188.70 with SMTP id o6mr196400hbh.214.1255750815311; Fri, 16 Oct 2009 20:40:15 -0700 (PDT) In-Reply-To: <4AD86531.2020103@zeus.net.au> References: <4AD5FF60.2070207@wonderly.org> <4AD69CBA.1050906@zeus.net.au> <4AD86531.2020103@zeus.net.au> Date: Sat, 17 Oct 2009 11:40:14 +0800 X-Google-Sender-Auth: ee87c30266ac93db Message-ID: Subject: Re: Separating out RMIClassLoader dependencies From: Niclas Hedhman To: river-dev@incubator.apache.org Content-Type: multipart/alternative; boundary=001485f5ae3645e7370476194508 --001485f5ae3645e7370476194508 Content-Type: text/plain; charset=ISO-8859-1 A big chunk of your bundle analysis already exist in a widely used OSGi tool, named BND. Most OSGi developers use it, since it is near impossible to create the metadata by hand, especially the "uses" constraint. But before that we spoke of figuring out how a particular implementation wire up a random set of bundles. That is not predictable, nor does the OSGi spec provides an API to find out. Well, kind of... If you have the loaded class, you can ask from which bundle it came, but unfortunately the StackElement doesn't give you the Class, only the class name, which isn't enough. But I agree with you that with Jini tech and OSGi's well-defined classloading semantics one can do really cool stuff. Including getting rid of some of the more troubling Jini aspects (codebase). -- Niclas On Oct 16, 2009 8:21 PM, "Peter Firmstone" wrote: Hmm, that sounds like opportunity. A dedicated codebase service has all the time in the world to burn processor cycles on analysis, as its main task is simply serving up jar files over networks. Bytecode analysis, identifies class, package and possibly module API, which can be stored with the harvested metadata in mirror objects, one for each class, package and module. Optional Package metadata could be a potential source of information too. Bundles, depend upon and export packages. Once the API is identified using bytecode analysis, fast comparison using mirror objects could identify compatibility. This could be utilised in two ways: 1. As a check of backward compatibility for modules / packages over different release versions, for substituting later compatible bundle versions, if desired. 2. When a dependency on a package only utilises a subset of that package, the actual API requirements may still be satisfied, even though different release versions of that package may not usually be interchangeable or fully compatible. A module or bundle would exist within its own classloader, in the local jvm. The packages or modules upon which it depends could be made available from other classloaders. Bundles could be uploaded to codebase services or a codebase service could retrieve the bundles from designated repository's, perform analysis, then make the bundles available in a location independent manner, to prevent codebase loss and allow for redundant codebase services. Then all one need do is to upload application bundles to the codebase server and register a service, the service and bytecode could be provided independently, the codebase service can provide entire application bytecode built on Jini services and other third party libraries. Have a look on springsource, there are many OSGi jar bundles available, these are simply jar files with Metadata. Someone's done so much hard work already, why not ride the wave? There are already support tools available to create application bundle manifests. The reason I'm considering bundles, is it reduces the number of classloaders required, one per bundle as opposed to one per package. One cannot rely on standard java Package meta data to exist in jar files. ********This doesn't require an OSGi framework.********* http://blog.springsource.com/2008/02/18/creating-osgi-bundles/ http://www.springsource.com/repository/app/bundle?query=A http://www.springsource.com/repository/app/faq >From the website: What is the SpringSource Enterprise Bundle Repository? The SpringSource Enterprise Bundle Repository is a collection of open source libraries commonly used for developing enterprise Java applications with the Spring Framework. The repository contains jar files (bundles) and library definition (".libd") files. A library defines a collection of bundles that are often used together for some purpose (e.g. the "Spring Framework" library). There are hundreds of bundles contained in the repository. The repository meets the following criteria: * Every jar file in the repository is a valid OSGi bundle. Any jar you download from the repository can be deployed as-is into an OSGi Service Platform and the SpringSource dm Server. It can also be used as a regular jar file outside of OSGi. * Every bundle and library has full version information associated with it. The package export information for a bundle contains version information, and the package import information for a bundle contains full version range compatibility information. * The repository is transitively complete. The mandatory dependencies of any bundle are guaranteed to also be in the repository. Most of the optional dependencies of any bundle in the repository will also be present. The bundles listed in any library definition are guaranteed to be in the repository. * The repository is self-consistent. Before any artefact is uploaded to the repository, we verify that it can be installed, resolved, and started in an OSGi Service Platform (using the same profile as the SpringSource dm Server) alongside all of the other bundles in the repository. * The repository can be used from Ivy and Maven based builds. Cheers, Peter. Niclas Hedhman wrote: > > On Fri, Oct 16, 2009 at 1:04 PM, Niclas Hedhman < niclas@hedhman.org> wro... --001485f5ae3645e7370476194508--