1 package org
.argeo
.osgi
.boot
;
3 import java
.util
.ArrayList
;
4 import java
.util
.Iterator
;
8 import java
.util
.TreeMap
;
9 import java
.util
.TreeSet
;
11 import org
.osgi
.framework
.Bundle
;
12 import org
.osgi
.framework
.BundleContext
;
13 import org
.osgi
.framework
.ServiceReference
;
14 import org
.osgi
.service
.packageadmin
.ExportedPackage
;
15 import org
.osgi
.service
.packageadmin
.PackageAdmin
;
17 @SuppressWarnings("deprecation")
18 class OsgiBootDiagnostics
{
19 private final BundleContext bundleContext
;
21 public OsgiBootDiagnostics(BundleContext bundleContext
) {
22 this.bundleContext
= bundleContext
;
27 /** Check unresolved bundles */
28 protected void checkUnresolved() {
30 ServiceReference
<PackageAdmin
> packageAdminRef
= bundleContext
.getServiceReference(PackageAdmin
.class);
31 PackageAdmin packageAdmin
= (PackageAdmin
) bundleContext
.getService(packageAdminRef
);
32 packageAdmin
.resolveBundles(null);
34 Bundle
[] bundles
= bundleContext
.getBundles();
35 List
<Bundle
> unresolvedBundles
= new ArrayList
<Bundle
>();
36 for (int i
= 0; i
< bundles
.length
; i
++) {
37 int bundleState
= bundles
[i
].getState();
38 if (!(bundleState
== Bundle
.ACTIVE
|| bundleState
== Bundle
.RESOLVED
|| bundleState
== Bundle
.STARTING
))
39 unresolvedBundles
.add(bundles
[i
]);
42 if (unresolvedBundles
.size() != 0) {
43 OsgiBootUtils
.warn("Unresolved bundles " + unresolvedBundles
);
47 /** List packages exported twice. */
48 public Map
<String
, Set
<String
>> findPackagesExportedTwice() {
49 ServiceReference
<PackageAdmin
> paSr
= bundleContext
.getServiceReference(PackageAdmin
.class);
50 PackageAdmin packageAdmin
= (PackageAdmin
) bundleContext
.getService(paSr
);
52 // find packages exported twice
53 Bundle
[] bundles
= bundleContext
.getBundles();
54 Map
<String
, Set
<String
>> exportedPackages
= new TreeMap
<String
, Set
<String
>>();
55 for (int i
= 0; i
< bundles
.length
; i
++) {
56 Bundle bundle
= bundles
[i
];
57 ExportedPackage
[] pkgs
= packageAdmin
.getExportedPackages(bundle
);
59 for (int j
= 0; j
< pkgs
.length
; j
++) {
60 String pkgName
= pkgs
[j
].getName();
61 if (!exportedPackages
.containsKey(pkgName
)) {
62 exportedPackages
.put(pkgName
, new TreeSet
<String
>());
64 (exportedPackages
.get(pkgName
)).add(bundle
.getSymbolicName() + "_" + bundle
.getVersion());
67 Map
<String
, Set
<String
>> duplicatePackages
= new TreeMap
<String
, Set
<String
>>();
68 Iterator
<String
> it
= exportedPackages
.keySet().iterator();
69 while (it
.hasNext()) {
70 String pkgName
= it
.next().toString();
71 Set
<String
> bdles
= exportedPackages
.get(pkgName
);
73 duplicatePackages
.put(pkgName
, bdles
);
75 return duplicatePackages
;