May 17, 2006
Java Plugin Framework(JPF) にチャレンジ
Java Plugin Framework(JPF) とは
JPF は、Plugin アーキテクチャをサポートするためのライブラリ。 ZIP や JAR 形式で Plugin を作成し、アプリケーションからその Plugin を読み込み利用する。
- Java Plugin Framework(JPF)
- http://jpf.sourceforge.net/
- Tutorial
- http://jpf.sourceforge.net/tutorial.html
デモアプリケーションの起動
JPF にはデモアプリケーションが用意されている。 デモアプリケーションは簡単に起動し、Plugin のロードを試すことができる。
jpf-demo-bin-0.8> set JAVA_HOME=c:\_java\jdk\1.5.0_06 jpf-demo-bin-0.8> set PATH=%JAVA_HOME%\bin;%PATH% jpf-demo-bin-0.8> run.bat
サンプルコード
PluginManager を初期化し、Plugin をロードするサンプルコード。
package jp.in_vitro.codelets.jpf;
import java.io.InputStream;
import java.util.Collection;
import org.java.plugin.ObjectFactory;
import org.java.plugin.PluginManager;
import org.java.plugin.PluginManager.PluginLocation;
import org.java.plugin.boot.DefaultPluginsCollector;
import org.java.plugin.boot.PluginsCollector;
import org.java.plugin.registry.ExtensionPoint;
import org.java.plugin.registry.PluginDescriptor;
import org.java.plugin.util.ExtendedProperties;
public class Codelet {
public Codelet() {
super();
}
protected void execute() throws Exception {
ExtendedProperties config = new ExtendedProperties(System
.getProperties());
InputStream is = null;
try {
String configFile = "/"
+ this.getClass().getPackage().getName().replaceAll("\\.",
"/") + "/" + "config.properties";
is = this.getClass().getResourceAsStream(configFile);
config.load(is);
} finally {
if (is != null) {
is.close();
}
}
PluginManager pluginManager = ObjectFactory.newInstance(config)
.createManager();
PluginsCollector collector = new DefaultPluginsCollector();
collector.configure(config);
Collection pluginLocations = collector.collectPluginLocations();
pluginManager.publishPlugins((PluginLocation[]) pluginLocations
.toArray(new PluginLocation[pluginLocations.size()]));
for (Object pdObj : pluginManager.getRegistry().getPluginDescriptors()) {
PluginDescriptor pd = (PluginDescriptor) pdObj;
System.out.println("" + pd);
for (Object epObj : pd.getExtensionPoints()) {
ExtensionPoint ep = (ExtensionPoint) epObj;
System.out.println(" " + ep);
}
}
}
public static void main(String[] args) throws Exception {
Codelet me = new Codelet();
me.execute();
}
}
config.properties
org.java.plugin.PathResolver=org.java.plugin.standard.ShadingPathResolver
org.java.plugin.standard.ShadingPathResolver.shadowFolder=${applicationRoot}/temp/.jpf-shadow
org.java.plugin.standard.ShadingPathResolver.unpackMode=smart
org.java.plugin.boot.pluginsRepositories=./plugins/
サンプルコードの実行結果
plugins ディレクトリにデモアプリケーションの Plugin をいくつか登録して読み込ませてみた。
2006/05/16 23:58:37 org.java.plugin.registry.xml.ManifestParser情報: got SAX parser factory - com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl@16a55fa 2006/05/16 23:58:37 org.java.plugin.registry.xml.PluginRegistryImpl configure 情報: configured, stopOnError=false, isValidating=true 2006/05/16 23:58:37 org.java.plugin.standard.ShadingPathResolver configure 情報: configured, shadow folder is C:\Codelets\${applicationRoot}\temp\.jpf-shadow 2006/05/16 23:58:37 org.java.plugin.registry.xml.PluginRegistryImpl register 情報: plug-in and fragment descriptors registered - 2 {PluginDescriptor: uid=org.jpf.demo.toolbox.pluginbrowser@0.0.4} {PluginDescriptor: uid=org.jpf.demo.toolbox.core@0.0.4} {ExtensionPoint: uid=org.jpf.demo.toolbox.core@Tool}
TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20060517_01.trackback
writeback message: Ready to post a comment.
