About

网名:BlueDavy

主要文档:《OSGi实战》、《OSGi进阶》

书:《OSGi原理与最佳实践》、《分布式Java应用:基础与实践》

目前在淘宝,关注互联网的相关技术,主要是高性能、高可用、可伸缩、高并发、低成本方面。

《About》有46个想法

  1. 你好,请问目前哪款OSGi框架比较成熟,在实际项目中应用最多,您推荐使用哪款呢?

  2. @subnet
    个人觉得还是用equinox吧,不过相对而言equinox也稍微有点重量级…felix比较轻量,也可以考虑,但felix有些地方实现是不遵循规范的。

  3. @bluedavy
    谢谢,能说下您不推荐spring-dm的原因吗?因为我在书中看到,似乎您们对spring-dm介绍的篇幅相对较多,我还以为您会推荐它呢.再次感谢.

    1. 我对spring-dm其实算不上多了解,只能说我当时的评估是因为spring-dm相对而言还是较为重量级,牵扯到很多东西,因此我们不选择它,但对于本来就要使用spring很多特性的应用而言,也许spring-dm是更好的选择。

  4. 你好,看了你的书在目前的项目中要上osgi,但有个问题是maven+eclipse+osgi的问题。网上搜到有一篇环境搭建的文章,貌似是唯一文章讲怎么解决maven的打包与import-package等问题,屡试之下还是不成功。不知你能否给我一个你那边pom的样例?多谢了!

  5. @sunphy
    我blogjava上那个blog有写过一次我们现在这边项目的搭建方法,基本来说,还是比较麻烦的,import-package我们是在eclipse里直接修改MANIFEST.MF,同时上传这个文件到SVN,对于需要打到bundle里的jar直接依赖,对于不需要打到bundle里的则配置为provided。

  6. 谢谢回复!你说得是这篇文章吧?http://www.blogjava.net/BlueDavy/archive/2009/03/05/257966.html 我试了你说的一些方式,貌似还是不对,已经折腾了好几天了,挺郁闷。所以我不知道是不是我的pom根本配得不对,看你那边有没有pom样例片段一类的东西,如果方便的话

  7. 您好,bluedavy,我买了您最近的两本图书,
    其中,在《OSGI原理与最佳实践》一书中,第三章,使用Spring DM实现,petStore,
    我加入了所需要的bundle,运行之后,控制台报:
    2010-7-6 16:33:17 org.springframework.osgi.extender.internal.support.DefaultOsgiBundleApplicationContextListener onOsgiApplicationEvent
    严重: Application context refresh failed (OsgiBundleXmlApplicationContext(bundle=Bootstrap, config=osgibundle:/META-INF/spring/*.xml))
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘webConfigMgr’: Initialization of bean failed;
    Caused by: java.lang.ClassNotFoundException: org.osgichina.petstore.util.WebConfigMgr not found from bundle [Bootstrap]
    java.lang.ClassNotFoundException: org.osgichina.petstore.util.WebConfigMgr

    找了一下,也找不到哪里出错,急需要您的帮助,不知道您邮箱,故只能在您博客里留言了

  8. bluedavy,您好,其中,在《OSGI原理与最佳实践》一书中,第三章,使用Spring DM实现petStore,我在SpringIDE插件里找不到bundle.spring,是不是因为我的插件是针对Spring 3.0的缘故,如果是的话,该怎么解决?

  9. 你好~买了你的java分布式应用,里面没有关于分布式事务的,请问下 JAVA分布式事务有了解吗?请指点一二~~

  10. 您好,OSGI中国用户组如何加入,刚刚接触OSGI,希望能在以后的产品中得到应用

  11. 公司从去年就开始研究OSGi在企业级应用的中的应用,主要是对Spring-DM进行了扩展,也拜读了您的大作《OSGi原理与最佳实践》。目前在把应用部署到Weblogic环境下时,遇到了一个大问题,想向你请教下:
    我们采用的OSGi in Servlet Container这种方式,Weblogic的Seesion有一种机制,就是会对Session中的对象进行序列化和反序列化,在这个过程中,Weblogic需要加载被序列化的对象的Class,这个Class是在OSGi环境中的一个Bundle中的。现在的问题是Weblogic 环境下的应用的ClassLoader是OSGi中Bundle 的ClassLoader的父类加载器,作为父类加载器是看不到具体Bundle中的类。

    异常堆栈如下:
    #### <> <Could not deserialize session data.
    java.lang.ClassNotFoundException: org.mycompany.user.UserInfoImpl: This error could indicate that a component was deployed on a cluster member but not other members of that cluster. Make sure that any component deployed on a server that is part of a cluster is also deployed on all other members of that cluster
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:203)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:119)
    at weblogic.j2ee.ApplicationManager.loadClass(ApplicationManager.java:76)
    at weblogic.common.internal.WLObjectInputStream.resolveClass(WLObjectInputStream.java:61)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    at weblogic.common.internal.PassivationUtils.toObject(PassivationUtils.java:54)
    at weblogic.common.internal.PassivationUtils.toObject(PassivationUtils.java:46)
    at weblogic.common.internal.PassivationUtils.copy(PassivationUtils.java:64)
    at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:100)
    at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper.java:44)
    at weblogic.servlet.internal.session.SessionData.removeAttribute(SessionData.java:602)
    at weblogic.servlet.internal.session.SessionData.removeAttribute(SessionData.java:586)
    at weblogic.servlet.internal.session.SessionData.remove(SessionData.java:834)
    at weblogic.servlet.internal.session.MemorySessionContext.invalidateSession(MemorySessionContext.java:69)
    at weblogic.servlet.internal.session.SessionData.invalidate(SessionData.java:743)
    at weblogic.servlet.internal.session.SessionData.isValidForceCheck(SessionData.java:807)
    at weblogic.servlet.internal.session.MemorySessionContext.getSessionInternal(MemorySessionContext.java:56)
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getValidSession(ServletRequestImpl.java:2521)
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSessionInternal(ServletRequestImpl.java:2090)
    at weblogic.servlet.internal.ServletRequestImpl$SessionHelper.getSession(ServletRequestImpl.java:2057)
    at weblogic.servlet.internal.ServletRequestImpl.getSession(ServletRequestImpl.java:1189)
    at weblogic.servlet.security.internal.SecurityModule$SessionRetrievalAction.run(SecurityModule.java:535)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.security.internal.SecurityModule.getUserSession(SecurityModule.java:426)
    at weblogic.servlet.security.internal.ServletSecurityManager.checkAccess(ServletSecurityManager.java:81)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1920)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    简单来说,就是基于OSGi或者Spring-DM的应用,在Weblogic单机环境下,对Session中对象进行序列化和反序列化时,或者在Weblogic环境下进行Session的复制时,都存在这种类找不到的问题。这个问题在Weblogic的官网上也有提到http://cn.forums.oracle.com/forums/thread.jspa?threadID=1057501,不知道在你的具体工作中有没有遇到类似的问题,或者你您对这个问题有没有什么好的建议。

  12. 你好,林昊 久仰你大名 我是浙工大大三的,希望以后能多写一些关于淘宝的技术开发的流程 以及 需要用到的技术,这样 以后去淘宝面试或者工作也能更加得心应手。

  13. 嗨,毕玄:你的博客是不是从www.blogjava.net/BlueDavy/转移到这里了?另外www.osgi.org.cn怎么打不开了呢?谢谢!

  14. 林老师,您好,请问OSGi框架中,bundle是不是没有办法引用第三方包?OSGi容器外与bundle进行交互是不是与框架有关,不同框架不一样?打扰您于万忙之中,还忘不吝时间指点一二,谢谢。

  15. BlueDavy,你好,我从2008年开始研究OSGi R4规范,入门也是看了你的那两个OpenDoc,非常感谢。使用OSGi,是因为我想构建能够灵活组合的应用系统,由于我不擅长Java,我就将OSGi规范移植到.NET平台并实现,这个OSGi.NET平台起名为尤埃开放服务平台(XAUI Open Service Platform,UIOSP),使其能够完全兼容于控制台、桌面、Web和移动设备等应用环境,目前已经完全达到预期目标。我对Java不专业,这两天拜读你的OSGi的书,我想问一下,你觉得OSGi在Web上的应用是否成熟?以你开发经验,使用OSGi开发Web应用是否复杂?我正在考虑把我能够灵活组合的应用系统移植到Equinox上,因为有很多人不喜欢.NET(可能你就不太喜欢,:))。不过,我老觉得OSGi和Web的兼容性还是不够好,你觉得呢?谢谢。

    1. OSGi在web的支持上确实做的不怎么好,所以在web系统上我倒不是很推荐,但如果觉得带来的好处大过付出的成本的话,可以考虑把struts和felix整合整合。

  16. 对了,看了你的书,有一点点想法想Share一下,我认为OSGi具有两大特性和三大功能。两大特性是模块化(物理隔离、完全重用)和动态化(面向服务、扩展、生命周期),三大功能是插件化、面向服务和插件扩展(安全先放一下)。因此,如果你的书籍能够按照这三大功能来组织并且分类的进行举例描述,再来一个综合示例,估计能让更多的人更容易的来理解OSGi。此外,我认为基于OSGi的体系结构是一种“横向切割 + 纵向分层”的方法,相比分层,来的更加的灵活并符合实际需求。横向切割意味着对功能进行模块化划分,纵向分层意味着对功能的层次分割,而功能间则是基于服务的依赖,这种依赖是可管理和可替换的。这仅是个人的一点点想法,如果有误还请多指教。

    1. @LorryChen
      你对OSGi的这个总计很到位了,主要原因是我自己现在在工作中用的比较少,再接上对OSGi部分接触也不是那么多了,所以不太敢继续写这方面的东西,:),我觉得你的实践还是比较多的,可以给大家多分享分享。

  17. @bluedavy
    多谢建议。我分享了些OSGi.NET的资料(http://www.cnblogs.com/baihmpgy),现在也在考虑整理一些资料,从而能让更多的人来使用。从现有的经验来看,我觉得在Web上使用OSGi.NET是非常简单。

  18. 想请问一下淘宝网现在做分布式应用 是采用的网上的开源框架 比如mina等 还是自己公司写的一套架构

  19. @bluedavy
    你好,在拜读你完你的两本书后,自己尝试移植了ssh2到osgi下。
    但个人很困惑,osgi真的适用于企业级或者大型网站的开发吗?
    很想知道taobao内部是否真的大面积切换到基于osgi容器的开发与部署?

    因为我实在找不到公司以及可以参考的项目。所以很想知道taobao是不是都是用osgi容器的 ,谢谢。

  20. 林老师,你好,最近我在公司做服务化相关的工作,之前也久仰林老师大名。目前碰到一个服务化对事务的支持的难题,想请教一下林老师在这个事务支持上是如何实现的,谢谢

    1. 不好意思,在我们的服务中目前没有事务的支持,如果需要做的话,会采用比较轻量的分布式事务的方案。

  21. 你好,我看了你的书,试了一下osgi,现在在eclipse下应用第三方包是可以正常运行的,但是如果将osgi单独在linux或windows下运行带有第三方包的bundle就不能运行,请问是否可以提点一下,如何解决这方面的问题,谢谢

  22. hi Bluedavy:
    您好,正在入门osgi,下载了您的实战和进阶的pdf,但是发现进阶的代码到处也找不到了,请问现在哪里能下载进阶部分的code?十分想参考一下。

  23. I read your OSGi book. It’s cool. It encourages me to give it a shot by myself. I am thinking of translating a technical book into Chinese. But I don’t have any experience. So I am wondering if it is possible for you to share with me your experience. I have left my email. If you see my message, would you please send me an email?

  24. 林昊:
    您好!您的大作《OSGi原理与最佳实践》、《分布式Javay应用 基础与实践》我已经开始拜读,但有一些问题还没弄明白,需要向您请教。我们是一家做互联网安全软件的公司,现在公司的架构想加入OSGi技术,但因为我们的软件产品基本上是要实现基于RMI的分布式应用,想请问,Apache CXF是否已经满足这方面的要求?其次,我们的系统好多功能是要求提供实时服务,对性能的要求较大,您看OSGi对实时系统的支持是否足够?暂时就这两个问题。希望您能在百帮之中抽时间帮助解答。不胜感激。

    祝 身体健康 工作顺利

    李钢 研发部
    北京傲盾软件有限责任公司
    手机:150 1126 6971
    电话:010-82728052
    QQ:2532502600(工作)
    传真:010-82728052-835
    邮箱:ligang@aodun.com.cn
    网址:http://www.aodun.com.cn/
    邮编:100085
    地址:北京海淀区上地东路9号得实大厦5层南区

  25. 你好:
    我在spring DM中遇到了一些问题。望指教。
    我的工程是通过m2e插件构建的,然后在再由maven工程转成插件项目,工程需要的jar包通过pom文件都已经获得,在非osgi模式下一切都是正常。当我使用spring osgi后,META-INF/spring目录下配置的bean,运行的时候就会出现找不到相关类的错误。我通过两种方式来解决:
    1.新建一个公共插件项目A,将第三方包都放到A工程,并导出所有包,然后让其他osgi项目引用这个项目A或导入其中的包路径.

    2.直接将第三方包放到当前osgi项目,在runtime选项卡中添加第三方包。

    结果:

    1.有些类的确是可以被导入。

    2.也有些例外,比如和Hibernate,ehcache整合,一直报找不到与Hibernate或ehcache相关的类。

    其他:

    以前我在做RCP的插件开发的时候也遇到过类似的类加载和Spring,Hibernate整合的问题,RCP下一般直接依赖插件,很少会通过import 包路径的方式导入其他插件的类,但是在spring osgi的开发中这样做却有很多问题。包括类找不到,spring名称空间解析找不到(即便把spring.handlers、spring.schemas复制到META-INF也是如此),但是在开发RCP系统的时候这些问题都可以解决。plugin开发虽然也比较麻烦,但Eclipse RCP版本的IDE还是提供了很好的调试,运行环境。web的osgi开发相对就没有那么方便。

    请教是什么原因引起的。望回复,感谢。

    1. @ljava
      我对spring dm不怎么熟,不过看起来应该还是找类的问题,建议debug下equinox部分的代码,看看加载类是在哪里出了问题,通常只要export了package的,再import后应该是不会有问题的。

  26. 你好,我也是从开发转到了运维。我想请教一下,在ip经常切换、主机名需保持一致的环境如何做到自动扩容,谢谢

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*