小编ili*_*ans的帖子

OSGI环境中的依赖注入

首先是一些背景:

我正在开发一些基于Apache Sling的 webapp原型代码,它基于OSGI并在Apache Felix上运行.尽管我认为我现在已经掌握了大部分概念,但我对OSGI仍然相对较新.然而,令我困惑的是,我无法找到"完整"依赖注入(DI)框架.我使用声明服务(DS)成功地使用了基本的DI.但我的理解是DS用于引用 - 我该怎么说呢? - OSGI将注册的服务和组件放在一起.为此,它工作正常,但我个人使用像Guice这样的DI框架将整个对象图连接在一起,并将对象放在正确的范围内(想想@RequestScoped或者@SessionScoped例如).但是,我所看到的OSGI特定框架似乎都没有支持这个概念.

我开始阅读有关OSGI蓝图iPOJO的内容,但这些框架似乎更关注将OSGI服务连接在一起,而不是提供完整的DI解决方案.我不得不承认我还没有做任何样品,所以我的印象可能不正确.

作为Guice的扩展,我已经尝试了Peaberry,但是我发现文档很难找到,而且当我得到基本的DI工作时,很多guice-servlet的高级功能(自动注入过滤器,servlet等)没有'干活了.

所以,我的问题如下:

  1. 声明式服务如何与Guice或Spring等"传统"DI相比较?他们是解决同样的问题还是针对不同的问题?
  2. 到目前为止,我见过的所有OSGI特定解决方案都缺乏DI的范围概念.例如,Guice + guice-servlet具有请求范围依赖性,这使得编写Web应用程序非常简洁.我是否只是错过了文档中的内容,或者这些框架中没有涵盖这些问题?
  3. JSR 330和OSGi基于DI两个不同的世界?例如,iPOJO带来了自己的注释,Felix SCR Annotations似乎是一个完全不同的世界.
  4. 有没有人有建立基于OSGI的系统和DI的经验?甚至可能在github上有一些示例代码?
  5. 有没有人像Guice和iPOJO一样使用不同的技术,还是只是一个疯狂的想法?

抱歉这个相当长的问题.

任何反馈都非常感谢.


更新

范围注入:范围注入是一种有用的机制,可以自动注入特定生命周期中的对象.例如,您的一些代码依赖于作为servlet过滤器的一部分创建的Hibernate会话对象.通过标记依赖关系,容器将自动重建对象图.也许只有不同的方法呢?

JSR 330 vs DS:从你所有出色的答案中我看到这些是两个不同的东西.这提出了一个问题,如何处理在OSGI上下文中使用时使用JSR 330注释的第三方库和框架?什么是好方法?在Bundle中运行JSR 330容器?

我感谢您的所有答案,您一直非常乐于助人!

java osgi dependency-injection guice apache-felix

36
推荐指数
2
解决办法
2万
查看次数

合并实际完成时,Git恢复合并提交会导致问题.

我们意外地将分支XYZ合并到DEV中并将其推送到原始仓库.这是使用--no-ff完成的,以创建单独的合并提交.一旦我意识到错误的合并,我做了一个git revert来创建一个恢复提交并将其推出.一切都很好,有很多欢乐......

直到我们试图将XYZ合并到开发中.最初的混淆是由于在合并的dev分支上找不到添加到XYZ的大量文件.然后我意识到DEV分支具有恢复提交,该恢复提交删除了由于合并而添加到XYZ以及随后到DEV的所有文件.

这是简化的事件链:

$ git checkout dev
$ git branch xyz
$ git checkout xyz
$ git add files/foo.xyz
$ git commit -m "blargh"
Run Code Online (Sandbox Code Playgroud)

在这里意外合并发生:

$ git checkout dev
$ git merged xyz
$ git push origin dev
Run Code Online (Sandbox Code Playgroud)

这是我试图挽救这一天:

$ git revert <SHA>
$ git push
Run Code Online (Sandbox Code Playgroud)

恢复提交到位,每个人都很开心

... more work happens ...
Run Code Online (Sandbox Code Playgroud)

那么,现在终于合并xyz了:

$ git checkout xyz
$ ls files/foo.xyz
files/foo.xyz
$ git checkout dev
$ git merge xyz
$ ls files/foo.xyz
File not found
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

a)什么是回滚提交的好方法,特别是如果它们被推送到其他回购?git revert似乎是正确的做法,但在合并问题之后,我不再那么肯定......

b)假设git …

git

12
推荐指数
1
解决办法
3923
查看次数

OSGi组件可通过Apache Felix进行配置

我是一个完整的新手,所以我提前道歉.我正在尝试创建一个OSGi组件,它只显示一个hello world消息,并且可以通过felix的输入进行配置.然后在jsp页面上吐出来.我正在使用scr注释来帮助完成此操作.这是我的java代码

package com.training.cq5.trainingApp;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.apache.sling.commons.osgi.PropertiesUtil;

@Component(label= "Welcome Message",
        description = "Welcome Message for the training excercise",
        immediate = true, enabled = true, metatype=true)
@Properties({
    @Property(name = "welcome.message", value = "WelcomeMessage")
})
@Service(WelcomeMessage.class)
public class WelcomeMessage {

    private static String welcome_message = "Welcome";

    @Activate
    protected void activate(ComponentContext ctx) {
        welcome_message = PropertiesUtil.toString(ctx.getProperties().get(welcome_message), welcome_message);
    }

    public static String getMessage() { 
        return welcome_message;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我在JSP中调用它:

<%@ page …
Run Code Online (Sandbox Code Playgroud)

java osgi maven apache-felix sling

3
推荐指数
1
解决办法
5368
查看次数

标签 统计

apache-felix ×2

java ×2

osgi ×2

dependency-injection ×1

git ×1

guice ×1

maven ×1

sling ×1