问题标签 [ipojo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
399 浏览

java - iPOJO 组件已实例化,但没有可见输出

我有 2 个 iPOJO 组件。

1- 提供“Hello”服务的 Provider 包。下面是组件的实现:

2- 使用 HelloService 对象的消费者捆绑包如下:

在一个单独的 Java 应用程序中,我加载这两个包并在 Apache Felix 上启动它们,如下所示:

以上所有工作正常。

现在,我想动态地实例化这两个组件,并观察捆绑消费者对捆绑提供者服务的消费情况。我使用了实例声明,如下:

运行应用程序时没有错误。但是,我看不到服务提供者和消费者的 start() 方法中存在的“Hello”消息。我什么都看不到。这意味着组件没有正确实例化。我哪里做错了?谢谢。

更新

我发现我没有在我的包上应用 iPOJO 操作,所以我使用 iPOJO Ant Task 进行了操作,如下所示:

现在,我可以在我的应用程序中看到工厂是有效的。这是命令中的输出:

因此,与以前不同,工厂“my-factory”可用。

但是,我的实例不可用,其创建如下:

同样,这不会显示错误,但不会在包的 start() 方法中显示预期的输出,并且在命令中,我可以看到:

你能帮忙吗?谢谢。

0 投票
2 回答
286 浏览

java - org.apache.felix.ipojo.ComponentFactory 不能转换为 org.apache.felix.ipojo.Factory

我有一个捆绑组件,

在我的 Java 应用程序中,我嵌入了 Apache Felix,并部署了 iPOJO API。然后,我尝试使用工厂服务创建上述组件的实例,如下所示:

我成功获得了对工厂服务的引用,但在以下行:

我得到以下 ClassCastException:

我将此行更改为:

然后我得到:

我该如何解决我的问题?谢谢你。

0 投票
0 回答
253 浏览

java - 在包中实例化 iPOJO 组合显示“java.lang.LinkageError:加载程序约束违规:解析覆盖方法时”

我正在尝试使用 iPOJO API 创建一个复合组件。

最初,我将 felix 框架嵌入到我的 java 应用程序中,如下所示:

我还在我的 java 应用程序中部署 iPOJO 所需的包,如下所示:

下面是我的 java 应用程序类路径中 jar 的快照:

在此处输入图像描述

除了我的 java 应用程序之外,我还有一个包,我在其中使用 iPOJO API 创建了一个复合组件类型。我创建了这个组合并在我的 bundle Activator start 方法中创建了一个实例,如下所示:

我的捆绑包的 MANIFEST.MF:

我的捆绑类路径:

在此处输入图像描述

当我在我的 java 应用程序中安装并启动这个包时,我收到以下错误:

在以下行:

我在这里读到,当您在两个捆绑包中有两个相同的类时,可能会出现此错误。但我不知道这两个类可能在哪里。我怀疑org/apache/felix/ipojo/metadata/Element,但我发现只有一堂课org.apache.felix.ipojo.。除了在我的捆绑包中,我在其他任何地方都没有那个库。

你能帮忙吗?谢谢。

0 投票
1 回答
165 浏览

java - 如何获取 iPOJO 组件实例配置?

我有一个像这样创建的 iPOJO 组件实例:

在我上面实例化的组件中,我怎样才能获得字典“dic”值?

可能是这样的吗?

或者是:

0 投票
1 回答
4970 浏览

java - 加载程序约束违规:加载程序(x 的实例)先前为名称为 y 的不同类型启动加载

我将 Felix iPOJO 包装在我的框架中,称之为“MyFramework”,以简化它的一些操作。

使用 MyFramework,我有以下内容:

1-“HelloService”Bundle,它是一个 iPOJO 组件,提供打印“hello”消息作为服务。

2-“MyFrameworkComposite”包,它是另一个 iPOJO 组件,它实例化上面的“HelloService”组件并在其启动方法中检索其服务。

3- 一个启动包,它只是一个 OSGI 包,它在其启动方法中实例化“MyFrameworkComposite”组件。

4- 我的 Java 应用程序加载了 iPOJO 所需的捆绑包,以及上述 3 个捆绑包。

当我运行我的 java 应用程序时,我收到以下带有错误的输出:

错误恰好发生在以下行:(此行在我的框架代码中):

providedServiceDescription 的类型为 ProvidedServiceDescription,它是org.apache.felix.ipojo.handlers.providedservice包的一部分。

尝试在我的“MyFrameworkComposite”组件中检索“Hello Service”组件服务时,到达发生错误的行,如下所示:

我在不同的资源中读到,当您在类路径中有重复的库时,可能会导致这种情况。但我确信事实并非如此。可能是什么原因?

0 投票
1 回答
94 浏览

osgi - iPOJO Composite 中的隔离是如何工作的?

iPOJO 提供了一种机制来创建包含原始类型组件实例的组合。我有兴趣了解 iPOJO 为组合子实例提供的服务提供隔离以防止从组合外部访问的机制。

例如,假设我有以下组成(使用 iPOJO API):

假设组件“prov”实现了一个名为HelloService. 这个服务被隔离是什么意思?

这是否意味着如果我尝试通过服务引用从外部包(不是组合的一部分)访问服务:

这个引用真的会失败,因为它的范围在组合之外吗?

如果组合内的组件包含对在组合外发布的服务的引用怎么办?这个引用也会失败吗?

注意:我目前对进口或出口服务不感兴趣。

0 投票
1 回答
614 浏览

osgi - 使用 iPOJO API 显示“无法创建 POJO 实例,找不到 POJO 构造函数”

iPOJO API 处理起来似乎很复杂,尤其是在嵌入 OSGI 框架时。通过将 API 编码行保留在 OSGI 包中完成类加载器问题后,我在这里遇到了一个新的不同问题:

在我的捆绑启动方法中,我有以下代码:

InstanceFactoryImpl类与以下在同一个包中:

当我在我的 java 应用程序中将我的包加载到 Felix 框架时,我收到以下错误:

我在以下行收到错误:

我试图显式定义一个构造函数,并添加一个名为“init”的方法。这一切都失败了,同样的错误不断出现。我该怎么办?谢谢?

0 投票
1 回答
777 浏览

java - How to do iPOJO instantiation

I am having some problems understanding the concept of component instantiation in iPOJO. I read this guide and I get the analogy to classes and objects but I still have some concrete problems and some conceptual problems that I hope someone can clarify

I thought I needed to create instances via iPOJO (@Instantiate or factories) only for service providers since they never use new because the impl is always hidden. However, I have some consumers @Component that I instantiate myself (say in a main() method where I call new on them directly). I made them @Component because they need to have things injected. I was assuming that the ipojo bytecode manipulation would make it so that when the objects were constructed, they would have their dependencies injected (I'm using mostly method injection with @Bind) but it seems that is not the case. Can someone clarify this to me please. Now it seems to me that for iPOJO to do any injection at all I need to always use one of the iPOJO instantiation techniques. The problem I have is that then the constructors I made in the consumer classes are not called.

This is a simplified example to illustrate my confusion

So, as can be seen here, I need to have all the providers of interface External, but I also need a Bar object that I pass when I construct the object using new MyFoo(someBar)

My problem is that if I need to pass a Bar to the constructor then I need to use new; but If i use new, iPojo never invokes my injection method. On the other hand, if I use iPOJOs instantiation (say I add @Instantiate) then the injection does happen but the constructor is not invoked, so the bind throws a NPE because the list has not been created yet + bar will not be set. I know I can create the list inside the bind method, but my question is more conceptual.

  1. How are you supposed to accomplish this (framework injection + argument passing in the constructor)?
  2. How can iPOJO be calling addExternal (which means the object has been created) without calling my one and only constructor that creates the object? this is very counter-intuitive in standard java
  3. Are you just not supposed to use constructors when using iPOJO components maybe?
0 投票
1 回答
171 浏览

osgi - iPOJO @Requires 为空

当我使用 iPOJO 和 @Requires 注释时,它不会注入到消费者中。

消费者:

提供者:

0 投票
1 回答
107 浏览

service - 获取 OSGI 参考的服务规范和服务过滤器

假设我有一个包含类 X 的 OSGI Bundle。假设这个类包含对特定服务的 OSGI 引用。像这样的东西:

有没有一种方法可以动态识别引用所连接的服务规范?有没有办法也识别服务过滤器(上面的第二个参数)?

例如,像这样:

我需要在包外的代码中找出这些值。

迄今为止完成的工作:

我使用 iPOJO 通过创建 bundle 的 iPOJO 组件实例来获取引用属性,然后获取其属性描述,如下所示:

我可以使用上面的方法获取引用名称、类型、值propertyDescription,但是该值作为对象返回,我无法得到我需要的东西。有人可以帮忙吗?谢谢。