我有四个捆绑包,每个捆绑包只包含一个清单.捆绑是
app哪个进口com.example.foo.fragment和com.example.barfoo 哪个出口 com.example.foo;uses:=com.example.foo.cfgfoo.fragment其连接到片段foo的是出口com.example.foo.fragment和com.example.foo.fragment.cfg;uses:=com.example.foo.fragmentbar哪些出口com.example.bar和进口com.example.foo捆绑级依赖图:
app -> bar
| |
| v
| foo
| |
v v
foo.fragment
Run Code Online (Sandbox Code Playgroud)
当我在JBoss AS 7.2中同时安装这些软件包时,它们工作得很好.但是,如果我在其他人之后安装app捆绑包,无论是第一次还是成功启动后再卸载它,都会发生以下使用约束违规:
Caused by: org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve resource com.example.app [HostBundleRevision[com.example.app:0.0.
0]] because it is exposed to package 'com.example.foo.fragment' from resources com.example.foo [HostBundleRevision[com.example.foo:0.0.0]] and com.example.foo [HostBund
leRevision[com.example.foo:0.0.0]] via two dependency chains.
Chain 1:
com.example.app [HostBundleRevision[com.example.app:0.0.0]] …Run Code Online (Sandbox Code Playgroud) Apache Karaf是Apache Felix的子项目.它被定义为"轻量级OSGi容器".
我不明白我何时应该使用重量级以及何时使用轻量级.他们的网站没有解释太多.
我需要读取Manifest传递我的课程的文件,但是当我使用时:
getClass().getClassLoader().getResources(...)
Run Code Online (Sandbox Code Playgroud)
我MANIFEST从第一次.jar加载到Java Runtime.
我的应用程序将从小程序或webstart运行,
因此.jar我猜我无法访问自己的文件.
我实际上想要读取启动Felix OSGi 的Export-package属性.jar,所以我可以将这些包暴露给Felix.有任何想法吗?
我对Apache Karaf究竟是什么感到有些困惑.
你能否说Apache Karaf包含以下内容:
它就在那里,在它应该索引的包中.我还是打电话的时候
JAXBContext jc = JAXBContext.newInstance("my.package.name");
Run Code Online (Sandbox Code Playgroud)
我得到一个JAXBException说
"my.package.name"不包含ObjectFactory.class或jaxb.index
虽然它确实包含两者.
什么工作,但不是我想要的,是
JAXBContext jc = JAXBContext.newInstance(my.package.name.SomeClass.class);
Run Code Online (Sandbox Code Playgroud)
来自其他人的这个问题出现在一些邮件列表和论坛上,但似乎没有得到答案.
我在OpenJDK 6上运行它,所以我获得了源包并将调试器放入库中.它首先查找jaxb.properties,然后查找系统属性并且无法找到,它尝试使用com.sun.internal.xml.bind.v2.ContextFactory创建默认上下文.在那里,异常被抛出(内部ContextFactor.createContext(String ClassLoader, Map)),但我看不到发生了什么,因为源不在这里.
ETA:
从ContentFactory的源代码判断,我在这里发现,这可能是那些无法按预期工作的代码:
/**
* Look for jaxb.index file in the specified package and load it's contents
*
* @param pkg package name to search in
* @param classLoader ClassLoader to search in
* @return a List of Class objects to load, null if there weren't any
* @throws IOException if there is an error reading the index …Run Code Online (Sandbox Code Playgroud) 如何在Scala中编写我的包,然后将其部署到OSGI容器中?
我首先将它编译成"java"还是可以直接将scala部署到OSGI中并使用某种捆绑来识别它?
任何指针都会很棒.目前我使用Apache Felix作为我的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等)没有'干活了.
所以,我的问题如下:
抱歉这个相当长的问题.
任何反馈都非常感谢.
更新
范围注入:范围注入是一种有用的机制,可以自动注入特定生命周期中的对象.例如,您的一些代码依赖于作为servlet过滤器的一部分创建的Hibernate会话对象.通过标记依赖关系,容器将自动重建对象图.也许只有不同的方法呢?
JSR 330 vs DS:从你所有出色的答案中我看到这些是两个不同的东西.这提出了一个问题,如何处理在OSGI上下文中使用时使用JSR 330注释的第三方库和框架?什么是好方法?在Bundle中运行JSR 330容器?
我感谢您的所有答案,您一直非常乐于助人!
我是整个Java和OSGi世界的新手,我无法理解OSGi Web应用程序的生态系统.
更确切地说,我目前正试图了解生态系统的所有部分是如何相互关联的:
为了让您直观地了解我对他们的关系的实际理解,请查看此图片:
alt text http://img253.imageshack.us/img253/1631/osgiwebenvironmentschem.png
据我所知,OSGi框架是OSGi规范的一个实现.运行时是一种分发,它在OSGi规范之上添加了额外的功能,例如日志记录.由于OSGi和Web容器(如Tomcat)的类路径机制似乎存在一些差异,因此您需要某种翻译器.这部分由"Web Extender"处理.
请你澄清一下这件事吗?我理解一切正确吗?
我在这里问一个非常基本的问题.
问题是
我正在我的项目中使用Apache Sling,Apache Jackrabbit,Apache Felix.我试图理解为什么这些软件是由Apache开发的.我在互联网上尝试了很多,但我没有找到任何博客或wordpress博客,或任何有用的youtube视频解释所有这些项目.你能解释一下这些项目吗?
Why these projects developed?
What they do ?
and more questions like this
Run Code Online (Sandbox Code Playgroud)
以前我发现Apache Hadoop也有同样的疑问,但我在网上找到的所有资料都足以让我了解这个项目.这次我和Sling,Felix,Jackrabbit一起挣扎.
我将非常感谢你.等待你的回应.
我有关于OSGi内存管理的理论问题.
假设我们有一些OSGi容器(例如Felix),让我们假设我创建了一些内存泄漏的包.
以下是我的一些问题:
apache-felix ×10
osgi ×9
java ×4
apache-karaf ×2
equinox ×2
apache ×1
aries ×1
guice ×1
jackrabbit ×1
jaxb ×1
jboss7.x ×1
manifest.mf ×1
open-source ×1
scala ×1
sling ×1
tomcat ×1