Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 67300 invoked from network); 17 Mar 2010 19:28:00 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 17 Mar 2010 19:28:00 -0000 Received: (qmail 86865 invoked by uid 500); 17 Mar 2010 19:28:00 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 86787 invoked by uid 500); 17 Mar 2010 19:28:00 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 86779 invoked by uid 99); 17 Mar 2010 19:28:00 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Mar 2010 19:28:00 +0000 X-ASF-Spam-Status: No, hits=-1011.3 required=10.0 tests=ALL_TRUSTED,AWL X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 17 Mar 2010 19:27:59 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 3662923888CC; Wed, 17 Mar 2010 19:27:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r924429 - in /geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi: BundleAnnotationFinder.java BundleResourceFinder.java Date: Wed, 17 Mar 2010 19:27:39 -0000 To: scm@geronimo.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100317192739.3662923888CC@eris.apache.org> Author: djencks Date: Wed Mar 17 19:27:38 2010 New Revision: 924429 URL: http://svn.apache.org/viewvc?rev=924429&view=rev Log: XBEAN-145 make an osgi-friendly annotation finder using xbean-finder and BundleResourceFinder Added: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java (with props) Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleResourceFinder.java Added: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java?rev=924429&view=auto ============================================================================== --- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java (added) +++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java Wed Mar 17 19:27:38 2010 @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.apache.geronimo.kernel.osgi; + +import java.io.InputStream; +import java.net.URL; +import java.util.zip.ZipEntry; + +import org.apache.xbean.finder.AbstractFinder; +import org.osgi.framework.Bundle; +import org.osgi.service.packageadmin.PackageAdmin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @version $Rev$ $Date$ + */ +public class BundleAnnotationFinder extends AbstractFinder { + private static final Logger log = LoggerFactory.getLogger(BundleAnnotationFinder.class); + private final Bundle bundle; + + public BundleAnnotationFinder(PackageAdmin packageAdmin, Bundle bundle) throws Exception { + this.bundle = bundle; + BundleResourceFinder bundleResourceFinder = new BundleResourceFinder(packageAdmin, bundle, "", ".class"); + bundleResourceFinder.find(new AnnotationFindingCallback()); + } + + @Override + protected URL getResource(String s) { + return bundle.getResource(s); + } + + @Override + protected Class loadClass(String s) throws ClassNotFoundException { + return bundle.loadClass(s); + } + + private class AnnotationFindingCallback implements BundleResourceFinder.ResourceFinderCallback { + + @Override + public void foundInDirectory(Bundle bundle, String baseDir, URL url) throws Exception { + log.info("foundInDirectory: " + url); + InputStream in = url.openStream(); + try { + readClassDef(in); + } finally { + in.close(); + } + } + + @Override + public void foundInJar(Bundle bundle, String jarName, ZipEntry entry, InputStream in) throws Exception { + log.info("foundInJar: " + entry); + readClassDef(in); + } + } + +} Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleAnnotationFinder.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleResourceFinder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleResourceFinder.java?rev=924429&r1=924428&r2=924429&view=diff ============================================================================== --- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleResourceFinder.java (original) +++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleResourceFinder.java Wed Mar 17 19:27:38 2010 @@ -43,10 +43,10 @@ import org.osgi.service.packageadmin.Pac */ public class BundleResourceFinder { - private Bundle bundle; - private PackageAdmin packageAdmin; - private String prefix; - private String suffix; + private final Bundle bundle; + private final PackageAdmin packageAdmin; + private final String prefix; + private final String suffix; public BundleResourceFinder(PackageAdmin packageAdmin, Bundle bundle, String prefix, String suffix) { this.packageAdmin = packageAdmin; @@ -57,11 +57,13 @@ public class BundleResourceFinder { public void find(ResourceFinderCallback callback) throws Exception { scanBundleClassPath(callback, bundle); - - Bundle[] fragments = packageAdmin.getFragments(bundle); - if (fragments != null) { - for (Bundle fragment : fragments) { - scanBundleClassPath(callback, fragment); + + if (packageAdmin != null) { + Bundle[] fragments = packageAdmin.getFragments(bundle); + if (fragments != null) { + for (Bundle fragment : fragments) { + scanBundleClassPath(callback, fragment); + } } } }