首先是一些背景:
我正在开发一些基于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等)没有'干活了.
所以,我的问题如下:
抱歉这个相当长的问题.
任何反馈都非常感谢.
更新
范围注入:范围注入是一种有用的机制,可以自动注入特定生命周期中的对象.例如,您的一些代码依赖于作为servlet过滤器的一部分创建的Hibernate会话对象.通过标记依赖关系,容器将自动重建对象图.也许只有不同的方法呢?
JSR 330 vs DS:从你所有出色的答案中我看到这些是两个不同的东西.这提出了一个问题,如何处理在OSGI上下文中使用时使用JSR 330注释的第三方库和框架?什么是好方法?在Bundle中运行JSR 330容器?
我感谢您的所有答案,您一直非常乐于助人!
我们意外地将分支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 …
我是一个完整的新手,所以我提前道歉.我正在尝试创建一个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)