- 浏览: 585652 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (188)
- java (14)
- web (14)
- web service (3)
- 杂谈 (14)
- Version Control (13)
- software test (30)
- linux (17)
- database (3)
- distributed storage and computing (1)
- ejb (7)
- project building (46)
- spring & IOC (2)
- Thread (2)
- xml (2)
- tool software (0)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- project manager (9)
- OSGI (1)
- nosql (3)
最新评论
-
sp42:
好搞笑
你懂不懂xml! (2) -
cherishmmo2004:
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用k ...
基于osgi开发大型的企业应用 -
liubey:
“自作聪明”的使用了读写锁,其实只使用ReentrantLoc ...
编码最佳实践(4)--小心LinkedHashMap的get()方法 -
liubey:
你这个代码是sublist后仍然一直持有这个sub的引用,一般 ...
编码最佳实践(5)--小心!这只是冰山一角 -
xiegqooo:
初学maven(5)-使用assembly plugin实现自定义打包
前端时间认真的学习了一下osgi相关的知识,个人感觉是非常的不错。
但是看了一下目前osgi的时候,几个成功案例都是基于osgi开发ide,比如eclipse之类。还没有看到用于企业应用的成功案例,是osgi不适合开发企业应用?还是说,目前没有人这样开始使用osgi?或者只是我孤陋寡闻,其实大家已经用开了?
顺便说明一下为什么有这种的疑问,这个要冲java开发application的方式说起,我接触过的无非是两种:
1. 简单的j2se的application
就是自己写代码,编译打包,然后写一个命令行脚本或者shell,通过java 和main class启动java进程,里面爱干嘛干嘛。
好处是简单,小巧,灵活,没有额外的负载。缺点嘛,没有模块化的支持,想安装,卸载,启动,停止,更新其中部分功能时,完全没辙,只能整个退出,更新之后重启启动。不过对于小程序倒不是问题,大型系统就不大可能了。
这个是轻量级的解决方法。
2. 大而全的app server
这个就是标准的j2ee,weblogic,glassfish,jboss之类的都是了,提供标准的j2ee容器,完整的j2ee支持,诸如ejb之类,总之什么都有了。自己写代码,打包为app,通过ear,war等方式发布,对其中的任何一个app,安装,卸载,启动,停止都是可以通过控制台搞定的。
很强大,但是很“重“,非常的重,像我在的团队,目前开发的东东,启动起来什么不跑就吃了1g内存......
这个方案会带来一个问题,当模块被打包在不同ear中时,无法使用java的方法调用,只能通过ejb,或者自己开端口等方式进行远程调用。效率方面不好,而且感觉也挺傻的:同一个机器同一个进程,彼此直接访问还要走远程......在weblogic上可以通过将功能模块打包在同一个ear中,开启 ejb的local call优化为本地访问,但是限制是只能在一个ear中,这又破坏了模块化。
从个人爱好和经历来说,我喜欢第一种方式的轻巧,比较讨厌2的笨重。但是1的缺点也很明显,当程序大到一定程度,功能模块越来越多的情况下,就不适用了。上面的例子,那个启动就吃1g内存的家伙,它的java project现在都超过200个了,可以想象有多大吗?如果用1的方式来开发,根本不可能啊。
再有就是个人审美观的问题,我这个人生性比较反感庞大而复杂的东西,可以说j2ee 容器/ejb(尤其是ejb3.0以前)是完全违背我的美感的,虽然我现在靠这个吃饭,恩,似乎有点偏激......
所以现在想看看有没有第三条路可以走(恩,当然工作方面2是肯定无法避免的了),我自己现在想到解决方案就是基于osgi,将不同的功能模块划分为不同的 bundle(当然可以继续按照service细分)。这就避免了1原有的最大不足:无法划分模块来适用和管理,同时也绕开了app server这个大块头。
稍后准备按照这个思路来开发一个application来练练手,试试可行性如何。比较看好这个思路的前景,但是目前没有信心,呵呵,主要是没有看到类似的案例,不知道该怎么着手,更别提什么最佳实践之类的可供参考。
颇有摸石头过河的感觉,有朋友可以帮忙指点一二吗?网上可以找到的osgi的内容,基本都停留在简单介绍和高度评价上,没有找到实际的可供参考的东西。哪位同学如有osgi方面的知识请不吝赐教,不胜感激啊!
非常有诚意的希望能有人和我一起深入探讨这个话题,无论是赞成还是反对.
ps: 因为在标题中有“请教”的字眼,被自动转移到问答频道了。我想了一下,我发这个帖子的主要目的还是为了可以找人讨论,而不是一个简单的问答。因此厚颜将请教二字从标题中去除后再发贴一次,
不知道你们在Karaf基础上做了哪些改进,我们公司的Fuse ESB也是基于Karaf的,有空可以聊一聊。
我们重构了声明式服务,重构了日志服务,重构了热部署,定义了部署框架,现在可以部署war包,还可以随时扩展新的部署器、定义了协议处理器框架,定义了web容器框架同时集成了tomcat和jetty,并开发了dservice容器、集成opensso、集成数据源事物等等,下一步要重构karaf的内核
目前我们开源的只是微内核框架,以后会陆续开源所有的源码!
不知道你说的重构主要做了那方面的工作。
据我所知你上面提到的大部分功能 都是由karaf是通过pax-xxx 来实现的。
dservice容器、集成opensso、集成数据源事物, 这几个功能到是有点意思。
我现在有个问题就是如果Karaf升级了,你们的微内核框架需要做多大的修改才能使用新版本的Karaf.
呵呵,我们的重构更多的是功能上的,至于karaf内核,我们正准备重写它的内核
这样就不必依赖于它了,至于集成的jetty我们最初采用的的确是pax-web的,后来为了集成tomcat我们自己定一个了web容器框架,并重新集成了jetty,已经完全和pax-web无关了。
老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
对于热拔插的支持,我个人感觉在business bundle这个层面上比较有可能有需求,对于common bundle,似乎实际意义不大。
打个比方说,有一个短信网关之类的应用,在business层面上,增加,卸载或更新某个业务能力是可能的,比如对smpp sms模块的更新,增加一个rest方式的sms模块,这个热拔插请求是比较合理的。对于common层,我不大理解为什么需要热拔插?比如说从提供datasource的bundle,难道是从mysql数据库切换到oracle?我对这块的需求和背景不大了解,pufan同学能否简单的介绍一下你遇到的场景:在类似我图中的common bundle的功能模块中,需要实现热拔插。这可以帮助我理解,谢谢!
很常见的需求,举几个例子:
DB bundle:更换数据库连接池大小、更改连接参数
Log bundle:更改log级别
Cache bundle:停用或启用cache,甚至从本地cache无缝切换到远程cache。
等等
用osgi最大的思想转变就是活用service,要注意这个‘活’字,不但要面向接口设计,更要充分利用osgi框架的service依赖及查找特性进行whiteboard pattern设计,那时你就会发现开发速度达到甚至超越传统框架也并不是不无可能的了。
老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
对于热拔插的支持,我个人感觉在business bundle这个层面上比较有可能有需求,对于common bundle,似乎实际意义不大。
打个比方说,有一个短信网关之类的应用,在business层面上,增加,卸载或更新某个业务能力是可能的,比如对smpp sms模块的更新,增加一个rest方式的sms模块,这个热拔插请求是比较合理的。对于common层,我不大理解为什么需要热拔插?比如说从提供datasource的bundle,难道是从mysql数据库切换到oracle?我对这块的需求和背景不大了解,pufan同学能否简单的介绍一下你遇到的场景:在类似我图中的common bundle的功能模块中,需要实现热拔插。这可以帮助我理解,谢谢!
老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
恩,有点这个意思。在你那个图上再加一个Bundle,不暴露服务,只是对外export工具类一类的。
不好意思,下班了,跑了
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
bundle最少的原则,我也有这个倾向,不过没有你这么强烈。可能我还没有在实际的开发中正式使用,感触不够深刻,呵呵。
我目前的想法倾向于将service按照是否带有business含义划分为两种类型:有business内容的serive,比如说取一个用户资料,执行一个客户请求;没有business内容的service,主要是指内部实现,比如获取数据库datasource,一些公共的工具类或者工具模块。
后者理论上也可以不单独出来而是以类库的方式分别打包在不同的带business内容的service所在的bundle里面,但是这样就有重复的问题。因此对于一些比较重要而又被很多bundle使用的service,即使它不带business内容,也没有热拔插的要求,我还是倾向于将这个service提取为单独的bundle。
我的经历是这样,开始的时候,日志,数据库datasource等都是单独的bundle,对外提供服务,后来发现这样Bundle多的控制不住。
后来,日志,datasource等都提取到一个bundle中,做成及系统级组件,都是对外提供服务(业务无关的服务),另外有一部分做不成服务的,直接对外export了。
没有将所有其作为jar吧打在lib里。而是做为一起部署的一个bundle。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
bundle最少的原则,我也有这个倾向,不过没有你这么强烈。可能我还没有在实际的开发中正式使用,感触不够深刻,呵呵。
我目前的想法倾向于将service按照是否带有business含义划分为两种类型:有business内容的serive,比如说取一个用户资料,执行一个客户请求;没有business内容的service,主要是指内部实现,比如获取数据库datasource,一些公共的工具类或者工具模块。
后者理论上也可以不单独出来而是以类库的方式分别打包在不同的带business内容的service所在的bundle里面,但是这样就有重复的问题。因此对于一些比较重要而又被很多bundle使用的service,即使它不带business内容,也没有热拔插的要求,我还是倾向于将这个service提取为单独的bundle。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
这个不敢苟同,osgi已经足够成熟了,只是它设计的初衷不是针对企业开发,所以目前迁移到企业开发时遇到比较多的问题。至少在ide,app server基本是不二选择,怎么至少给出“无用”的评价。
成熟与否,不能看别人说的,还是要结合到自己的应用中。你希望OSGi提供哪些特性?他是否提供?是否满足你的要求?不可能有一个方案能满足你的100%需求的。
此外,还要看你个人、团队的驾驭能力,驾驭能力不够,就只能使用JSP等基础技术了。
OSGi不就是一个模块化的支持技术吗?如果你需要,且用得上,在目前也没有更好的技术的情况下,大可放心使用。毕竟,eclipse、spring等至少保证OSGi本身是基本完备的。剩下的问题,就只有自己发挥了
但是看了一下目前osgi的时候,几个成功案例都是基于osgi开发ide,比如eclipse之类。还没有看到用于企业应用的成功案例,是osgi不适合开发企业应用?还是说,目前没有人这样开始使用osgi?或者只是我孤陋寡闻,其实大家已经用开了?
顺便说明一下为什么有这种的疑问,这个要冲java开发application的方式说起,我接触过的无非是两种:
1. 简单的j2se的application
就是自己写代码,编译打包,然后写一个命令行脚本或者shell,通过java 和main class启动java进程,里面爱干嘛干嘛。
好处是简单,小巧,灵活,没有额外的负载。缺点嘛,没有模块化的支持,想安装,卸载,启动,停止,更新其中部分功能时,完全没辙,只能整个退出,更新之后重启启动。不过对于小程序倒不是问题,大型系统就不大可能了。
这个是轻量级的解决方法。
2. 大而全的app server
这个就是标准的j2ee,weblogic,glassfish,jboss之类的都是了,提供标准的j2ee容器,完整的j2ee支持,诸如ejb之类,总之什么都有了。自己写代码,打包为app,通过ear,war等方式发布,对其中的任何一个app,安装,卸载,启动,停止都是可以通过控制台搞定的。
很强大,但是很“重“,非常的重,像我在的团队,目前开发的东东,启动起来什么不跑就吃了1g内存......
这个方案会带来一个问题,当模块被打包在不同ear中时,无法使用java的方法调用,只能通过ejb,或者自己开端口等方式进行远程调用。效率方面不好,而且感觉也挺傻的:同一个机器同一个进程,彼此直接访问还要走远程......在weblogic上可以通过将功能模块打包在同一个ear中,开启 ejb的local call优化为本地访问,但是限制是只能在一个ear中,这又破坏了模块化。
从个人爱好和经历来说,我喜欢第一种方式的轻巧,比较讨厌2的笨重。但是1的缺点也很明显,当程序大到一定程度,功能模块越来越多的情况下,就不适用了。上面的例子,那个启动就吃1g内存的家伙,它的java project现在都超过200个了,可以想象有多大吗?如果用1的方式来开发,根本不可能啊。
再有就是个人审美观的问题,我这个人生性比较反感庞大而复杂的东西,可以说j2ee 容器/ejb(尤其是ejb3.0以前)是完全违背我的美感的,虽然我现在靠这个吃饭,恩,似乎有点偏激......
所以现在想看看有没有第三条路可以走(恩,当然工作方面2是肯定无法避免的了),我自己现在想到解决方案就是基于osgi,将不同的功能模块划分为不同的 bundle(当然可以继续按照service细分)。这就避免了1原有的最大不足:无法划分模块来适用和管理,同时也绕开了app server这个大块头。
稍后准备按照这个思路来开发一个application来练练手,试试可行性如何。比较看好这个思路的前景,但是目前没有信心,呵呵,主要是没有看到类似的案例,不知道该怎么着手,更别提什么最佳实践之类的可供参考。
颇有摸石头过河的感觉,有朋友可以帮忙指点一二吗?网上可以找到的osgi的内容,基本都停留在简单介绍和高度评价上,没有找到实际的可供参考的东西。哪位同学如有osgi方面的知识请不吝赐教,不胜感激啊!
非常有诚意的希望能有人和我一起深入探讨这个话题,无论是赞成还是反对.
ps: 因为在标题中有“请教”的字眼,被自动转移到问答频道了。我想了一下,我发这个帖子的主要目的还是为了可以找人讨论,而不是一个简单的问答。因此厚颜将请教二字从标题中去除后再发贴一次,

评论
76 楼
cherishmmo2004
2015-04-14
感觉你们都很牛掰,我们做的一个运维平台也是用karaf的,用karaf+mq做巡检功能,但是karaf这个鬼东西太占资源了,100多m,消耗10%的cpu,弄的客户很不满意,现在我们想找一个替代方案,都不知道怎么搞。有没有这方面的经验,借鉴下啊。
75 楼
liu_swei
2010-02-21
jnn 写道
liu_swei 写道
jnn 写道
liu_swei 写道
目前国外很多开源的应用服务器都开始转向osgi了,比如:glassfish、jonas、geronimo、spring-dm、spring-osgi、pax-web等,我们目前做的是开发微内核集成框架,用的内核是karaf,karaf是felix的子项目,项目是开源的,大家感兴趣可以申请加入来为国产中间件做一份贡献:
http://www.trustie.net/projects/project/show/loong
http://www.trustie.net/projects/project/show/loong
不知道你们在Karaf基础上做了哪些改进,我们公司的Fuse ESB也是基于Karaf的,有空可以聊一聊。
我们重构了声明式服务,重构了日志服务,重构了热部署,定义了部署框架,现在可以部署war包,还可以随时扩展新的部署器、定义了协议处理器框架,定义了web容器框架同时集成了tomcat和jetty,并开发了dservice容器、集成opensso、集成数据源事物等等,下一步要重构karaf的内核
目前我们开源的只是微内核框架,以后会陆续开源所有的源码!
不知道你说的重构主要做了那方面的工作。
据我所知你上面提到的大部分功能 都是由karaf是通过pax-xxx 来实现的。
dservice容器、集成opensso、集成数据源事物, 这几个功能到是有点意思。
我现在有个问题就是如果Karaf升级了,你们的微内核框架需要做多大的修改才能使用新版本的Karaf.
呵呵,我们的重构更多的是功能上的,至于karaf内核,我们正准备重写它的内核
这样就不必依赖于它了,至于集成的jetty我们最初采用的的确是pax-web的,后来为了集成tomcat我们自己定一个了web容器框架,并重新集成了jetty,已经完全和pax-web无关了。
74 楼
pufan
2010-02-09
更普遍的需求就是版本升级,当然这也是所有bundle的共有需求。
理论上来说,任何需求都不一定要热插拔,当然这也要求你的代码设计的“更好”。
理论上来说,任何需求都不一定要热插拔,当然这也要求你的代码设计的“更好”。
73 楼
skydream
2010-02-09
DB bundle:更换数据库连接池大小、更改连接参数
Log bundle:更改log级别
Cache bundle:停用或启用cache,甚至从本地cache无缝切换到远程cache。
我怎么感觉这几个需求,不是只有通过热拔插才能完成。如果这几个模块设计的好,完全可以做到runtime 的动态配置。当然热拔插相当于推倒重来,做起来更简单一些。
Log bundle:更改log级别
Cache bundle:停用或启用cache,甚至从本地cache无缝切换到远程cache。
我怎么感觉这几个需求,不是只有通过热拔插才能完成。如果这几个模块设计的好,完全可以做到runtime 的动态配置。当然热拔插相当于推倒重来,做起来更简单一些。
72 楼
pufan
2010-02-08
skydream 写道
pufan 写道
skydream 写道
再次更新,分成3个层次

老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
对于热拔插的支持,我个人感觉在business bundle这个层面上比较有可能有需求,对于common bundle,似乎实际意义不大。
打个比方说,有一个短信网关之类的应用,在business层面上,增加,卸载或更新某个业务能力是可能的,比如对smpp sms模块的更新,增加一个rest方式的sms模块,这个热拔插请求是比较合理的。对于common层,我不大理解为什么需要热拔插?比如说从提供datasource的bundle,难道是从mysql数据库切换到oracle?我对这块的需求和背景不大了解,pufan同学能否简单的介绍一下你遇到的场景:在类似我图中的common bundle的功能模块中,需要实现热拔插。这可以帮助我理解,谢谢!
很常见的需求,举几个例子:
DB bundle:更换数据库连接池大小、更改连接参数
Log bundle:更改log级别
Cache bundle:停用或启用cache,甚至从本地cache无缝切换到远程cache。
等等
用osgi最大的思想转变就是活用service,要注意这个‘活’字,不但要面向接口设计,更要充分利用osgi框架的service依赖及查找特性进行whiteboard pattern设计,那时你就会发现开发速度达到甚至超越传统框架也并不是不无可能的了。
71 楼
fcoffee
2010-02-08
OSGi只是让"热插拔"成为了可能, 而不是一定能.
70 楼
skydream
2010-02-08
pufan 写道
skydream 写道
再次更新,分成3个层次

老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
对于热拔插的支持,我个人感觉在business bundle这个层面上比较有可能有需求,对于common bundle,似乎实际意义不大。
打个比方说,有一个短信网关之类的应用,在business层面上,增加,卸载或更新某个业务能力是可能的,比如对smpp sms模块的更新,增加一个rest方式的sms模块,这个热拔插请求是比较合理的。对于common层,我不大理解为什么需要热拔插?比如说从提供datasource的bundle,难道是从mysql数据库切换到oracle?我对这块的需求和背景不大了解,pufan同学能否简单的介绍一下你遇到的场景:在类似我图中的common bundle的功能模块中,需要实现热拔插。这可以帮助我理解,谢谢!
69 楼
pufan
2010-02-06
skydream 写道
再次更新,分成3个层次

老兄,service定义bundle在哪里,你这样做common bundle怎么能够热插拔?
68 楼
skydream
2010-02-05
再次更新,分成3个层次

67 楼
skydream
2010-02-05
更新一下图,看看是否是这个意思:

66 楼
zhangdp_neu
2010-02-05
skydream 写道
to zhangdp_neu: 我想我应该明白了,你是因为通用的bundle太多,因此将其中一些类似的bundle合并成为一个bundle,依旧提供原有的service。
也就是说从1service / 1bundle 修改为 n service / 1bundle ,从而减少bundle的物理数量,但还是保留原有的service封装。
这样理解是否正确?
也就是说从1service / 1bundle 修改为 n service / 1bundle ,从而减少bundle的物理数量,但还是保留原有的service封装。
这样理解是否正确?
恩,有点这个意思。在你那个图上再加一个Bundle,不暴露服务,只是对外export工具类一类的。
不好意思,下班了,跑了
65 楼
skydream
2010-02-05
to zhangdp_neu: 我想我应该明白了,你是因为通用的bundle太多,因此将其中一些类似的bundle合并成为一个bundle,依旧提供原有的service。
也就是说从1service / 1bundle 修改为 n service / 1bundle ,从而减少bundle的物理数量,但还是保留原有的service封装。
这样理解是否正确?
也就是说从1service / 1bundle 修改为 n service / 1bundle ,从而减少bundle的物理数量,但还是保留原有的service封装。
这样理解是否正确?
64 楼
skydream
2010-02-05
简单的画了一个图:

63 楼
zhangdp_neu
2010-02-05
skydream 写道
zhangdp_neu 写道
skydream 写道
erbin 写道
osgi是个好东西,但是它还是存在Bundle粒度粗细问题,比如我要建立一个分布式系统,数据源层,dao层,业务层
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
bundle最少的原则,我也有这个倾向,不过没有你这么强烈。可能我还没有在实际的开发中正式使用,感触不够深刻,呵呵。
我目前的想法倾向于将service按照是否带有business含义划分为两种类型:有business内容的serive,比如说取一个用户资料,执行一个客户请求;没有business内容的service,主要是指内部实现,比如获取数据库datasource,一些公共的工具类或者工具模块。
后者理论上也可以不单独出来而是以类库的方式分别打包在不同的带business内容的service所在的bundle里面,但是这样就有重复的问题。因此对于一些比较重要而又被很多bundle使用的service,即使它不带business内容,也没有热拔插的要求,我还是倾向于将这个service提取为单独的bundle。
我的经历是这样,开始的时候,日志,数据库datasource等都是单独的bundle,对外提供服务,后来发现这样Bundle多的控制不住。
后来,日志,datasource等都提取到一个bundle中,做成及系统级组件,都是对外提供服务(业务无关的服务),另外有一部分做不成服务的,直接对外export了。
没有将所有其作为jar吧打在lib里。而是做为一起部署的一个bundle。
62 楼
skydream
2010-02-05
zhangdp_neu 写道
skydream 写道
erbin 写道
osgi是个好东西,但是它还是存在Bundle粒度粗细问题,比如我要建立一个分布式系统,数据源层,dao层,业务层
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
bundle最少的原则,我也有这个倾向,不过没有你这么强烈。可能我还没有在实际的开发中正式使用,感触不够深刻,呵呵。
我目前的想法倾向于将service按照是否带有business含义划分为两种类型:有business内容的serive,比如说取一个用户资料,执行一个客户请求;没有business内容的service,主要是指内部实现,比如获取数据库datasource,一些公共的工具类或者工具模块。
后者理论上也可以不单独出来而是以类库的方式分别打包在不同的带business内容的service所在的bundle里面,但是这样就有重复的问题。因此对于一些比较重要而又被很多bundle使用的service,即使它不带business内容,也没有热拔插的要求,我还是倾向于将这个service提取为单独的bundle。
61 楼
zhangdp_neu
2010-02-05
skydream 写道
erbin 写道
osgi是个好东西,但是它还是存在Bundle粒度粗细问题,比如我要建立一个分布式系统,数据源层,dao层,业务层
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
我坚持bundle最少的原则。
业务层面的基于Service的划分,这个层面实现了业务级的复用。
系统划分成模块后,如果此模块内部组件没有热插拔方面的特殊要求,那么整个模块就为一个bundle.
可以同时对外提供一个或多个服务。
如果此模块中某个组件(或功能点)有热插拔等特殊需求,此模块为一个主Bundle。
只定义出热插拔组件的一些接口。
热插拔需求的组件和相关类等划分出来,单独为一个bundle。
业务层面的类库划分,实现代码级别的复用。
将一些业务相关的公共类划分,只是定义抽象类,公共类一类,业务异常等。
60 楼
skydream
2010-02-04
erbin 写道
osgi是个好东西,但是它还是存在Bundle粒度粗细问题,比如我要建立一个分布式系统,数据源层,dao层,业务层
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
“所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦”-----这个我非常赞成!
有关这个粒度的问题,比较头疼的是如果太小bundle太多管理起来太痛苦了,而有些bundle的功能可能比较简单,比如一些工具类。对于这种我感觉不如直接嵌入到使用它的bundle里面,以lib包的形式存在(当然这个也会造成多个bundle之间重复的问题)。
bundle的划分应该是基于service来做,而且应该以功能模块的边界为划分原则:同一个功能模块内,如果不对本功能模块外暴露,就应该尽量隐藏在该bundle(先假设该功能模块只有一个bundle的情况)内部,比如我上面说的直接打包在bundle的jar中。
以erbin同学的例子,“数据源层,dao层,业务层”,其中数据源层应该是被几乎所有需要数据库访问的bundle使用,有必要做成bundle提供service来操作数据源,而在这个数据库的bundle内部,如何使用就应该屏蔽起来,比如说使用c3p0来做连接池,这个c3p0的jar包就没有必要暴露给外部了。"dao层,业务层",如果不是被多bundle公用,就应该封装然后以service的形式供其他bundle调用。
上述的想法暂时还不成熟,我还没有实际使用,有点纸上谈兵的感觉。但是基本的出发点就是,bundle的粒度不能太细,数量不是越多越好。
59 楼
erbin
2010-02-04
osgi是个好东西,但是它还是存在Bundle粒度粗细问题,比如我要建立一个分布式系统,数据源层,dao层,业务层
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
显示层,每层都会有好多的Bundle有时候要新建一个模块的话需要引入很多Bundle而且引入的Bundle还要引入其他的Bundle这样整体的结构依然是紧密耦合的,没有达到osgi原本的初衷。
所以我觉得osgi的关键还在Bundle的粒度问题,怎么划分才是合理的 才能高度解耦。
58 楼
linux888
2010-02-04
CS的话个人感觉OSGi有相当好的适应性。我也正在学习OSGi,不过我们基本都是BS应用,其实初衷就是想利用bundle的封装给复用性一个很好的载体,至于动态加载这类的特性,倒不是很看重。很想学习一下web应用上的OSGi开发的测试、部署以及性能问题。
57 楼
wangzaixiang
2010-02-04
skydream 写道
javaonejcy 写道
对应用过于复杂的技术就是无用的技术。osgi离成熟尙远。
这个不敢苟同,osgi已经足够成熟了,只是它设计的初衷不是针对企业开发,所以目前迁移到企业开发时遇到比较多的问题。至少在ide,app server基本是不二选择,怎么至少给出“无用”的评价。
成熟与否,不能看别人说的,还是要结合到自己的应用中。你希望OSGi提供哪些特性?他是否提供?是否满足你的要求?不可能有一个方案能满足你的100%需求的。
此外,还要看你个人、团队的驾驭能力,驾驭能力不够,就只能使用JSP等基础技术了。
OSGi不就是一个模块化的支持技术吗?如果你需要,且用得上,在目前也没有更好的技术的情况下,大可放心使用。毕竟,eclipse、spring等至少保证OSGi本身是基本完备的。剩下的问题,就只有自己发挥了
发表评论
-
新博客网站
2014-04-22 23:26 1089开始启用新的博客网站,基于hexo,搭载在github上。 ... -
遭遇drupal keyword search模块bug,不能添加新的页面关键字
2012-07-11 08:00 2249这是个非常无聊而无奈的问题,昨晚在解决globalre ... -
解决drupal的globalrediect模块的重定向循环问题
2012-07-11 07:26 1667昨晚继续折腾俺的小站http://www.javaun ... -
Java University 网站开通过程吐糟
2012-06-24 10:40 1682折腾了两天,终于将Java University这个站 ... -
告别JE
2012-01-02 19:04 293在JE很多年了,看了很多好帖子,认识很多优秀的人。 ... -
写在qcon beijing 2011前夜
2011-04-07 22:40 1836在酒店里上网,无聊又来到je,sorry,我还是习惯这 ... -
被收购之后sun打算放弃开源社区了吗?
2010-05-09 21:41 1402对比最近遇到的两个事情,明显感觉sun有力不从心或者 ... -
sun的程序员也是程序员啊!
2010-05-05 16:48 4343依然是近期工作中发现的问题,真实案例,写下来分享给 ... -
基于java的cms系统magnolia安装试用
2010-04-04 16:33 3387最近想找个cms系统来用用,做点简单的东西,因为自己比较熟悉j ... -
一个因参数定义不合理造成的滑稽错误引发的思考
2010-04-17 10:22 1073这是一个真实案例,本周在工作中发现的,案例情况比较极端,因此显 ... -
java资源收集--开源项目
2008-10-21 15:54 1324一些看到过的java资源,包括项目,工具等,因 ... -
转:Google App Engine正式宣布支持Java!
2009-04-08 16:48 1238刚得到的消息,实验了一下可以申请成功,有兴趣的兄弟赶紧。 新 ... -
充分利用8G大内存----Ramdisk的安装设置
2009-07-05 21:23 14089日前升级内存容量到8g之后,发现在xp下因为无法全 ... -
[fun]我们的代码规模比起来还是差得远
2009-07-29 09:45 1320我们的团队 ...
相关推荐
基于改进粒子群算法的DG储能选址定容优化模型:解决电力系统时序性问题的可靠程序解决方案,基于改进粒子群算法的DG储能选址定容模型优化解决电力系统问题,DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题。下面我将对程序进行详细分析。 首先,程序开始时加载了一些数据文件,包括gfjl、fljl、fhjl1、cjgs和fhbl。这些文件可能包含了电力系统的各种参数和数据。 接下来是一些参数的设置,包括三种蓄电池的参数矩阵、迭代次数、种群大小、速度更新参数、惯性权重、储能动作策略和限制条件等。 然后,程序进行了一些初始化操作,包括初始化种群、速度和适应度等。 接下来是主要的迭代过程。程序使用粒子群算法的思想,通过更新粒子的位置和速度来寻找最优解。在每次迭代中,程序计算了每个粒子的适应度,并更新个体最佳位置和全局最佳位置。 在每次迭代中,程序还进行了一些额外的计算,如潮流计算、储能约束等。这些计算可能涉及到电力系统的潮流计算、功率平衡等知识点。 最后,程序输
数学建模相关主题资源2
内容概要:本文详细介绍了一系列用于科学研究、工程项目和技术开发中至关重要的实验程序编写与文档报告撰写的资源和工具。从代码托管平台(GitHub/GitLab/Kaggle/CodeOcean)到云端计算环境(Colab),以及多种类型的编辑器(LaTeX/Microsoft Word/Overleaf/Typora),还有涵盖整个研究周期的各种辅助工具:如可视化工具(Tableau)、数据分析平台(R/Pandas)、项目管理工具(Trello/Jira)、数据管理和伦理审核支持(Figshare/IRB等),最后提供了典型报告的具体结构指导及其范本实例链接(arXiv/PubMed)。这为实验流程中的各个环节提供了系统的解决方案,极大地提高了工作的效率。 适合人群:高校学生、科研工作者、工程技术人员以及从事学术写作的人员,无论是新手入门还是有一定经验的人士都能从中受益。 使用场景及目标:帮助读者高效地准备并开展实验研究活动;促进团队间协作交流;规范研究报告的形式;提高对所收集资料的安全性和隐私保护意识;确保遵循国际公认的伦理准则进行实验。
四轮毂驱动电动汽车稳定性控制策略:基于滑模与模糊神经网络的转矩分配与仿真研究,四轮毂驱动电动汽车稳定性控制:基于滑模与模糊神经网络的转矩分配策略及联合仿真验证,四轮毂驱动电动汽车稳定性控制,分布式驱动转矩分配。 上层基于滑模,模糊神经网络控制器决策横摆力矩,下层基于动态载荷分配,最优分配,平均分配均可做。 simulink与carsim联合仿真。 ,四轮毂驱动;电动汽车稳定性控制;分布式驱动;转矩分配;滑模控制;模糊神经网络控制器;横摆力矩;动态载荷分配;最优分配;平均分配;Simulink仿真;Carsim仿真,四驱电动稳定性控制:滑模与模糊神经网络决策的转矩分配研究
本资源提供了一份详细的PyCharm安装教程,涵盖下载、安装、配置、激活及使用步骤,适合新手快速搭建Python开发环境。
毕业设计
原版宋体.ttf,原版宋体安装文件,安装方式,直接右键安装。
利用Xilinx FPGA内嵌的软核处理器MicroBlaze,加上自主编写的AXI_IIC控制器,实现对IMX327传感器IIC总线的控制,同时辅以UART调试串口,实现系统状态的实时监控与调试。
在 GEE(Google Earth Engine)中,XEE 包是一个用于处理和分析地理空间数据的工具。以下是对 GEE 中 XEE 包的具体介绍: 主要特性 地理数据处理:提供强大的函数和工具,用于处理遥感影像和其他地理空间数据。 高效计算:利用云计算能力,支持大规模数据集的快速处理。 可视化:内置可视化工具,方便用户查看和分析数据。 集成性:可以与其他 GEE API 和工具无缝集成,支持多种数据源。 适用场景 环境监测:用于监测森林砍伐、城市扩展、水体变化等环境问题。 农业分析:分析作物生长、土地利用变化等农业相关数据。 气候研究:研究气候变化对生态系统和人类活动的影响。
毕业设计
整个文件的代码
名字微控制器_STM32_DFU_引导加载程序_dapboo_1740989527.zip
详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/145991332
anaconda配置pytorch环境
立体仓库控制组态王6.55与三菱PLC联机仿真程序:视频教程与IO表接线图CAD详解,9仓位立体仓库控制系统优化方案:组态王6.55与三菱PLC联机仿真程序视频教程及IO表接线图CAD详解,9仓位立体仓库控制组态王6.55和三菱PLC联机仿真程序+视频+带io表接线图CAD ,关键词:立体仓库;控制组态王6.55;三菱PLC;联机仿真程序;视频;io表接线图;CAD,立体仓库控制组态王与三菱PLC联机仿真程序资源包
基于Maxwwell设计的经典外转子永磁同步电机案例:直流母线24V,大功率与高效率驱动设计,基于Maxwell设计的经典永磁同步电机案例:200W功率,外转子结构,直流母线电压与电机参数详解,基于maxwwell设计的经典200W,2200RPM 外转子,直流母线24V,42极36槽,定子外径81.5 轴向长度15 ,0.86Nm, 永磁同步电机(PMSM)设计案例,该案例可用于生产,或者学习用 ,经典设计案例; 200W; 2200RPM外转子; 直流母线24V; 42极36槽; 定子外径81.5; 轴向长度15; 永磁同步电机(PMSM); 生产学习用。,经典200W永磁同步电机设计案例:Maxwell外转子,高效率2200RPM直流母线系统
C# Modbus RTU协议主站设计工程源码详解:支持多从站访问与多线程实现,带注释开源dll文件,C# Modbus RTU协议主站设计工程源码解析:多线程实现访问多个从站功能的开源dll文件,C# Modbus RTU协议主站设计工程源码带注释,开源dll文件,支持访问多个从站,多线程实现 ,C#; Modbus RTU协议; 主站设计; 工程源码; 注释; 开源dll; 多从站访问; 多线程实现,《C# Modbus RTU主站源码:多线程支持访问多从站开源DLL文件详解》
MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink下的四旋翼无人机PID控制仿真模型研究,MATLAB Simulink 四旋翼仿真模型 四轴无人机PID控制 ,MATLAB; Simulink; 四旋翼仿真模型; 四轴无人机; PID控制,MATLAB Simulink四旋翼仿真模型中四轴无人机的PID控制研究
复现文献中COMSOL模拟天然气水合物两相渗流的研究,COMSOL模拟天然气水合物两相渗流:文献复现与分析,comsol天然气水合物两相渗流,文献复现 ,comsol; 天然气水合物; 两相渗流; 文献复现,复现文献:comsol模拟天然气水合物两相渗流研究