当前位置: 首页 > 知识库问答 >
问题:

Glassfish 3.1.2.2和重用包ID

郑哲彦
2023-03-14

这是我观察到的一个有趣的想法,它让我困惑了一段时间。

我使用的是Glassfish 3.1.2.2,我在其上部署了多个OSGi包。

当我想用新版本/修订替换包时,我必须卸载然后安装包。

通常情况下,我假设Glassfish可以重用不再存在的旧捆绑ID,但它只是继续。例如,让我们假设Glassfish包的ID为100,而我自己的包开始从101到200。

当我卸载旧包并安装新包时,我假设包ID在101-200范围内是可重用的。

相反,我的新包有他们的ID从201到300。

我是这样卸载它们的:

uninstall <bundle id>

并按以下方式安装:

install file:<path-to-bundle>

如何解决这个问题,使Glassfish重用旧的捆绑包ID?

编辑:

我在glassfish3\glassfish\domains\domain1\osgi-cache\felix中找到了一个名为bundle.id的文件夹,其中包含一个名为bundle0的文件,该文件只有一个数字,看起来像是一个DB序列,注意到使用的最后一个包id。

为了让我用以下包安装手动更改起始包id,我必须按照以下顺序执行以下操作:

  1. 通过GoGo控制台卸载我的包
  2. 停止GlassFish
  3. 删除glassfish3\glassfish\domains\domain1\osgi-cache\felix
  4. 中我的包的 bundle 文件夹
  5. bundle.id文件中的数字更改为一些合理的数字
  6. 启动Glassfish-它将增加bundle.id文件
  7. 中的数字
  8. 安装新版本的“我的捆绑包”

您可以想象,我不希望每次要做发布/升级时都这样做。Glassfish可以自己完成吗?还是需要创建一个脚本来完成这个任务?

共有2个答案

许彦
2023-03-14

为什么要保留相同的ID?正如BJ所提到的,你不应该这样做,所以你可能用错误的方式处理另一个问题。

郑和泰
2023-03-14

OSGi规范要求bundle ID不能重用。注意:您可以在原地更新一个包,而不是卸载/安装。更新时,包id将被保留。

 类似资料:
  • 我已经将intelliJ设置为“压缩空的中间包” 当我做重构时- 我确信曾经有一种“重命名包”的方法,而不仅仅是目录,这种机制改变了吗?我真的需要重命名我的包。 请不要将此标记为重复,因为我看到的其他地方被问到这个问题,解决方案是首先“压缩空中间包” - 我已经这样做了......我仍然无法让它工作。

  • 闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为 函数 是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。 模拟私有变量 function Counter(start) { var count = start; return { increment: function() {

  • 我刚刚将我的web应用程序从JSF托管beans迁移到CDI托管beans,我特别希望Tomcat或TomEE Plus成为首选的容器,因为我听说“OpenWebBeans”非常棒。在部署、配置和测试TomEE 1.5/CDI managed beans web应用程序之后,整个页面刷新要比Glassfish 3.1慢得多。2.2/MyFaces 2.1。9/JSF托管bean。 与玻璃鱼3.1。

  • 我正在寻找一种解决方案,可以将包含iso基本日期格式的字符串(如20190330)转换为格式化日期,如2019-03-30(欧元格式)或2019年3月30日(英国格式)或2019年3月30日(美国格式)。格式取决于用户选择的格式。库<代码>java。时间LocalDate和java。时间总体安排DateTimeFormatter似乎提供了解决方案的可能性,但我发现这些库的文档不连贯且令人困惑,我不

  • 我有相当多的包是过时的,我想更新。我尝试运行npm update:文档中所述的npm update,更新花了很长时间,最后失败了。我又尝试了几次,我将堆栈大小设置为无限,等等,但总是需要几个小时,最后失败了。 我尝试用--depth 999(不是9999)更新一个包,但也失败了。 是否有任何推荐的方法来更新所有有效的软件包? 然后我得到了一个堆超出的异常: 我将堆栈大小设置为无限,并降低了深度,但