osgi

JVM类加载机制

爷,独闯天下 提交于 2020-08-11 17:41:26
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。与那些在编译时需 要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成 的,这种策略让Java语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销, 但是却为Java应用提供了极高的扩展性和灵活性,Java天生可以动态扩展的语言特性就是依赖运行期动 态加载和动态连接这个特点实现的。例如,编写一个面向接口的应用程序,可以等到运行时再指定其 实际的实现类,用户可以通过Java预置的或自定义类加载器,让某个本地的应用程序在运行时从网络 或其他地方上加载一个二进制流作为其程序代码的一部分。这种动态组装应用的方式目前已广泛应用 于Java程序之中,从最基础的Applet、JSP到相对复杂的OSGi技术,都依赖着Java语言运行期类加载才 得以诞生。 v 类加载的时机 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证

OSGi 系列(三)之 bundle 详解

一笑奈何 提交于 2020-08-11 03:12:33
OSGi 系列(三)之 bundle 详解 1. 什么是 bundle bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且 jar 包的物理边界也同时是运行时逻辑模块的封装边界。 2. MANIFEST.MF 规范 位置:META-NF/MANIFEST.MF 文件格式 属性声明的一般格式是 name: value 一行不超过 72 个字符,下一行则由单个空格字符开始 3. bundle 常用标识符 标识符 说明 Bundle-Category 描述用逗号分隔的分类名称 Bundle-Activator 启动和停止 bundle 的类名称 Bundle-Classpath 定义用逗号分隔的路径,包含的内容有 JAR 文件和包含类和资源的目录(bundle内部) .点号代表 JAR 文件的根目录,同时也是默认的 Bundle-Copyright 描述 bundle 的版权信息 Bundle-Description 对 bundle 的描述信息 Bundle-Localization 描述 bundle 的本地文件地址,默认值是 OSGI-INF/l10n/bundle Bundle-ManifestVers on Bundle-Name 定义了一个具有可读性的名字来标识 bundle。应该是一个简短易读没有空格的名

java.lang.LinkageError: loader constraint violation: loader

不问归期 提交于 2020-08-10 19:22:20
问题 Here I am getting below error while connect using HttpPost, Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/osgi/framework/internal/HostBundleClassLoader) previously initiated loading for a different type with name "org/apache/http/client/methods/HttpPost" And I am using OSGI bundle so I have added all required dependent files. So can anyone help me to resolve it? 回答1: The Java language is based on a single namespace . That is, the language is

java.lang.LinkageError: loader constraint violation: loader

ぐ巨炮叔叔 提交于 2020-08-10 19:22:05
问题 Here I am getting below error while connect using HttpPost, Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/osgi/framework/internal/HostBundleClassLoader) previously initiated loading for a different type with name "org/apache/http/client/methods/HttpPost" And I am using OSGI bundle so I have added all required dependent files. So can anyone help me to resolve it? 回答1: The Java language is based on a single namespace . That is, the language is

eclipse配置Tomcat找不到server选项的解决办法

≯℡__Kan透↙ 提交于 2020-07-29 03:29:17
我们在配置Tomcat的时候,有时候因为我们安装的eclipse版本问题没有server这个选项, 图1 没有发现server选项 不用着急,可以按照以下方法来添加。 在主页选择helper,然后选择install new software(意思是安装新软件(插件)) 在work with上添加http://download.eclipse.org/releases/kepler地址,点击add,然后弹出一个框,点击确定即可 第二个步骤之后可能会等待比较久的时候(可能每个地区不一样)。之后选择‘Web,XML, Java EE and OSGi Enterprise Development '下的JST Server AdaptersExtensions(勾选这个就可以)即可。然后等待下载安装成功。 4.安装成功后悔提示你重启,此时重启之后再打开window->preferences,就可以看到server这个选项了。 来源: oschina 链接: https://my.oschina.net/u/4335287/blog/4328461

深入理解JVM(③)判断对象是否还健在?

跟風遠走 提交于 2020-07-25 16:16:44
前言 因为Java对象主要存放在Java堆里,所以垃圾收集器(Garbage Collection)在对Java堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(不被引用了)。 判断对象是否健在的算法 1.引用计数算法 引用计数算法,很容易理解, 在对象中添加一个引用计数器,每有一个地方引用它时,计数器值就加一;当引用失效是,计数器值就减一;任何时刻计数器为零的对象就是不可以能再被使用的对象 。 引用计数算法的原理简单,判定效率也很高。市面上也确实有一些技术使用的此类算法来判定对象是否存活,像ActionScript 3 的FlashPlayer、Python语言等。但是在主流的Java虚拟机里面都没有选用引用计算法来管理内存,主要是使用此算法时,必须要配合大量的额外处理才能保证正确的工作,例如要解决对象之间的相互循环引用的问题。 public class OneTest { public Object oneTest = null; private static final int _1MB = 1024 * 1024; private byte[] bigSize = new byte[256 * _1MB]; /** * 这个成员属性的唯一意义就是占点内存,以便能在GC日志中看清楚是否有回收过。 */ @Test public void

how to unregister an OSGi service

折月煮酒 提交于 2020-06-16 04:40:10
问题 I have the following test code, which should register and than unregister a test service. I tested it in an Eclipse 4.5.2 Mail-Demo appliation. The problem is that the service is not unregisted, the second call for the service is not null. BundleContext bundleContext = Activator.getDefault().getBundle().getBundleContext(); ServiceRegistration<ITestService> registration = bundleContext.registerService(ITestService.class, new TestService(), null); ServiceReference<ITestService> serviceReference

script to run commands at start of apache karaf

久未见 提交于 2020-05-30 05:29:21
问题 When i run karaf, i need to install some features into it. For that i give commands like: install -s mvn:org.apache.derby/derby/10.8.2.2 feature:install jndi jpa transaction http I want to automate this thing as i want to start karaf by itself on reboot. I have read that i can start it on reboot by using wrapper:service. But next question to my mind is how will i give these commands. I have read that it can be done using etc/shell.init.script . But i am not able to understand examples given

What is the intended use case for Bundle-Classpath in OSGI bundles

回眸只為那壹抹淺笑 提交于 2020-05-24 14:35:14
问题 I am trying to understand the intended use case for Bundle-Classpath in OSGI bundles. Here is my understanding, please help me understand if this is correct. Let's say I am working on creating an OSGI bundle which will be deployed in an ecosystem of other bundles. The bundle I am working on needs some other bundles, but they are not loaded/exported in this ecosystem, and I do not have control on what the ecosystem exports. In such a scenario, I can put these bundles inside some directory (say

Java程序员如何了解继承和接口这两个概念

孤街浪徒 提交于 2020-05-08 16:17:23
  首先,关于Java言语来说,接口(interface)占据着非常重要的方位,假如没有接口,Java言语不管从功用性上,仍是扩展性上,都会大打折扣。   从技能体系结构上来看,Java言语借助于接口,能够完结三部分功用,其一是接口界说了Java言语傍边的“全抽象”概念。借助于接口的全抽象概念,Java能够完结界说和完结的别离,这样能够更有利于Java言语提出的“按角色开发”的相关概念,然后能够让Java言语能够适配更多的技能体系(容器),这关于Java言语的敏捷遍及具有非常重要的含义。   其二是接口为Java赋予了较强的扩展性,而借助于接口的扩展性,Java言语能够在不同时期找到自己的方位,然后完结持续发展。比方在Web开发、移动互联网开发和大数据开发时代,Java言语都能够得到许多的运用,这其间接口起到了非常要害的效果。   其三是接口为Java的模块化奠定了根底,这一点在JDK9之后,得到了较为完全的体现。实际上,Java言语的模块化问题一向困扰着许多程序员,Java言语自身一向没有为模块化供给根底支撑,这也促进了OSGI等模块化框架得到了广泛的运用,但是到JDK9之后,Java言语供给了模块化支撑,这使得Java言语的动态扩展性能得到了根底性地支撑。   Java中的接口和承继并不是解决相同的问题,实际上,Java言语傍边的承继在许多场景下并不建议运用,原因是承继本身属于