【问题标题】:How to organize a large karaf blueprint.xml?如何组织一个大的 karaf blueprint.xml?
【发布时间】:2016-07-09 12:50:42
【问题描述】:

我有一个 blueprint.xml 用于在 Servicemix 下的 Karaf 3.5.6 中部署的骆驼应用程序,它看起来有点类似于下图所示:-

<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
    license agreements. See the NOTICE file distributed with this work for additional 
    information regarding copyright ownership. The ASF licenses this file to 
    You under the Apache License, Version 2.0 (the "License"); you may not use 
    this file except in compliance with the License. You may obtain a copy of 
    the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. -->

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf"
    xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
    xsi:schemaLocation="
        http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

    <bean id="jsonRPCProcessor"
        class="com.orchestratorservice.basecomponent.processor.JSONRPCProcessor">
        <argument ref="myTemplate" />
        <argument>
            <map>

                <!-- Order Endpoints -->
                <entry key="getMarketplaceOrders" value-ref="getOrdersWFInfo" />
                <entry key="setStatusToReadyToShip" value-ref="setStatusToReadyToShipWFInfo" />
                <entry key="getOrderItemStatus" value-ref="getOrderItemStatusWFInfo" />
                <entry key="updateItemStatus" value-ref="updateOrderItemStatusWFInfo" />
                <entry key="createForwardManifest" value-ref="createForwardManifestWFInfo" />

                <!-- ERP Endpoints -->
                <entry key="ERP.insertSeller" value-ref="insertSellerWFInfo" />

            </map>
        </argument>
        <argument ref="exceptionHandler" />
    </bean>

    <!-- Order Beans -->

    <bean id="orderErrorResponseGenerator"
        class="com.orchestratorservice.adapter.order.OrderErrorResponseGenerator"></bean>

    <bean id="getOrdersWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:getMarketplaceOrders" />
        <argument
            value="com.orchestratorservice.adapter.order.request.GetMarketplaceOrdersRequest" />
        <argument
            value="com.orchestratorservice.adapter.order.response.OrderResponse" />
        <argument ref="orderErrorResponseGenerator" />
        <argument>
            <list>
                <value>100</value>
                <value>101</value>
            </list>
        </argument>
    </bean>

    <bean id="setStatusToReadyToShipWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:setStatusToReadyToShip" />
        <argument
            value="com.orchestratorservice.adapter.order.request.UpdateOrderStatusReadyShipRequest" />
        <argument
            value="com.orchestratorservice.adapter.order.response.OrderResponse" />
        <argument ref="orderErrorResponseGenerator" />
        <argument>
            <list>
                <value>110</value>
                <value>111</value>
            </list>
        </argument>
    </bean>

    <bean id="getOrderItemStatusWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:getOrderItemStatus" />
        <argument
            value="com.orchestratorservice.adapter.order.request.GetOrderItemStatusRequest" />
        <argument
            value="com.orchestratorservice.adapter.order.response.OrderResponse" />
        <argument ref="orderErrorResponseGenerator" />
        <argument>
            <list>
                <value>120</value>
                <value>131</value>
            </list>
        </argument>
    </bean>

    <bean id="updateOrderItemStatusWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:updateItemStatus" />
        <argument
            value="com.orchestratorservice.adapter.order.request.UpdateOrderItemStatusRequest" />
        <argument
            value="com.orchestratorservice.adapter.order.response.UpdateOrderItemStatusResp" />
        <argument ref="orderErrorResponseGenerator" />
        <argument>
            <list>
                <value>140</value>
                <value>151</value>
            </list>
        </argument>
    </bean>

    <bean id="createForwardManifestWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:createForwardManifest" />
        <argument
            value="com.orchestratorservice.adapter.order.request.CreateFwdManifestReq" />
        <argument
            value="com.orchestratorservice.adapter.order.response.OrderResponse" />
        <argument ref="orderErrorResponseGenerator" />
        <argument>
            <list>
                <value>151</value>
                <value>160</value>
            </list>
        </argument>
    </bean>

    <bean id="orderHelper"
        class="com.orchestratorservice.adapter.order.OrderHelper">
        <property name="producer" ref="myTemplate" />
    </bean>



    <!-- ERP Beans -->
    <bean id="erpErrorResponseGenerator"
        class="com.orchestratorservice.adapter.erp.ERPErrorResponseGenerator"></bean>

    <bean id="insertSellerWFInfo"
        class="com.orchestratorservice.basecomponent.processor.WFInfo">
        <argument value="direct:insertSeller" />
        <argument
            value="com.orchestratorservice.adapter.erp.request.InsertSellerRequest" />
        <argument
            value="com.orchestratorservice.adapter.erp.response.InsertSellerResponse" />
        <argument ref="erpErrorResponseGenerator" />
        <argument>
            <list>
                <value>10</value>
                <value>11</value>
            </list>
        </argument>
    </bean>

    <bean id="erpHelper" class="com.orchestratorservice.adapter.erp.ERPHelper">
        <property name="producer" ref="myTemplate" />
    </bean>



    <cm:property-placeholder persistent-id="wf"
        update-strategy="none">
        <cm:default-properties>
            <cm:property name="order_update_item_status_sc_apiver"
                value="1" />
            <cm:property name="target_image_width" value="1400" />
            <cm:property name="target_image_height" value="1025" />

        </cm:default-properties>
    </cm:property-placeholder>


    <!-- a bean that uses a blueprint property placeholder -->

    <bean id="configBean"
        class="com.orchestratorservice.basecomponent.config.ConfigBean">
        <property name="order_update_item_status_sc_apiver" value="${order_update_item_status_sc_apiver}" />
        <property name="target_image_width" value="${target_image_width}" />
        <property name="target_image_height" value="${target_image_height}" />
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/blueprint"
        useMDCLogging="true">
        <template id="myTemplate" />
        <route id="orchestrator-service-route">
            <from uri="jetty:http://0.0.0.0:8888/orchestratorservice" />
            <process ref="jsonRPCProcessor" />
        </route>

        <!-- Order Routes -->
        <route id="get-orders-workflow">
            <from uri="direct:getMarketplaceOrders" />
            <to uri="bean:orderHelper?method=getMarketplaceOrders" />
        </route>
        <route id="set-status-readytoship-workflow">
            <from uri="direct:setStatusToReadyToShip" />
            <to uri="bean:orderHelper?method=setStatusToReadyToShip" />
        </route>
        <route id="get-order-itemstatus-workflow">
            <from uri="direct:getOrderItemStatus" />
            <to uri="bean:orderHelper?method=getOrderItemStatus" />
        </route>
        <route id="update-order-itemstatus-workflow">
            <from uri="direct:updateItemStatus" />
            <to uri="bean:orderHelper?method=updateItemStatus" />
        </route>
        <route id="create-forward-manifest-workflow">
            <from uri="direct:createForwardManifest" />
            <to uri="bean:orderHelper?method=createForwardManifest" />
        </route>

        <!-- ERP routes -->
        <route id="insert-seller-workflow">
            <from uri="direct:insertSeller" />
            <to uri="bean:erpHelper?method=insertSeller" />
        </route>
    </camelContext>
</blueprint>

在蓝图中,我们定义了不同的工作流模块(例如在上面的blueprint.xml - order & ERP 中)。现在我们有一个blueprint.xml,我们在其中定义了我们所有的工作流程。这已经变得相当大了(已经有大约 1000 行,我们将添加更多)。

谁能告诉我

  1. 人们如何像上面那样组织大型blueprint.xml
  2. 是否可以有不同的 xml(例如,在我的情况下,ordererp 模块的不同 xml)和结合所有子 xml 的单个母 xml?

【问题讨论】:

  • 如果你的蓝图文件太大那么我认为你的包做了太多的事情,应该拆分。

标签: xml apache-karaf blueprint-osgi apache-servicemix aries


【解决方案1】:

Bundle 引用的蓝图文件中的所有元数据都被加载并合并在一起:

  • 您可以将此文件拆分为几个小文件
  • 我通常按主题拆分定义:在您的情况下,可能一个文件包含骆驼路线,另一个文件包含来自 ConfigurationAdmin 的配置等
  • Aries-Blueprint 有一个带有内省/注释的扩展,可以帮助调整此类文件的大小

【讨论】:

  • 您能分享一些显示文件拆分示例的示例或链接吗?您还可以解释一下关于自省/注释的更多信息吗?
  • 我按主题拆分文件...所有骆驼路线在一个文件中,所有处理器在一个文件中,模块中所有 bean 的单独 xml 就像所有 order bean 的单独 xml 等,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2012-03-12
  • 1970-01-01
  • 2019-12-28
相关资源
最近更新 更多