当前位置: 首页 > news >正文

wordpress 站内信 群发wordpress 腾讯视频插件

wordpress 站内信 群发,wordpress 腾讯视频插件,企业网站建设移动,深圳景观设计公司10强osgi简介为基于Java的系统创建的OSGi提供了模块化系统的框架。 OSGi使得可以定义每个单独模块与其他模块的依赖关系#xff0c;并使用户能够控制生命周期并动态更改系统的每个组件。 OSGi是一个规范#xff0c;最常见的实现可以算作Equinox #xff0c; Apache Felix和Knopl… osgi简介 为基于Java的系统创建的OSGi提供了模块化系统的框架。 OSGi使得可以定义每个单独模块与其他模块的依赖关系并使用户能够控制生命周期并动态更改系统的每个组件。 OSGi是一个规范最常见的实现可以算作Equinox Apache Felix和Knoplerfish 。 在本文中我将尝试举一个在Equinox中创建简单OSGi捆绑包的示例。 OSGi结构 基本的OSGi结构可以在右侧的图中看到。 OSGi实现位于JVM的顶部并提供用于模块的服务管理组件定义执行管理和生命周期控制的机制。 最基本的OSGi概念描述如下 束 在OSGi系统中用于构建结构的组件的名称为“ Bundle ”。 在部署阶段每个OSGi捆绑包都是一个jar文件。 但是捆绑jar文件与常规jar文件的主要区别可以算作是OSGi特定的清单定义和某些OSGi特定的类。 我们将在后面的部分和示例中讨论这些差异。 服务 服务提供了结构束之间的交互。 服务作为接口公开并向执行该接口的实现注册。 与SOA结构并行通过OSGi服务进行访问使得与基于常规jar的Java结构相比基于OSGi的系统更加松散耦合。 这些结构还可以在运行时更改系统的更改组件。 OSGi为要注册和访问的服务实现服务目录。 OSGi还提供了服务管理机制。 生命周期 OSGi提供了一个平台可以控制捆绑软件的生命周期。 在这种结构中每个捆绑软件都有自己的OSGi配置主要是在依赖关系和暴露部分方面并且系统由OSGi本身运行。 OSGi知道组成系统的捆绑包该捆绑包带有一个带有顺序的配置文件并且生命周期管理以给定顺序应用于每个组件。 生命周期管理的包端由“ Activator”类控制该类实现了OSGi接口该接口必须存在于每个“常规” OSGi包中。 不适用于“片段”片段但这已经超出了本文的讨论范围请忽略这一点 如上所述 b undle是一个jar文件其中至少包含一个Activator类和一个MANIFEST文件其中包含OSGi特定的标头和信息。示例MANIFEST文件如下所示。 让我们看一下定义中每个部分的含义。 Bundle-Name: Our Bundle Bundle-SymbolicName: us.elron.bundles.ours Bundle-Description: Very own bundle of ours Bundle-ManifestVersion: 1 Bundle-Version: 1.0.0 Bundle-Activator: us.elron.bundles.ours.BundleActivator Export-Package: us.elron.bundles.ours.exported; version 1.0.0 Import-Package: us.elron.bundles.yours.exported; version 1.3.0 捆绑包名称 捆绑包的“吸引公众”名称。 Bundle-SymbolicName作为MANIFEST文件中唯一的强制性定义符号名称定义OSGi生态系统中捆绑软件的唯一名称。 由于此定义应该是唯一的因此通常按照约定将其定义为捆绑软件的基本包名称。 捆绑包描述有关捆绑包 “存在理由”的描述。 Bundle-ManifestVersion捆绑包的清单版本。 捆绑软件版本 OSGi捆绑软件版本。 Bundle-Activator此类用于控制包的生命周期。 OSGi调用此类以启动或停止捆绑软件。 导出包本节中定义了希望由其他包使用的包。 Import-Package本节中定义了执行当前包所需的包。 OSGi结构提供了控制束生命周期的必要机制。 捆绑软件受OSGi的控制以根据给定的配置控制其生命周期。 此生命周期步骤将在下面详细说明 组件状态 描述 已安装 此状态表明安装步骤已成功完成。 在这种情况下既不进行依赖关系分析也不进行类加载。 仅执行必需的步骤例如定义分析其清单文件的包属性。 解决 当OSGi解析并满足其所有依赖关系并进行类加载操作时便会在此状态下找到捆绑软件。 这是启动之前和停止之后的状态。 开始 这是在调用捆绑软件的激活器的“启动”方法但尚未成功或未成功完成时找到捆绑软件的状态。 活性 该捆绑包已成功启动并正在运行这意味着Activator的“启动”方法导致成功。 停止 这是在调用捆绑软件的激活器的“停止”方法但尚未成功或未成功完成时找到捆绑软件的状态。 未安装 这是从系统中删除捆绑软件时的状态。 在这种情况下不会过渡到另一个状态。 必须再次安装该组件。 上图中可以看到所描述的生命周期步骤之间的过渡。 让我们做一个简单的例子来阐明上面提到的概念和步骤。 在我们的示例中将有两个捆绑包其中一个捆绑包提供一个随机数生成器服务来生成随机数另一个捆绑包将使用此服务每秒打印一个随机数并进行单独的处理。 没有道理吗对我来说还是一样但足以掌握概念 现在让我们使用Eclipse和Equinox一起开发此示例项目最好。 在Eclipse中OSGi捆绑包是使用“新建插件项目”向导开发的如下所示 使用向导创建两个项目 us.elron.osgi.random和us.elron.osgi.user 按照所需的步骤进行操作 并按如下所示命名包和激活器 RandomActivator UserActivator 。 该项目的最终结果也应该是这样的 下面给出了随机数生成包 us.elron.osgi.random 的服务定义实现和清单定义。 接口IRandomGenerator package us.elron.osgi.random;public interface IRandomGenerator {int generate ();int generate(int upperBound);} 服务RandomGenerator package us.elron.osgi.random.generator;import java.util.Random;import us.elron.osgi.random.IRandomGenerator;public class RandomGenerator implements IRandomGenerator {private final Random random;public RandomGenerator () {this.random new Random();} Overridepublic int generate () {return this.random.nextInt();} Overridepublic int generate (final int upperBound) {return this.random.nextInt (upperBound);}} 激活器RandomActivator package us.elron.osgi.random;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext;import us.elron.osgi.random.generator.RandomGenerator;public class RandomActivator implements BundleActivator {public void start(final BundleContext context) throws Exception {System.out.println([Random] Lets Random!);RandomGenerator randomGenerator new RandomGenerator();context.registerService(IRandomGenerator.class.getName (), randomGenerator, null);System.out.println([Random] Random services were registered.);}public void stop(final BundleContext context) throws Exception {System.out.println([Random] Bundle is being stopped !);}} 组件的MANIFEST.MF说明如下。 捆绑软件至少应导出具有其服务接口的软件包以便其他捆绑软件使用它们。 由于松散耦合是SOA和OSGi系统的最重要目标之一因此仅应从任何捆绑包中导出最少数量的类集。 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Random Bundle-SymbolicName: us.elron.osgi.random Bundle-Version: 1.0.0.qualifier Bundle-Activator: us.elron.osgi.random.RandomActivator Bundle-Vendor: ELRON.US Require-Bundle: org.eclipse.core.runtime Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Export-Package: us.elron.osgi.random 可以看出服务是注册为OSGi服务的Java接口的实现。 激活程序类是捆绑软件的OSGi访问点。 OSGi使用捆绑软件的Activator类来管理其生命周期。 在执行此操作时OSGi将“ org.osgi.framework.BundleContext ”接口的实现发送到分发包。 该接口使捆绑软件可以与OSGi层进行交互并且可以在代码中看到从而进行诸如注册和获取OSGi服务之类的操作。 现在让我们看一下用户包类 该类输出由随机生成器服务生成的随机数。 package us.elron.osgi.user;import us.elron.osgi.random.IRandomGenerator;public class RandomPrinter extends Thread {private final IRandomGenerator random;private volatile boolean run true;public RandomPrinter (final IRandomGenerator random) {this.random random;} Overridepublic void run () {while (this.run) {System.out.println ([User] new random number: this.random.generate (300));try {Thread.sleep (1000);} catch (final InterruptedException e) {break;}}System.out.println ([User] The process was terminated.);}public void close () {this.run false;}} 这是Activator的实现 package us.elron.osgi.user;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference;import us.elron.osgi.random.IRandomGenerator;public class UserActivator implements BundleActivator {private RandomPrinter randomPrinter;public void start (final BundleContext context) throws Exception {System.out.println ([User] Here we go ..);ServiceReference randSrvRef context.getServiceReference (IRandomGenerator.class.getName ());IRandomGenerator randService (IRandomGenerator) context.getService (randSrvRef);if (randService null) {throw new Exception ([User] Error! Random service could not be found!);}this.randomPrinter new RandomPrinter(randService);this.randomPrinter.start();}public void stop (final BundleContext bundleContext) throws Exception {System.out.println ([User] finish ..);this.randomPrinter.close ();}} “用户”捆绑包的MANIFEST.MF描述如下。 我们应使用随机服务接口所在的随机生成器捆绑包的“ us.elron.osgi.random”包定义依赖项。 可以在包或包的级别定义依赖关系但是为了减少包之间的依赖关系最好尽可能地选择包级别的依赖关系。 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: User Bundle-SymbolicName: us.elron.osgi.user Bundle-Version: 1.0.0.qualifier Bundle-Activator: us.elron.osgi.user.UserActivator Bundle-Vendor: ELRON.US Require-Bundle: org.eclipse.core.runtime Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Import-Package: us.elron.osgi.random 要使用Eclipse在OSGi上运行这些项目应定义运行配置如下所示。 在OSGi Framework下的“ 运行 或调试 配置 ”步骤中应创建一个新配置右键单击并在此配置中选择我们的新捆绑包。 要为选定的包提供所需的依赖关系我们可以使用“添加所需的包” ”按钮。 通过这种方式Eclipse将解决依赖关系层次结构并为选定的包添加所需的包。 我们还应该定义捆绑包的开始顺序。 应根据捆绑包的依赖关系定义此顺序。 依赖束应在它们依赖的束之后开始。 因此在我们的示例中我们将“ us.elron.osgi.random”的级别设置为1 而将“ us.elron.osgi.user ”的级别设置为2 。 以这种形状运行项目会生成如下输出 OSGi [Random] Lets Random! [Random] Random services were registered. [User] Here we go .. [User] new random number: 38 [User] new random number: 250 [User] new random number: 94 [User] new random number: 150 [User] new random number: 215 [User] new random number: 124 [User] new random number: 195 [User] new random number: 260 [User] new random number: 276 [User] new random number: 129 OSGi运行时提供了一个控制台界面供我们与自己进行交互。 运行控制台应用程序窗口时我们看到一个“ osgi”脚本表示可以访问控制台。 提到您可以在控制台中执行的一些重要命令之后我将让您一个人呆在控制台上让您发现可以从“ help”命令开始的操作。 “ ss”命令显示所有已注册到OSGi的组件及其ID 状态和捆绑包名称值以及版本部件。 id值表示OSGi给每个捆绑软件的唯一标识符。 即使重新安装并安装了捆绑软件发现一件事该数字在JVM执行中也保持不变但是可以在新的执行中更改。 状态值指示捆绑软件的状态在上表中进行了详细说明 名称和版本值指示其名称对我们的影响。 对于当前系统 “ ss”命令的输出如下 OSGi ssFramework is launched.id State Bundle 0 ACTIVE org.eclipse.osgi_3.6.0.v20100517Fragments 4 2 ACTIVE org.eclipse.core.jobs_3.5.0.v20100515 3 ACTIVE javax.servlet_2.5.0.v200910301333Resolved javax.transaction_1.1.1.v201006150915 4Master 0 5 ACTIVE org.eclipse.core.runtime_3.6.0.v20100505 6 ACTIVE org.eclipse.equinox.preferences_3.3.0.v20100503 7 ACTIVE org.eclipse.osgi.services_3.2.100.v20100503 8 ACTIVE org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517 9 ACTIVE us.elron.osgi.random_1.0.0.qualifierResolved org.eclipse.core.runtime.compatibility.registry_3.3.0.v20100520 10Master 11 11 ACTIVE org.eclipse.equinox.registry_3.5.0.v20100503Fragments 10 12 ACTIVE org.eclipse.equinox.app_1.3.0.v20100512 13 ACTIVE org.eclipse.equinox.common_3.6.0.v20100503 14 ACTIVE org.eclipse.core.contenttype_3.4.100.v20100505 14-1235 15 ACTIVE us.elron.osgi.user_1.0.0.qualifier OSGi 假设我们要关闭用户捆绑包。 在这种情况下我们需要使用要停止的分发包的ID在这种情况下为15执行“ stop”命令。 [User] a new random number is: 48 [User] a new random number is: 49 OSGi stop 15 [User] finish .. [User] The process was terminated. 当我们再次查看“ ss”命令的输出时 Framework is launched.id State Bundle 0 ACTIVE org.eclipse.osgi_3.6.0.v20100517Fragments 4 2 ACTIVE org.eclipse.core.jobs_3.5.0.v20100515 3 ACTIVE javax.servlet_2.5.0.v200910301333Resolved javax.transaction_1.1.1.v201006150915 4Master 0 5 ACTIVE org.eclipse.core.runtime_3.6.0.v20100505 6 ACTIVE org.eclipse.equinox.preferences_3.3.0.v20100503 7 ACTIVE org.eclipse.osgi.services_3.2.100.v20100503 8 ACTIVE org.eclipse.core.runtime.compatibility.auth_3.2.200.v20100517 9 ACTIVE us.elron.osgi.random_1.0.0.qualifierResolved org.eclipse.core.runtime.compatibility.registry_3.3.0.v20100520 10Master 11 11 ACTIVE org.eclipse.equinox.registry_3.5.0.v20100503 Fragments 10 12 ACTIVE org.eclipse.equinox.app_1.3.0.v20100512 13 ACTIVE org.eclipse.equinox.common_3.6.0.v20100503 14 ACTIVE org.eclipse.core.contenttype_3.4.100.v20100505-1235 15 RESOLVED us.elron.osgi.user_1.0.0.qualifier 我们看到ID为15的User bundle的状态已解决 请参见生命周期部分。 同样我们可以执行启动命令启动15来启动捆绑软件并观察该过程再次开始工作或者执行“ s ”命令查看注册到OSGi的所有服务或使用uninstall命令从OSGi中删除捆绑软件。 您可以自由发现 在本文中我试图简单地解释一下OSGi是什么它如何工作以及可以用它做什么。 希望你喜欢它。 您可以在此处下载资源。 随时通过elron [at] elron.us发表评论或联系。 我将很高兴收到您的来信。 参考 OSGi JCG合作伙伴 Elron在Ender Aydn Orak博客上的介绍。 相关文章 OSGi将Maven与Equinox结合使用 OSGI和Spring动态模块–简单的Hello World OSGi –具有服务的简单Hello World Java EE6 CDI命名组件和限定符 翻译自: https://www.javacodegeeks.com/2012/01/osgi-introduction.htmlosgi简介
http://www.zqtcl.cn/news/167758/

相关文章:

  • 拖拽做网站cms系统设计
  • 村建站什么部门网站建设步骤图
  • 移动端网站建设的意义中工信融网站建设
  • 网站设计宽屏尺寸盐城网站建设渠道合作
  • 网站所有者查询hexo做网站
  • 杭州专业网站设计策划大数据网站建设和
  • 建一个自己的网站需要多少钱泰州网站快速排名优化
  • 企业网站的建设企业湖南网络推广
  • 山西省建设厅投诉网站郴州新网交友手机版
  • 营销网站建设是什么flash个人网站欣赏
  • 网站建设最简单的教程视频教程建设厅注册中心网站首页
  • 免费做网站凡科wordpress 分享到微信 插件
  • 购物网站项目建设内容有啥网站是专做时尚穿搭
  • 网上下载的网站模板怎么用wordpress 注册密码
  • 网站建设免费国外撤销网站备案申请书
  • 佛山做网站那家好网站建设公司如何盈利
  • 傻瓜建网站设计感网站
  • 北京网站优化软件陕西省建筑信息平台
  • 广州越秀建网站济南房产网新开楼盘
  • 线上咨询预约网站建设方案保定外贸网站制作
  • 网站流量如何增加提高工作效率的措施
  • 龙湖镇华南城网站建设.net 网站开发书籍
  • 域名费用和网站服务器费用是同样的吗推广营销方案
  • 安徽网站设计方案中文外贸网站有哪些
  • 衡阳手机网站设计响应式网站做多大的尺寸
  • 海尔电子商务网站建设预算灵台县门户网
  • 四川网站建设设计公司排名开发公司与建筑公司合作协议
  • 江西智能网站建设嘉定注册公司
  • 海口网站建设联系方式十大免费软文推广平台
  • 石碣镇做网站帮别人做网站开价