把一个例子从尼尔·巴特利特OSGi的书”
package tutorial;
import java.io.File;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
public class HelloUpdaterActivator implements BundleActivator {
// ...
private final Thread thread = new Thread(new BundleUpdater());
private volatile BundleContext context;
@Override
public void start(BundleContext context) throws Exception {
System.out.println("Hello World");
this.context = context;
thread.start();
}
@Override
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye World");
thread.interrupt();
}
protected Bundle findBundleByLocation(String location) {
// ... Not relevant to lack of any print statements in OSGi console.
}
private class BundleUpdater implements Runnable {
@Override
public void run() {
// ... Not relevant to lack of any print statements in OSGi console.
}
}
^我把它放在一个文件叫做HelloUpdaterActivator。
我成功地编译java文件教程智慧
javac -cp ".:org.eclipse.osgi_3.5.1.R35x_v20090827.jar" HelloUpdaterActivator.java
然后我把所有生成的类文件
jar cf HelloUpdaterActivator.jar ./HelloUpdaterActivator.class ./HelloUpdaterActivator\$BundleUpdater.class ./HelloUpdaterActivator\$1.class
最后,我做了一个通用的样品清单。MF文件
Manifest-Version: 1.0
Created-By: 1.7.0_79 (Oracle Corporation)
Bundle−Name: OSGi Bundle
Bundle−Symbolic Name: example1
Bundle−Version: 1.0.1
Bundle−Required Execution Environment: J2SE−1.6
现在jar已经准备好了,我在终端中打开了OSGi,它有自己的小控制台,就像这样:
java -jar ./org.esgi_3.5.1.R35x_v20090827.jar -console -configuration runtime
OSGi 控制台如下所示:
osgi>
我在OSGi控制台中输入:
osgi> install file:HelloUpdaterActivator.jar
Bundle id is 1
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.5.1.R35x_v20090827
1 INSTALLED unknown_0.0.0 [1]
osgi> start 1
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.5.1.R35x_v20090827
1 ACTIVE unknown_0.0.0 [1]
osgi> stop 1
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.5.1.R35x_v20090827
1 RESOLVED unknown_0.0.0 [1]
但是即使它说我创建的jar文件是活动的,“Hello World”永远不会在开始时打印,“Goodbye World”永远不会在停止时打印。为什么我的OSGi教程不会在包开始时打印“Hello World”或在包停止时打印“Goodbye world ”?
更新
我明白了通过改变我的工作清单。MF文件t
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: OSGi_Bundle - Activator
Bundle-Version: 1.0.0.SNAPSHOT
Bundle-Activator: Activator
Bundle-ClassPath: .
Bundle-Description: Activator
Bundle-SymbolicName: activator
Import-Package: org.osgi.framework
您缺少了一个<code>Bundle Activator</code>头,因此它知道如何调用该类的方法。
我正在开发超文本传输协议客户端应用程序作为一个OSGI捆绑项目,我已经使用apache maven创建项目文件夹结构使用下面的命令。 上面的命令创建了项目文件夹结构,因为我使用的是基于httpclient的应用程序。我在pom中添加了依赖项。xml如下所示。 我执行以下命令, 根项目上进行构建 它在本地maven存储库中创建了所需的jar文件。 问题从这里开始。我试图在ApacheServiceM
我已经用声明性服务(DS)组件定义定义了一个OSGi包(),指定了一个导出的服务、一个激活方法和一个停用方法。 在Activate方法的主体中,我需要访问一个文件,该文件不在文件系统中,但绑定在OSGi捆绑包中。在activate方法期间,使用。 这基本上是可行的,但有一种情况是不可行的。在我的应用程序中,
我还不是一个有经验的OSGi用户,因此我会遇到一些问题。 我正在尝试使用作为外部提供程序,因为我不希望我的包包含所有这些类。 但是,当我运行这组包(my和)时,我得到以下错误: 错误:Bundle org.apache.serviceMix.bundles.hadoop-client[56]错误启动文件:bundles/org.apache.serviceMix.bundles.hadoop-cl
问题内容: 如何定义OSGi捆绑包的开始级别? 我正在使用Apache felix,并希望在框架执行过程中保持起始级别。我预计Manifest中的条目根本不需要非常频繁地更改bundle的开始级别。MF似乎是最明智的。我已经到org.osgi.framework.startlevel了,但是还没有看到实际的例子。 如果有一种巧妙的方法将起始级别并入POM,那么我也将maven与maven-bund
我有两个捆绑说A和B。A 依赖于 B(在 A 的 MANIFEST 中指定为 Required-Bundle:B)。 现在我安装两个A, B包一个接一个(c 我从异常中了解到捆绑包B尚未启动(已解决)。现在如何解决这个问题呢? 解决这个问题的唯一方法是排序包 顺便说一下,我用的是春分。
问题内容: 在我的AEM项目的代码中看似无关紧要的更改之后,我的捆绑软件无法解决。检查日志后,我可以看到出现以下错误。 该项目在本地编译得很好,并且只有在容器尝试解决该捆绑包后,该问题才会出现。 我没有在任何更改中添加任何显式依赖项。项目对象模型与以前相同。顾名思义,这是一个核心Java软件包,因此我希望它会被System软件包公开。 我正在运行AEM支持的JDK 7,所以不要指望它与JVM兼容性