- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个捆绑组件,
package ipojo;
import ipojo.service.Hello;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Validate;
@Component(name="hello-factory")
@Provides
public class HelloImpl implements Hello{
@Override
public void shoutHello() {
System.out.println("HellooOOOOoooOooo!");
}
@Validate
public void start() throws Exception {
System.out.println("Hello started :)");
}
@Invalidate
public void stop() throws Exception {
System.out.println("Hello Stopped :(");
}
}
在我的 java 应用程序中,我嵌入了 Apache Felix,并部署了 iPOJO API。然后,我尝试使用 Factory Service 创建上述组件的实例,如下所示:
myBundle= context.installBundle("myBundlePath");
myBundle.start();
ServiceReference[] references = myBundle.getBundleContext().getServiceReferences(Factory.class.getName(), "(factory.name=hello-factory)");
if (references == null) {
System.out.println("No references!");
}
else {
System.out.println(references[0].toString());
Factory factory = myBundle.getBundleContext().getService(references[0]);
ComponentInstance instance= factory.createComponentInstance(null);
instance.start();
}
我成功获得了对工厂服务的引用,但在以下行:
Factory factory = myBundle.getBundleContext().getService(references[0]);
我收到以下 ClassCastException:
java.lang.ClassCastException: org.apache.felix.ipojo.ComponentFactory cannot be cast to org.apache.felix.ipojo.Factory`
我将此行更改为:
Factory factory = (ComponentFactory) myBundle.getBundleContext().getService(references[0]);
然后我得到:
java.lang.ClassCastException: org.apache.felix.ipojo.ComponentFactory cannot be cast to org.apache.felix.ipojo.ComponentFactory
我该如何解决我的问题?谢谢。
最佳答案
嵌入 Felix(或任何其他 OSGi 框架)时,您会在类加载器之间创建边界。主机和 bundle 不使用相同的类加载器,这意味着来自内部和外部的类不兼容。换句话说,从主机访问OSGi服务特别复杂,需要使用反射。
为了简单起见,您应该使用 bundle 中的工厂服务(以及任何其他服务),而不是主机中的服务。
如果您确实需要从主机使用它们,则必须配置 OSGi 框架以从 bundle 0 导出所有必需的包。
关于java - org.apache.felix.ipojo.ComponentFactory 无法转换为 org.apache.felix.ipojo.Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398859/
我有一个捆绑组件, package ipojo; import ipojo.service.Hello; import org.apache.felix.ipojo.annotations.Compo
我有 2 个 iPOJO 组件。 1- 提供“Hello”服务的 Provider bundle。下面是组件的实现: package helloipojo; import helloipojo.ser
我正在尝试学习如何使用 Felix iPOJO API 动态创建组件。 我有一个包含以下文件的简单 bundle : 1- HelloService.java(包含服务接口(interface))。
我在理解 iPOJO 中组件实例化的概念时遇到了一些问题。我读了 this guide 我得到了类和对象的类比,但我仍然有一些具体的问题和一些概念上的问题,我希望有人能澄清 我以为我需要通过 iPOJ
我是 iPOJO 新手。作为学习 iPOJO 框架的一部分,我发现了以下问题。 我正在发布一个服务“ServicePropertiesExample”,其服务属性“when”的初始/默认值设置为 0。
使用 Apache Felix 4.2.1 iPOJO 1.11.0。 需要在用户请求时以编程方式创建组件实例。但我不能在静态工厂方法中使用非静态字段。 @Component @Provides(sp
我还有一个与 iPOJO 动态更新相关的问题: 1。问题: 假设我有2个组件A和B。这两个组件分别由A_impl.java和B_impl.java实现。他们实现了两个服务 A_service 和 B_
我目前正在尝试找到一种在安装 OSGI 中“过滤” bundle 的方法。我使用 Karaf 作为 OSGI 实现,使用 iPOJO 进行服务解析。有什么办法可以确保只允许 iPOJO 提供的服务安装
我想使用Event Admin Handlers . 我正在尝试运行以下代码: import org.apache.felix.ipojo.handlers.event.Publishes; impo
在一个包中有接口(interface) IService,由类 ServiceImpl 实现: public interface IService { void doSomething();
http://felix.apache.org/site/how-to-use-ipojo-annotations.html#HowtouseiPOJOAnnotations-@ServiceProp
如何创建一个像 Java 应用程序一样可以双击打开的 IPOJO 应用程序? 我有一些代码: //App.java package app; import app.testipojo.HelloCom
我正在尝试使用 iPojo 注释在 Eclipse 内进行组件声明。问题是,当 bnd-ipojo-plugin 生成 XML 和修改的类时,无法在插件类路径中找到注释。 我在 Eclipse 中遇到
我有 OSGi 模块化系统,其中有以下组件: 一些特定的协议(protocol)实例实现,表示通过特定协议(protocol)连接到特定服务器(每个连接服务实例化) 一些特定的协议(protocol)
除非我添加验证回调方法,否则我的 iPOJO 组件的注入(inject)回调不会被调用。 import javax.swing.DefaultBoundedRangeModel; import org
我正在使用 iPOJO's awesome EventAdmin handlers 构建一些组件.该文档需要发布者和订阅者的名称属性,充当“唯一标识符”。 强制执行唯一性的范围是什么? 如果它只是在我
我有一个围绕 OSGi 和 iPOJO 构建的项目,我正在尝试确定它是否仍适用于 JDK 11。它目前使用的是 JDK 8。自从最新版本的 iPOJO (1.12. 1) 于 2014 年发布。更新目
我尝试在 Android 4.+ 上使用 iPOJO 1.11.0 启动 apache-felix 4.2.1。 config.properties 标准添加了: org.osgi.framework
我是一名优秀的程序员,十分优秀!