ちょろちょろと勉強し始めました。
今回はOSGiコマンドの作成方法を調査しました。
OSGiコマンドは、OSGiコンソールで実行できるコマンドです。
> headers 1
今回はuname,whatamiコマンドを作成します。
1.ActivatorにCommandProviderを継承する
2.public void _XXXX(CommandInterpreter ci) throws Exception を定義する。
※XXXXはコマンド名になります。
これだけで完了です。
では、実際動作するか確認します。
Run As→ OSGi Framework でosgi consoleを立ち上げる
osgi consoleでuname,whatamiをタイプする。
これで、実装したコマンドが実行されます。
OSGiコマンドは基本的に、先勝ちの方式のようです。
なので、headersなどの既に定義されているものは再定義はできないようです。
以下サンプルです。
package ph.jpn.calm.osgi.sample; import java.net.URL; import java.rmi.server.ServerCloneException; import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.logging.Logger; import javax.naming.Context; import org.osgi.framework.Bundle; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.ServiceReference; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; import org.eclipse.osgi.framework.util.Headers; public class Activator implements BundleActivator ,CommandProvider { private BundleContext context; /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { System.out.println("Hello World!!"); this.context=context; Hashtable properties = new Hashtable(); context.registerService(CommandProvider.class.getName(), this, properties); } /* * (non-Javadoc) * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { System.out.println("Goodbye World!!"); } @Override public String getHelp() { StringBuffer buffer = new StringBuffer(); buffer.append("\tuname - returns framework information\n"); return buffer.toString(); } public void _uname(CommandInterpreter ci) throws Exception { String vendor = context.getProperty(Constants.FRAMEWORK_VENDOR); String version = context.getProperty(Constants.FRAMEWORK_VERSION); String osName = context.getProperty(Constants.FRAMEWORK_OS_NAME); String osVersion = context.getProperty(Constants.FRAMEWORK_OS_VERSION); System.out.println("\n " + vendor + " " + version + " (" + osName + " " + osVersion + ")"); } public void _whatami(CommandInterpreter ci) throws Exception { try { long id = Long.parseLong(ci.nextArgument()); Bundle bundle = context.getBundle(id); // if(bundle==null){ System.out.println("No ID"); } URL url = bundle.getEntry("plugin.xml"); if(url != null) { System.out.println("\n I'm" + bundle.getSymbolicName() + ") a plug-in"); } else { System.out.println("\n I'm " + bundle.getSymbolicName() + ") not a plug-in"); } } catch (NumberFormatException nfe) { System.out.println("\n Error processing command"); } } }
0 件のコメント:
コメントを投稿