标签: apache-karaf

OSGi功能卸载工作,但仍然安装了捆绑包

编辑:用最新信息更新了这个问题...

我遇到了依赖功能背靠背"功能:卸载"命令的问题.OSGi回应"状态正在改变......",但通过接受其他请求,我们遇到了问题.

奇怪的是,这会导致功能卸载成功,但捆绑卸载失败.我们通过尝试适当地订购卸载请求并在步骤之间添加延迟来解决这个问题,但我希望有一个更强大的解决方案.

正如所建议的那样,我也尝试在步骤之间添加"osgi:refresh"......同样的行为.是否有另一种方法可以检测"刷新包"是否仍在运行以延迟后续请求等?

这是详细信息......

karaf @ root>功能:卸载PolicyUtil
karaf @ root>功能:卸载Policy1
karaf @ root>功能:卸载策略2
通过线程"刷新包"对包"file:/policy2.jar"进行状态更改.
karaf @根>特点:卸载策略3
在捆绑"文件:/policy3.jar"进步状态改变的线程"刷新包".
karaf @ root>功能:卸载Policy4
karaf @ root>功能:卸载Enabler1
通过线程"刷新包"对包"file:/enabler1.jar"进行状态更改.
karaf @ root> features:卸载Enabler2
状态正在通过线程"刷新包"对包"file:/enabler2.jar"进行状态更改.

之后...我们最终安装了未安装的功能(正确),但仍安装了一些软件包(不正确)

OSGi的:列表

[277] [已安装] [] [] [60] Policy2
[278] [已安装] [] [] [60] Policy3
[280] [已安装] [] [] [60] Enabler1
[281] [已安装] [] [] [60]启动器2

特点:列表

[uninstalled] [1.0] PolicyUtil repo-0
[uninstalled] [1.0] Policy1 repo-0
[uninstalled] [1.0] Policy2 repo-0
[uninstalled] [1.0] Policy3 repo-0
[uninstalled] [1.0] Enabler1 repo-0
[uninstalled] [1.0] Enabler2 repo-0

osgi fuse apache-felix apache-karaf apache-servicemix

4
推荐指数
1
解决办法
1万
查看次数

记录骆驼异常并发送到死信通道

我在卡拉夫内有一条骆驼路线,为此我添加了一个死信通道。这是为了处理路由失败并且我想保留问题消息并记录原因的情况。由于无法异步处理某些处理,因此无法将异常返回给调用应用程序。

通过阅读文档并尝试了多种情况,我不清楚如何将异常记录到Karaf的日志中以及将原始消息存储到死信队列中。

这是我所拥有的内容的摘录:

<bean id="deadLetterQueue" class="org.apache.camel.builder.DeadLetterChannelBuilder">
    <property name="deadLetterUri" value="activemq:dead.letter.queue"/>
    <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
</bean>

<bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
    <property name="maximumRedeliveries" value="1"/>
    <property name="redeliveryDelay" value="1000"/>
</bean>

<camelContext id="notification" errorHandlerRef="deadLetterQueue"
    trace="false" xmlns="http://camel.apache.org/schema/blueprint">
    <onException>
        <exception>org.xyz.exceptions.unchecked.notificationException</exception>
        <log logName="notifications" loggingLevel="ERROR"
            message="Exception from notification Camel route" />
    </onException>

    <route id="DoSomething" errorHandlerRef="deadLetterQueue">
        <from uri="activemq:notification.in" />
        <log logName="notifications" loggingLevel="TRACE"
            message="Notification route initiated" />
        <bean ref="NotificationProcessor" method="doStuff" />
    </route>
</camelContext>
Run Code Online (Sandbox Code Playgroud)

如果删除“ onException”结构,则在所有异常情况下,源消息都会出现在死信队列中,但不会记录。

如果我按上述方式运行,则异常跟踪将记录到Karaf的日志中(如果它是“ notificationException”),但是相关的源消息不会回滚到死信队列,而会消失在以太币中(大概是因为它认为我是ve在“ onException”结构中进行了处理)。

看了不同类型的错误处理程序后,我尝试改为向DeadLetterChannelBuilder添加内容,例如...

<property name="logName" value="notifications"/>
<property name="level" value="ERROR"/>
Run Code Online (Sandbox Code Playgroud)

...但是这些不是合法财产。

这也让我感到震惊,不得不在onException子句中明确列出不同的异常是不正确的。

因此,如何获取死信通道以记录异常跟踪以及将消息放入队列?死信通道可能不是正确的处理程序-在这种情况下,我对自动重新交付并不真正感兴趣。

感谢您的指导,

J.

logging exception-handling apache-camel apache-karaf

4
推荐指数
2
解决办法
1万
查看次数

在servicemix中安装功能

我正在运行Apache servicemix 4.5.2.我想安装一个功能,即一个jar文件.我想要的功能是jtidy.

pom依赖是:

<dependency>
    <groupId>jtidy</groupId>
    <artifactId>jtidy</artifactId>
    <version>4aug2000r7-dev</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

而存储库是

http://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev/jtidy-4aug2000r7-dev.jar

我知道命令功能:安装webconsole,例如但jtidy不在我的功能:列表中.我也尝试过使用addurl命令,但它没有用.(addurl mvn:http://repo1.maven.org/maven2/jtidy/jtidy/4aug2000r7-dev)Karaf文档建议使用Features XML架构添加功能描述符,但遗憾的是链接已损坏.

要知道我做的是下载jtidy.jar并将其复制到我的deploy目录.它有效,但我不认为这是正确的方法.

有人知道如何在servicemix中正确安装jtidy吗?

谢谢!

java jtidy maven apache-karaf apache-servicemix

4
推荐指数
1
解决办法
3997
查看次数

如何使用apache camel验证xsd?

我正在使用apacheservicemix,我尝试使用apache camel验证xml文档.我有这条名为students_route.xml的路线:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
  http://www.osgi.org/xmlns/blueprint/v1.0.0
  http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<route>
    <from uri="file:project/students.xml"/>
    <doTry>
    <to uri="validator:file:project/students.xsd"/>
    <to uri="file:valid"/>
    <doCatch>
        <exception>org.apache.camel.ValidationException</exception>
        <to uri="file:invalid"/>
    </doCatch>
    <doFinally>
        <to uri="file:finally"/>
    </doFinally>
    </doTry>
</route>
</camelContext>
</blueprint>
Run Code Online (Sandbox Code Playgroud)

我创建了3个目录:valid,invalid和finally.我在karaf"start students_route.xml"中运行后没有任何反应.当我查看日志时,我得到的错误只是这样的一些消息:"路由:route2已启动并消耗:Endpoint [file://project/students.xml]".我想象一个文件应该在有效/无效的情况下创建目录xml文件是否有效.

我是这些技术的新手,我不知道如何使这项工作.我将衷心感谢您的帮助.先感谢您!

xml validation xsd apache-camel apache-karaf

4
推荐指数
1
解决办法
6663
查看次数

在 Karaf 上将堆内存设置为 4096MB 以上

我正在使用需要大量内存的 java 应用程序,并且我希望能够将 JVM 的最大可用内存设置为高于 4096MB 的值,例如 8192MB。

我尝试使用以下参数:

wrapper.java.maxmemory
Run Code Online (Sandbox Code Playgroud)

这似乎在 4096MB 阈值下工作正常,但高于 4096MB 阈值则不然(它卡在 3.7GB 左右)。

我使用的是 64b JVM。

阻止我超过 4096MB 的代码在哪里?

java jvm apache-karaf karaf

4
推荐指数
1
解决办法
2931
查看次数

捆绑包的部署顺序

我有一个关于 OSGI 捆绑包部署的问题。

我有 7 个包,需要按照严格的顺序进行部署,否则我会收到 no class found 错误。部分包用作静态库,部分导出 OSGI 服务。

在OSGI应用程序中这个问题通常是如何解决的?

osgi apache-felix apache-karaf blueprint-osgi

3
推荐指数
1
解决办法
4412
查看次数

清理 apache-karaf 缓存的命令

有没有命令可以清理karaf容器?即)我正在尝试创建一个捆绑包并在 apache-karaf-2.3.10 中多次安装该捆绑包。经过一定次数的尝试后,karaf 的性能未达到预期。有时名称不会出现,而是会出现包的绝对路径。所以我期待 karaf shell 命令来清理数据缓存文件夹,以便 karaf 回到原始状态(类似于恢复出厂设置)。

java osgi apache-karaf karaf

3
推荐指数
2
解决办法
1万
查看次数

骆驼交换分裂期间丢失的财产

我有以下骆驼路线设置:

<route id="firstRoute">
    <from uri="..." />

    <!-- This processor puts a list of items as the out body -->
    <process ref="collectItemsProcessor" />

    <!-- Now all items should be processed one by one: -->
    <split>
        <simple>${body}</simple>
        <to uri="direct:secondRoute" />
    </split>
</route>

<route id="secondRoute">
    <from uri="direct:secondRoute" />

    <process ref="itemProcessor" />
</route>
Run Code Online (Sandbox Code Playgroud)

itemProcessor我想计算通过将属性放入交换而成功处理的项目数:

exchange.setProperty("PROCESSED_ITEMS", exchange.getProperty("PROCESSED_ITEMS", Integer.class) + 1);
Run Code Online (Sandbox Code Playgroud)

由于某种原因,每次调用处理器时,该属性都会再次为空。文档说:

Exchange 还在其整个生命周期内保存元数据,这些元数据存储为可使用各种 getProperty(String) 方法访问的属性。

https://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html

最初在 中设置属性时collectItemsProcessor,会保留该值。我怀疑每次调用分割路由时都会复制交换,但是我怎样才能真正保留“整个生命周期内的元数据”?

java osgi apache-camel blueprint apache-karaf

3
推荐指数
1
解决办法
3550
查看次数

org.osgi.framework.BundleException:无法解析:缺少要求:osgi.wiring.package;(osgi.wiring.package=org.json)

我是 Java/ Karaf 4.0.9/ Maven/ Pom/ Camel 的新手,我无法解决这个问题

文件中的Json部分pom.xml,这里我改了很多Json版本,但没有用。

            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20151123</version>
            </dependency>
Run Code Online (Sandbox Code Playgroud)

这里我附上了我的Pom.xml文件,我用谷歌搜索了一下。在 GSON 中遇到同样的问题,但我不知道如何解决 felix 中的问题。

        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
              http://maven.apache.org/maven-v4_0_0.xsd">

            <modelVersion>4.0.0</modelVersion>

            <groupId>PaxelESBNotification</groupId>
            <artifactId>PaxelESBNotification</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>jar</packaging>

            <name>A Camel Blueprint Route</name>

            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            </properties>

            <dependencyManagement>
                <dependencies>
                    <!-- Camel BOM -->
                    <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-parent</artifactId>
                        <version>2.16.5</version>
                        <scope>import</scope>
                        <type>pom</type>
                    </dependency>
                </dependencies>
            </dependencyManagement>

            <dependencies>
                <!-- Camel -->
                <dependency>
                    <groupId>org.apache.camel</groupId>
                    <artifactId>camel-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.apache.camel</groupId>
                    <artifactId>camel-rabbitmq</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.json</groupId>
                    <artifactId>json</artifactId>
                    <version>20151123</version>
                </dependency> …
Run Code Online (Sandbox Code Playgroud)

java osgi maven apache-felix apache-karaf

3
推荐指数
1
解决办法
7302
查看次数

Apache Karaf (4.2.6) shell:无法安装 Webconsole

我正在尝试执行一项功能:在 Karaf 版本 4.2.6 中安装 webconsole,但在我尝试设置 Karaf 的每台计算机上,我收到此错误消息:

Error executing command: Error:
        Error downloading mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.instance/4.2.6
Run Code Online (Sandbox Code Playgroud)

无论是 Windows 还是 Linux Mint,我都无法安装 Webconsole。我已经卸载并重新安装了 Java 1.8.0_241 和 Maven 3.6.3,并在两个操作系统上设置了各自的环境变量。

我错过了什么吗?

这是完整的控制台日志:

org.apache.karaf.features.internal.util.MultiException: Error:
        Error downloading mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.instance/4.2.6
        at org.apache.karaf.features.internal.download.impl.MavenDownloadManager$MavenDownloader.<init>(MavenDownloadManager.java:91)
        at org.apache.karaf.features.internal.download.impl.MavenDownloadManager.createDownloader(MavenDownloadManager.java:72)
        at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:457)
        at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:452)
        at org.apache.karaf.features.internal.region.Subsystem.downloadBundles(Subsystem.java:452)
        at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:224)
        at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:393)
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1062)
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:998)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
        Suppressed: java.io.IOException: Error downloading mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.instance/4.2.6
                at org.apache.karaf.features.internal.download.impl.AbstractRetryableDownloadTask.run(AbstractRetryableDownloadTask.java:77)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
                at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
                ... 3 more
        Caused by: java.io.IOException: …
Run Code Online (Sandbox Code Playgroud)

java installation maven apache-karaf

3
推荐指数
1
解决办法
1710
查看次数