equinox在standalone application中启动

     前一段时间,利用Felix作为osgi container,测试了osgi bundle的开发,并通过和springdm的结合,实现对于service发布和引用的实现。

     现在希望把以前实现的一些bundle和界面显示结合起来,当然可以把Felix Container和应用bundle发布在Web Container中,然后通过Client端(可以是RCP或者Browser)来显示内容,但是作为一个技术研究方向,如何实现这些bundle在Eclipse Equinox中应用,一直困扰着我,于是想把通过Eclipse RCP显示内容和Equinox的应用结合起来,实现这两方面技术的融合。

     作为bundle能够在java程序中运行的第一步,就是需要在java程序中,把Equinox osgi container启动起来和加载自己实现的bundle。在Eclipse的例子中有一个:org.eclipse.equinox.servletbridge实现了在Web Container中启动Equinox Container,可惜的是,这个例子中应用的Equinox版本较低,和我目前应用的Eclipse3.5版本不一致(在作Felix的时候也遇到了相同的问题,例子是1.x版本的,但是在2.0版本时,Felix做了很大的结构调整),所以想拿现成的例子不现实了。

      于是就自己开始动手,尝试实现Equinox嵌入到普通的Java Application中。在前面的例子中提到了在Java Application中启动Equinox利用EclipseStarter(org.eclipse.core.runtime.adaptor.EclipseStarter,看来Equinox还是主要服务Eclipse了,否则为什么不叫EquinoxStarter,其实在刚开始寻找入口时,我的确是去找这样的一个类了,很杯具),其中有一个main函数,可以直接的执行,在最初的实验中,执行这个main总是报错:

!ENTRY org.eclipse.osgi 4 0 2011-09-15 16:27:22.610
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
    at EclipseStarter.run(EclipseStarter.java:372)
    at EclipseStarter.run(EclipseStarter.java:181)
    at EclipseStarter.main(EclipseStarter.java:152)
     同时,也无法得到osgi的控制台,不知道是否Equinox启动成功,也不知道自己的bundle是否已经加载,很是郁闷!按照错误的内容只能去仔细的分析config.ini中的配置了,配置很多很多,eclipse的help中有具体的解释。

    通过阅读帮助,发现了一个eclipse.ignoreApp的配置参数,如下的解释:

if set to "true" then the main launching thread will not start the default application and will proceed in shutting down the platform and exiting. The default value is "false". This is different than the eclipse.application.launchDefault option because the main thread will not wait for an application descriptor service to be launched

      看了半天,好像和上面的问题没有关系,试着设了一下:eclipse.ignoreApp=true。这个错误不报了!在认真地分析一下,认为这个参数是控制Equinox Container是否启动Eclipse的开关,如果为true,则只启动Osgi Container,而不启动Eclipse的应用了,所以就不报错了,按照这样的逻辑,通过这样的设置,Equinox Container作为System bundle应当启动成功了。

     可是看不到osgi的控制台,无法看到bundle的状态,就无法判断了。继续深入学习config.ini文件的配置项,发现了osgi.console,需要设置一个端口,于是设置了一个9090,启动时显示Listening on port 9090 ... ,应当通过telnet可以练上去。

      真没想到在win7的command窗口输入telnet后竟然说找不到这个指令,连忙上网查了一下,原来win7为了安全的原因,竟然默认情况下没有安装telnet!只能装一下了,不过又解决了操作系统的一个问题。装好后,在command上执行:

telnet localhost 9090,终于见到了久违的 "osgi>";利用ss查了一下,系统bundle和自己写的测试bundle状态正常,说明,在java application中启动Equinox Container成功了。

JCL(Jar Class Loader):灵活的开源Java类动态加载器 本文还有配套的精品资源,点击获取 简介:JCL(Jar Class Loader)是一个允许在运行时动态加载Java类的开源项目,支持定制、动态性和可扩展性。它增强了Java类加载机制,允许开发者在不停机的情况下更新或替换类,特别适用于开发和调试环境。JCL兼容Web应用,支持热部署和第三方库冲突处理,同时与Spring框架集成,提高了应用的灵活性。此外,JCL兼容OSGi... 阅读详情

相关推荐

standalone:独立版可让您从Python模块访问Django Shell

单机版 使用Standalone,您可以从Python模块访问Django Shell,也可以将django模块作为可访问Django Shell的独立模块运行。 安装 pip install standalone 配置 1.使用当前项目的Django shell。 用于在同一Django项目中的模块中访问项目mysite的外壳的配置。 # mysite.polls.views.py import standalone standalone . run ( 'mysite.settings' ) from django . contrib . auth . models import User User . objects . all () # Users from project mysite 2.使用另一个项目的Django Shell。 用于在项目mysite中的模块中访问辅助

OSGi#2:编程方式使用Equinox

今天来看下怎么在程序中使用Equinox容器。 startup 上一篇文章中,我们通过下面的命令启动了容器, > java -jar org.eclipse.osgi_3.10.2.v20150203-1939.jar -console 1 通过查看org.eclipse.osgi_3.10.2.v20150203-1939.jar这个jar包...

weixin_33694620的博客 188

双闭环PWM整流器VOC控制 +SVPWM调制仿真(Simulink仿真实现)

内容概要:本文围绕城市空中交通环境下多无人机协同路径规划问题展开深入研究,重点探讨了在包含建筑物、禁飞区、动态威胁等复杂约束条件下,如何利用仿生优化算法(如布谷鲶鱼优化算法CCO、灰雁优化算法GGO、田忌赛马优化算法THRO)实现安全、高效的多无人机路径规划。文章提出了一种分层规划策略,融合全局路径规划与局部动态避障机制,构建了综合考虑路径长度、威胁暴露度、高度变化及地形碰撞风险的多目标优化模型。通过Matlab仿真平台对多种算法进行对比实验,系统评估了各算法在路径安全性、收敛速度、优化性能和鲁棒性方面的表现,并深入分析了现有方法的局限性,对未来研究方向如动态环境适应、通信受限下的分布式协同等进行了展望。; 适合人群:具备一定编程基础,熟悉Matlab/Simulink仿真环境,从事无人机系统设计、智能交通、自动化控制、路径规划算法研究等相关领域的科研人员及高校研究生。; 使用场景及目标:①应用于城市空中交通系统中多无人机的协同任务执行与动态避障;②为复杂威胁环境下多智能体系统的路径规划提供先进算法支持与仿真验证框架;③辅助研究人员深入理解并复现仿生优化算法在高维、多约束路径规划问题中的具体实现与性能差异。; 阅读建议:此资源以Matlab代码实现为核心,紧密结合理论建模与仿真实验,建议读者在学习过程中重点关注算法的设计原理、参数调优策略及仿真结果的可视化分析,结合文中提供的实验数据进行横向对比,以深刻把握不同仿生算法的搜索机制、适用场景及其在实际工程应用中的潜力与挑战。

maven-bundle-plugin插件, 用maven构建基于osgi的web应用

  maven-bundle-plugin 2.4.0以下版本导出META-INF中的内容到MANIFEST.MF中   今天终于把maven-bundle-plugin不能导出META-INF中的内容到Export-Package中的问题解决了,因为产品用的是OSGI框架,用到的第三方JAR包需要加载META-INF/XX/XX.xml这个内容,但在运行的时候getResou...

weixin_34197488的博客 960

Cocos Creator+微信小游戏:如何用wxDownloader实现资源动态加载与热更新

本文深入探讨了在Cocos Creator开发微信小游戏时,如何利用wxDownloader有效应对主包体积限制,实现资源的动态加载与热更新。文章详细介绍了从项目配置、资源标记到初始化加载的完整流程,并重点解析了基于MD5 Cache的缓存策略与版本控制方案,旨在帮助开发者构建稳健高效的资源管理体系,优化游戏启动速度与更新体验。

css33的专栏 822

VL53L1X移植到STM32实战记录,使用软件IIC(附源代码)

序言 VL53L1X是一个很小又很优秀的测距传感器,它相比于上一代VL53L0X有着不小的提升,这次毕业设计打算将这个传感器用起来,就来移植了一下,遇到的坑怎么说还是有一些,故在此分享给大家。 开发环境 IDE:Keil V5 STM32CubeMX ,使用HAL库 具体操作 获取官方库并进行移植 这一步是移植的基础,首先从官方把API库下下来,并添加到IDE中: 适配硬件 这里由于不同的硬件平...

wmdscjhdpy的博客 1万+

flink部署模式(一)- standalone和application

这里采用docker方式部署实现flink的standalone和application部署模式,由于local模式是standalone模式的特例,所以这里就不再演示。Dockfile 镜像构建登录本地镜像仓库:推送镜像:测试镜像可用性创建网络开启jobmanager 开启taskmanager Standalone Mode on Docker 创建网络开启jobmanager 开启taskmanager 提交任务到standalone集群............

weixin_38251332的博客 1302

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

LD14激光雷达与STM32F103C8T6(标准库)获取雷达360度数据(1)

qq_54206194的博客 3897

Equinox 和 OSGI 介绍

1.       背景信息 Equinox项目是Eclipse开源组织提供的OSGi框架的实现。Eclipse自3.0版本开始,其内核移植到OSGi框架上。通过OSGi框架强大的组件控制,交互和管理能力,再加上Eclipse插件的自有特点,Eclipse开源框架得到了跳跃式的发展。同时,OSGi规范得益于Eclipse IDE环境庞大的...

wangpengfei2011的博客 1022

华为OD机试真题 新系统 2026-04-22 C++ 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 166

AutoSAR配置视频讲解:新建DaVinci工程

AutoSAR实验视频讲解:闪烁一颗LED实验【新建DaVinci工程】 上一篇 | 下一篇 | 总目录 实验架构图 视频本频放在了文末,下图描述了本次实验配置内容在AutoSAR架构中的位置,供大家参考 实验内容 本节课程讲解新建DaVinci工程,听上去新建工程很简单,但是还是需要很多的准备工作和细节。主要内容是新建工程和导入dbc文件和导入arxml文件的方法 主要步骤 新建DaVinci工程 导入.dbc通信矩阵文件 导入Mcal的arxml文件 实验视频2:Mcal配置 提示:版权所在,违

雪云飞星的博客 6275

ESP32-IDF开发之旅 网络篇⑩ Web配网

本文介绍了基于ESP32S3的Web配网实现方案。作者通过移植开源项目,在ESP32S3上实现了WiFi配置功能,包括AP模式创建、HTTP服务器搭建、NVS存储读写等核心功能。文章详细解析了代码结构,包含WiFi初始化、事件处理、NVS存储管理和HTML页面服务等关键模块。实现方案采用AP+STA双模式,支持通过网页扫描WiFi并保存配置信息,适用于物联网设备的网络配置场景。代码中使用了FreeRTOS任务、ESP-IDF事件组等技术,并提供了完整的错误处理和日志记录功能。

单片机菜鸟哥的博客 350

MyEclipse打不开

!SESSION 2009-09-25 11:00:50.936 -----------------------------------------------eclipse.buildId=M20070921-1145java.version=1.5.0_01java.vendor=Sun Microsystems Inc.BootLoader constants: OS=win32, ARCH

xiaowusheng的专栏 1567

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于Equinox开发系统的总结

Equinox,我不想多做介绍,相信很多人都有所了解了,不了解的可具体去www.eclipse.org/equinox看看。最近基于equinox做了一个系统,还是碰到了一些问题,当然也得到了在插件体系架构下的不少优点,在这里也做个总结。总体而言,基于equinox做开发对于大多数java开发人员来说应该不会有太多改变的感觉,最多改变的感觉应该是带给设计师,设计师需要有发挥插件体系架构优点以及减少...

暴风一簇的专栏 (roseone) 247

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Equinox容器的搭建

OSGi是基于Java的服务平台的规范,本质是将Java面向对象的开发转向面向组件和服务的开发,具有服务组件模块化,动态加载应用等特点。Equinox 则是Eclipse所使用的OSGi框架,是Eclipse强大的插件体系的基础,是Eclipse著名的PDE开发环境的底层,Eclipse的稳定可靠性也为该框架带来了声誉。   Equinox是EclipseRT工程的一部分,为Eclipse...

clamaa的专栏 174

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Equinox p2 详细图示讲解(Eclipse 4.3)

Equinox p2 Eclipsercp产品中通过配置Equinoxp2,从而实现新版本的检测,更新功能。 参考文章: 原文:http://javaarm.com/faces/display.xhtml?tid=3455&page=1 https://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application

能量守恒洛的专栏 7297

flink部署模式(四)- standalone k8s application部署模式

Dockerfile 构建镜像NOTE: 需要镜像上传到docker镜像私服(或者在每个node节点都构建相同的镜像),并保证所有k8s node节点都有权限链接到此私服。登录本地镜像仓库重新打标签推送镜像测试镜像可用性创建configmap 创建jobmanager 创建taskmanager 创建jobmanager service 创建namespace设置命名空间首选项创建 Flink 集群查看服务信息查看日志信息删除服务删除ns及下面所有服务查看pod详情查看集群node详情查看configmap

weixin_38251332的博客 769

Spark 之 standalone 模式多个application(作业)资源调度

目录 1、默认情况 2、修改配置 1、默认情况 standalone集群对于同时提交上来的多个作业,仅仅支持FIFO调度策略,也就是先入先出;默认情况下,集群对多个作业同时执行的支持是不好的,没有办法同时执行多个作业;因为先提交上来的每一个作业都会尝试使用集群中所有可用的cpu资源,此时相当于就是只能支持作业串行起来,一个一个运行了。 2、修改配置 我们希望能够...

py_tamir的博客 1362

python独立运行环境_为Python创建独立环境

I'm developing a tool based on Python, and I need to distribute this tool for users without technical skills. My way to distribute the tool was to create an installer with all the requirements, includ...

weixin_39726131的博客 564

UE5 StandAloneApplication

using UnrealBuildTool; using System.Collections.Generic; [SupportedPlatforms(UnrealPlatformClass.All)] public class StandaloneApplicationTarget : TargetRules { public StandaloneApplicationTarget(TargetInfo Target) : base(Target) { Type = .

opk8848的专栏 747

Python中四种运行其他程序的方式

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码。为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数.

杰瑞的专栏 5万+
上一篇: 利用log4j的JDBCAppender把日志写入数据库中
下一篇: osgi控制台在RCP程序中开发的应用
tkxing
博客等级 码龄19年 1粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值