blob: 581604461294943121f139e979966c42f5210715 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Knibb initial implementation
* Matthew Webster Eclipse 3.2 changes
* Martin Lippert minor changes
* Martin Lippert extracted caching service factory
*******************************************************************************/
package org.eclipse.equinox.weaving.internal.caching.j9;
import com.ibm.oti.shared.Shared;
import org.eclipse.equinox.service.weaving.ICachingServiceFactory;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
/**
* The main plugin class to be used in the desktop.
*/
public class CachingServicePlugin implements BundleActivator {
public static boolean DEBUG;
public static boolean verbose = Boolean
.getBoolean("org.aspectj.osgi.verbose");
/**
* The constructor.
*/
public CachingServicePlugin() {
}
/**
* This method is called upon plug-in activation
*/
public void start(final BundleContext context) throws Exception {
if (CachingServicePlugin.DEBUG)
System.out.println("> CachingServicePlugin.start() context="
+ context);
loadOptions(context);
//are we on J9?
if (shouldRegister()) {
if (verbose)
System.err
.println("[org.eclipse.equinox.weaving.caching.j9] info starting J9 caching service ...");
final String name = ICachingServiceFactory.class.getName();
final CachingServiceFactory cachingServiceFactory = new CachingServiceFactory();
context.registerService(name, cachingServiceFactory, null);
} else {
if (verbose)
System.err
.println("[org.eclipse.equinox.weaving.caching.j9] warning cannot start J9 caching service");
}
if (CachingServicePlugin.DEBUG)
System.out.println("< CachingServicePlugin.start()");
}
/**
* This method is called when the plug-in is stopped
*/
public void stop(final BundleContext context) throws Exception {
}
private void loadOptions(final BundleContext context) {
// all this is only to get the application args
DebugOptions service = null;
final ServiceReference<?> reference = context
.getServiceReference(DebugOptions.class.getName());
if (reference != null)
service = (DebugOptions) context.getService(reference);
if (service == null) return;
try {
DEBUG = service.getBooleanOption(
"org.aspectj.osgi.service.caching.j9/debug", false);
} finally {
// we have what we want - release the service
context.ungetService(reference);
}
}
private boolean shouldRegister() {
if (CachingServicePlugin.DEBUG)
System.out.println("> CachingServicePlugin.shouldRegister()");
boolean enabled;
try {
Class.forName("com.ibm.oti.vm.VM"); //if this fails we are not on J9
final boolean sharing = Shared.isSharingEnabled(); //if not using shared classes we want a different adaptor
if (CachingServicePlugin.DEBUG)
System.out
.println("- CachingServicePlugin.shouldRegister() sharing="
+ sharing);
if (sharing) {
enabled = true;
} else {
enabled = false;
}
} catch (final ClassNotFoundException ex) {
if (CachingServicePlugin.DEBUG)
System.out
.println("E CachingServicePlugin.shouldRegister() ex="
+ ex);
//not on J9
enabled = false;
}
if (CachingServicePlugin.DEBUG)
System.out.println("< CachingServicePlugin.shouldRegister() "
+ enabled);
return enabled;
}
}