总结了一下:
1、把第三方包的class文件改造为一个bundle,export所有的package
2、使用了eclipse的equinox实现启动所有bundle
3、在eclipse环境下启动都正常,但是放在命令行(windows/linux都一样)启动,都失败,即出现:
Exception in thread 'Thread-1' java.lang.NoClassDefFoundError: javax/naming/NamingException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.class$(SqlMapConfigParser.java
4、经过比较两者的运行环境,发现关键差别在于java.syspath和osgi launcher不同,但是也无法改变。
5、经过javaeye和osgi china groups的搜索,发现了一个国外的帖子(共享一下):
Option 1: "DynamicImport-Package: *" to the manifest of your bundle. This is one possible pure OSGi solution and should do what you want.
Option 2: If you are using Equinox as OSGi implementation you could also take a look at the Buddy-Loading mechanism:
http://help.eclipse.org/help33/t ... /buddy_loading.html
6、解决方法总结:在第三方包的class加载其他的类,而这些类又不在当前的bundle,可能出现这个异常,只要在Manifest.mf文件加入DynamicImport-Package: *,或者使用eclipse的buddy loading机制(还没有试验)可以解决问题。
总之,osgi的好处很多,但是缺点(不方便的地方)也很明显,就是classpath(classloader)机制,正因为如此,我才放弃了spring。但是spring+osgi是大势所趋,两者的DI很相似,OSGI的DS用起来非常像spring的配置文件。等有空研究一下两者的结合。
分享到:
相关推荐
3. **使用Spring DM (Dependency Manager)**:Spring DM是Spring针对OSGi环境的一个扩展,它可以更好地集成OSGi服务和Spring容器。通过Spring DM,你可以像在非OSGi环境中一样配置事务管理。 4. **注意类加载器的...
3. 在Eclipse中建立开发环境。需要设置Target Platform,这可以通过Eclipse的窗口首选项(Window -> Preferences)来实现。设置后,需要重启Eclipse,并在运行配置(Run Configurations)中指定OSGi Framework为...
3. **环境搭建**:包括安装和配置OSGi运行时环境(如Equinox或Felix),以及添加Gemini Blueprint相关的库和依赖。 4. **服务组件定义**:描述如何使用XML或注解定义Blueprint服务组件,包括服务接口、实现类和元...
为了解决这个问题,OSGi引入了模块化概念,每个模块(称为bundle)都有自己的类加载器,可以在同一环境中并行运行不同版本的库。 在"myself"工程中,我们创建了两个不同版本的“myself”jar包。每个jar包都包含了...
这篇博文“OSGI错误分析解决”可能探讨了在开发或部署OSGI应用时遇到的问题及其解决方案。 首先,OSGI的核心概念是Bundle,每个Bundle都是一个独立的代码单元,包含类、资源和元数据,类似于Java中的JAR文件。...
9. `org.springframework.osgi.core`:这是Spring OSGI的核心模块,包含了一些基础的OSGI服务和工具,用于在OSGI环境中操作和管理bundle。 在实际开发中,开发者会根据需求选择和配置这些模块,创建自己的OSGI ...
3. spring-osgi-io:提供I/O服务,如网络、文件系统访问等,适应OSGi的隔离环境。 4. 依赖库:包括了对Apache Felix或Equinox等OSGi容器的适配器,以及一些基础库,如log4j、commons-lang等。 综上所述,Spring ...
10. **实战应用**:学习如何在实际项目中应用OSGISpring,如构建分布式系统、微服务架构等,了解如何解决实际遇到的问题。 为了深入了解OSGI与Spring的整合,阅读"OSGI入门和整合Spring.pdf"文档将是十分有价值的。...
3. **OSGi与Hibernate集成的动机**:讨论为何要在OSGi环境中使用Hibernate,可能是为了实现更灵活的模块化开发,或者解决传统Java应用中类加载器和依赖管理的问题。 4. **集成步骤**:详细步骤可能包括: - 创建...
7. **案例研究**:分析实际项目中的OSGI应用,展示其在解决特定问题上的效果。 通过这两本书的学习,读者不仅能掌握OSGI的基本操作,还能深入理解其背后的原理,从而在实践中更好地运用OSGI技术,提升软件开发的...
总的来说,解决`java.lang.NoClassDefFoundError`需要仔细检查项目结构、依赖管理以及运行环境的配置,确保所有组件都协同工作,类加载机制正常。对于Spring和OSGi环境,理解其特有的类加载规则至关重要。
在本示例中,我们将探讨如何在OSGi环境下配置Jetty 9.3.10,创建一个注册Servlet的工程,并进行Jetty的性能优化。 首先,我们需要准备OSGi运行时环境。常见的OSGi容器有Apache Felix、Equinox等。这里我们选择一个...