我正忙着处理Camel和Karaf。我已经构建了一个包含两个包的项目:
我按照Jamie Goodyear的Karaf Cookbook的指示
两条路线都非常简单,我使用功能文件进行部署。它们完美地部署并且完全按计划运行:
捆绑A将文件从<?php
class loginValidation {
function validate()
{
ob_start();
session_start();
include "../../connection.php";
$id=$_POST['cid'];
$query = mysql_query("select * from advanced_subtopic where testid='$id'");
if(mysql_num_rows($query)>0){
echo "True";
} else {
echo "False";
}
}}$loginValidation=new loginValidation;
$loginValidation->validate();
移动到/tmp/in
捆绑包B将文件从/tmp/out
移动到/tmp/in2
一切都很好。
但是,如果我运行Karaf命令tmp/out2
,则只显示蓝图路径
此外,如果我运行camel:route-list
,则仅显示在套件A中定义的上下文。
重申一下,这两条路线都能正常工作,只是Java的路线没有显示在列表中。
我在这里错过了什么吗?
这是我的Java路线:
camel:context-list
Bundle Activator:
public class FileRouter extends RouteBuilder {
public void configure()
{
from ("file:/tmp/in2?noop=true")
.log("Java DSL doing the heavy lifting")
.to("file:/tmp/out2");
}
}
答案 0 :(得分:1)
Tx Souciance Eqdam Rashti。今天早上我在你的博客上工作,看看你在使用JavaDSL蓝图时的意思。
像魅力一样。
为了完整起见,这里有改变:
我的Java Route类与问题中指定的完全相同,但我完全删除了Activator,将其替换为蓝图文件。
蓝图然后如下:
<bean id="FileRouter" class="com.eightbitplatoon.learning.karaf.karafbasics.combined.FileRouter">
</bean>
<camelContext id="karafbasics-combined" xmlns="http://camel.apache.org/schema/blueprint">
<routeBuilder ref="FileRouter" />
</camelContext>
Tx的帮助!
答案 1 :(得分:0)
感谢克劳斯 - 我已经完成了Camel-SCR的材料,最终也采用了这种方法。我的想法是Camel-SCR可能是更清晰的解决方案,因为它可以很容易地将属性传递给JavaDSL路由器。
这是我的最终解决方案,为了完整性,我会关闭这个问题: 文件路由器现在看起来像这样:
public class ScrFileRouter extends RouteBuilder {
// Configured fields
private String camelRouteId;
@Override
public void configure() throws Exception {
// Add a bean to Camel context registry
AbstractCamelRunner.getRegistry(getContext(), SimpleRegistry.class).put("testString", "this is a test");
from("file:/tmp/in6?noop=true").routeId(camelRouteId)
.to("file:/tmp/out6");
}
}
基于SCR的Camel跑步者看起来像这样:
@Component(label = ScrRunner.COMPONENT_LABEL, description = ScrRunner.COMPONENT_DESCRIPTION, immediate = true, metatype = true)
@Properties({
@Property(name = "camelContextId", value = "scr-runner"),
@Property(name = "camelRouteId", value = "scr-file-router"),
@Property(name = "active", value = "true"),
})
@References({
@Reference(name = "camelComponent",referenceInterface = ComponentResolver.class,
cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY, bind = "gotCamelComponent", unbind = "lostCamelComponent")
})
public class ScrRunner extends AbstractCamelRunner {
public static final String COMPONENT_LABEL = "ScrRunner";
public static final String COMPONENT_DESCRIPTION = "This is the description for ScrRunner";
@Override
protected List<RoutesBuilder> getRouteBuilders() {
List<RoutesBuilder> routesBuilders = new ArrayList<>();
routesBuilders.add(new ScrFileRouter());
return routesBuilders;
}
@Override
protected void setupCamelContext(BundleContext bundleContext, String camelContextId)throws Exception{
super.setupCamelContext(bundleContext, camelContextId);
// Use MDC logging
getContext().setUseMDCLogging(true);
// Use breadcrumb logging
getContext().setUseBreadcrumb(true);
}
}
我密切关注Camel SCR网站上的信息,几乎让事情顺利进行。然后我使用了提出的原型(camel-archetype-scr),它工作得很好。
所以最后我还要对我的POM文件进行一些更改(实际上只使用Archetype提供的POM。)
感谢所有人的帮助。我想我现在能够获得一些牵引力。
干杯!