问题标签 [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.
java - iPOJO 组件已实例化,但没有可见输出
我有 2 个 iPOJO 组件。
1- 提供“Hello”服务的 Provider 包。下面是组件的实现:
2- 使用 HelloService 对象的消费者捆绑包如下:
在一个单独的 Java 应用程序中,我加载这两个包并在 Apache Felix 上启动它们,如下所示:
以上所有工作正常。
现在,我想动态地实例化这两个组件,并观察捆绑消费者对捆绑提供者服务的消费情况。我使用了实例声明,如下:
运行应用程序时没有错误。但是,我看不到服务提供者和消费者的 start() 方法中存在的“Hello”消息。我什么都看不到。这意味着组件没有正确实例化。我哪里做错了?谢谢。
更新
我发现我没有在我的包上应用 iPOJO 操作,所以我使用 iPOJO Ant Task 进行了操作,如下所示:
现在,我可以在我的应用程序中看到工厂是有效的。这是命令中的输出:
因此,与以前不同,工厂“my-factory”可用。
但是,我的实例不可用,其创建如下:
同样,这不会显示错误,但不会在包的 start() 方法中显示预期的输出,并且在命令中,我可以看到:
你能帮忙吗?谢谢。
java - org.apache.felix.ipojo.ComponentFactory 不能转换为 org.apache.felix.ipojo.Factory
我有一个捆绑组件,
在我的 Java 应用程序中,我嵌入了 Apache Felix,并部署了 iPOJO API。然后,我尝试使用工厂服务创建上述组件的实例,如下所示:
我成功获得了对工厂服务的引用,但在以下行:
我得到以下 ClassCastException:
我将此行更改为:
然后我得到:
我该如何解决我的问题?谢谢你。
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.
。除了在我的捆绑包中,我在其他任何地方都没有那个库。
你能帮忙吗?谢谢。
java - 如何获取 iPOJO 组件实例配置?
我有一个像这样创建的 iPOJO 组件实例:
在我上面实例化的组件中,我怎样才能获得字典“dic”值?
可能是这样的吗?
或者是:
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”组件服务时,到达发生错误的行,如下所示:
我在不同的资源中读到,当您在类路径中有重复的库时,可能会导致这种情况。但我确信事实并非如此。可能是什么原因?
osgi - iPOJO Composite 中的隔离是如何工作的?
iPOJO 提供了一种机制来创建包含原始类型组件实例的组合。我有兴趣了解 iPOJO 为组合子实例提供的服务提供隔离以防止从组合外部访问的机制。
例如,假设我有以下组成(使用 iPOJO API):
假设组件“prov”实现了一个名为HelloService
. 这个服务被隔离是什么意思?
这是否意味着如果我尝试通过服务引用从外部包(不是组合的一部分)访问服务:
这个引用真的会失败,因为它的范围在组合之外吗?
如果组合内的组件包含对在组合外发布的服务的引用怎么办?这个引用也会失败吗?
注意:我目前对进口或出口服务不感兴趣。
osgi - 使用 iPOJO API 显示“无法创建 POJO 实例,找不到 POJO 构造函数”
iPOJO API 处理起来似乎很复杂,尤其是在嵌入 OSGI 框架时。通过将 API 编码行保留在 OSGI 包中完成类加载器问题后,我在这里遇到了一个新的不同问题:
在我的捆绑启动方法中,我有以下代码:
InstanceFactoryImpl
类与以下在同一个包中:
当我在我的 java 应用程序中将我的包加载到 Felix 框架时,我收到以下错误:
我在以下行收到错误:
我试图显式定义一个构造函数,并添加一个名为“init”的方法。这一切都失败了,同样的错误不断出现。我该怎么办?谢谢?
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.
- How are you supposed to accomplish this (framework injection + argument passing in the constructor)?
- 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
- Are you just not supposed to use constructors when using iPOJO components maybe?
osgi - iPOJO @Requires 为空
当我使用 iPOJO 和 @Requires 注释时,它不会注入到消费者中。
消费者:
提供者:
service - 获取 OSGI 参考的服务规范和服务过滤器
假设我有一个包含类 X 的 OSGI Bundle。假设这个类包含对特定服务的 OSGI 引用。像这样的东西:
有没有一种方法可以动态识别引用所连接的服务规范?有没有办法也识别服务过滤器(上面的第二个参数)?
例如,像这样:
我需要在包外的代码中找出这些值。
迄今为止完成的工作:
我使用 iPOJO 通过创建 bundle 的 iPOJO 组件实例来获取引用属性,然后获取其属性描述,如下所示:
我可以使用上面的方法获取引用名称、类型、值propertyDescription
,但是该值作为对象返回,我无法得到我需要的东西。有人可以帮忙吗?谢谢。