insights 磁力_在Decision Server Insights规则中使用OSGi服务简化复杂的代码

insights 磁力

IBM ODM Decision Server Insights是用于事务工作负载的高度可用的事件驱动解决方案,该解决方案将变更检测功能与决策制定和业务分析相结合。 Decision Server Insights具有非常丰富且直观的规则语言,允许用户使用自然语言编写其业务逻辑。 使用自然语言编写规则的能力使非技术用户可以直接影响和控制代表业务机会或风险的情况。

规则语言为处理和分析数据以及随后决定采取的措施提供了很大的灵活性。 但是,有时需要执行更复杂的数据操作或利用企业系统或现有的Web服务。 这些类型的操作通常涉及必须对非技术用户隐藏的复杂Java™代码。 然后,面临的挑战是使这些扩展功能成为用户习惯的自然规则语言的一部分。

Decision Server Insights允许您通过使用OSGi服务和业务对象模型(BOM)解决此问题。 在较高的层次上,您可以将OSGi服务视为Java逻辑的封装组件。 BOM为规则语言提供了该逻辑的业务用户友好界面。 创建这些技术工件之后,非技术用户可以在业务规则中使用服务的用户友好表示形式。

本教程将引导您完成创建OSGi服务和相应的业务对象模型的过程。 它还向您展示如何在业务规则中使用该服务,以及如何使该服务成为您的Decision Server Insights解决方案不可或缺的一部分。

您应该对IBM ODM Decision Server Insights有基本的了解,包括如何创建和构造Decision Server Insights解决方案。 有关Decision Server Insights的更多信息,请参阅IBM Knowledge Center上Operational Decision Manager 8.7文档 。 本教程假定您熟悉Java和Eclipse IDE,并且在此过程中更明显的步骤没有详细描述。 您无需了解OSGi即可有效地遵循本教程中的步骤,但是精通OSGi的读者将更容易理解某些部分。

本教程显示了一个非常简单的服务,可以指导您完成所有必要步骤,从创建OSGi服务到将其合并到解决方案中。 该服务仅根据该人的生日来计算其年龄。 出生日期以年,月和月中的天表示,所有这些都以整数表示。

您将在本教程中完成以下任务:

  • 创建一个OSGi捆绑项目。
  • 创建服务接口及其实现。
  • 为服务创建一个业务对象模型,并以适合业务用户的方式对其进行口头表达。
  • 创建Decision Server Insights解决方案。
  • 创建具有使用OSGi服务的规则的规则代理。
  • 配置项目依赖项并导出解决方案。
  • 部署并运行解决方案。
  • 使用测试客户端来测试服务并验证结果。

本教程中描述的所有工件和代码都可以下载。 完成本教程后,您可以从“下载”部分下载示例代码以比较您的工作。 从本教程的“下载”部分,下载code_sample.zip并解压缩文件。

创建OSGi捆绑项目

在Eclipse环境中完成以下步骤,以创建OSGi捆绑项目,其中将包含服务API和服务实现:

  1. 确保已在Eclipse环境中安装了IBMWebSphere®Application Server Developers for Eclipse功能。 如果您的环境中尚未安装此功能,那么可以在IBM Installation Manager中单击Decision Server Insights中的Modify ,然后选择WebSphere Application Server开发工具。 然后,请确保遵循IBM Knowledge Center上的产品文档中的在现有Eclipse环境安装Decision Server Insights中的指示信息。
  2. 单击File> New,然后打开OSGi Bundle Project向导,如图1所示。
    图1. OSGi Bundle Project向导
  3. 在向导的第一个窗口上,输入项目的名称。 如图2所示,选择Generate blueprint file并清除Add bundle to application
    图2. OSGi捆绑包项目配置
  4. 在下一个窗口中,确保清除Bundle根属性,如图3所示。此配置导致将META-INF和OSGI-INF文件夹放置在OSGi捆绑包项目的根目录。
    图3.没有捆绑根值的捆绑设置
  5. 单击完成以完成向导。
  6. 为服务接口和服务实现创建Java包。 本教程中的示例创建com.ibm.osgiservice.example.api包的接口和com.ibm.osgiservice.example.impl封装为服务的实现。
  7. 创建接口和实现类。 本教程中的示例服务DateUtilService计算自作为输入输入的当前日期以来经过的年数。 本教程示例使用三个参数作为服务的输入:年,月和日。 该示例在方法实现中还使用了org.threeten.bp.LocalDate类,因为它是一种更适合描述出生日期的格式,并且您可以使用org.threeten.bp.Period类来计算org.threeten.bp.Period之间的年数。两个当地日期。 以下示例显示了接口和服务实现的代码:

    接口

    package com.ibm.osgiservice.example.api;
    public interface DateUtilService { /** * Given the year, month and day representing an input date * return the number of years elapsed since that date */ public int ageFromDate(int year, int month, int day ); }

    实作

    package com.ibm.osgiservice.example.impl;
    import org.threeten.bp.LocalDate;
    import org.threeten.bp.Period;
    import com.ibm.osgiservice.example.api.DateUtilService;
    
    public class DateUtilServiceImpl implements DateUtilService {
    
    	public DateUtilServiceImpl() {
    }
    
    	//@Override
    	public int ageFromDate(int year, int month, int day ) {		
    		LocalDate localDate = LocalDate.of(year, month, day);
    		Period p = Period.between( localDate, LocalDate.now());
    		return p.getYears();		
    }
    }
  8. 双击MANIFEST.MF文件,该文件通常在OSGi捆绑软件的META-INF目录中,以打开清单编辑器并设置项目依赖项。 该教程示例显示了对org.threeten.bp软件包的依赖关系,如图4所示。
    图4.清单编辑器中的项目依赖项
  9. 单击Build选项卡,并配置构建属性,如图5所示。确保未选择Custom Build
    图5.清单构建属性
  10. 单击“ 运行时”选项卡,然后添加要导出的Java包。 这是您在其中创建服务接口的程序包,如图6所示。
    图6.导出的服务的API包
  11. 关闭清单编辑器,然后双击blueprint.xml文件以打开蓝图XML编辑器。 在Design选项卡中,单击Add创建一个服务项目,如图7所示。
    图7.将服务项目添加到蓝图
  12. 在下一个窗口中,进入服务接口并创建一个实现bean定义,如图8所示。
    图8.提供服务接口和实现Bean。

    切换到Source选项卡,您应该看到类似于以下示例的服务和bean定义:

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">	
    	<bean id="DateUtilServiceImplBean"
    		class="com.ibm.osgiservice.example.impl.DateUtilServiceImpl" />
    	<service id="DateUtilService" ref="DateUtilServiceImplBean" interface=
    "com.ibm.osgiservice.example.api.DateUtilService"></service>
    </blueprint>

    OSGi服务现已完成。 下一步将创建一个规则项目,其中包含该服务的业务对象模型。

创建业务对象模型项目

现在,您将创建一个规则项目,其中包含OSGi服务可执行模型(XOM)的业务对象模型(BOM)。 BOM表描述了服务接口,并使其能够在规则语言中使用。 此外,它定义了用于以业务用户友好的方式引用服务的语言。 完成以下步骤来创建和配置服务BOM:

  1. 单击File> New,然后打开Rule Project向导,如图9所示。
    图9. Rule Project向导
  2. 为项目命名(例如, service_osgi_bom ),然后单击“ 下一步”,直到进入XOM设置页面。 确保引用先前步骤中创建的OSGi项目(例如, service_osgi ),如图10所示。
    图10.在Rule Project XOM Settings窗口中选择OSGi bundle项目
  3. 单击完成以创建项目。
  4. 要在新项目中创建BOM表条目,请单击File> New,然后打开BOM表条目向导,如图11所示。
    图11. BOM条目向导
  5. 单击下一步,然后浏览到OSGi XOM。 选择包含服务接口的软件包,如图12所示。
    图12.在从XOM窗口创建BOM条目上选择的服务包
  6. 单击完成以创建BOM表条目。
  7. 在model.bom上打开BOM表编辑器,单击“ 类”选项卡,然后导航到DateUtilService类。
  8. 添加一个名为OSGi.service的自定义属性,该属性指向服务接口,如图13所示。请注意,字符大小写必须匹配。
    图13.添加OSGi.service定制属性
  9. 双击ageFromDate(int,int,int)并单击“ 成员”选项卡。 然后选择“ 静态”以使此方法静态化,如图14所示。
    图14.静态服务方法
  10. 将语言更改为对业务用户有意义的内容,如图15所示。
    图15.语言化
  11. 最后,编辑BOM项目的属性并将规则引擎设置为决策引擎,如图16所示。
    图16.选择决策引擎

创建Decision Server Insights解决方案以使用OSGi服务

现在创建一个Decision Server Insights解决方案以使用该服务。 详细介绍如何开发Decision Server Insights解决方案不在本教程的讨论范围之内。 如果您没有开发解决方案的经验,请参阅IBM Knowledge Center上Operational Decision Manager 8.7文档

Decision Server Insights解决方案通常由业务模型和以下三种代理类型中的至少一种组成:规则代理,Java代理和预测评分代理。 在本教程的示例中,使用OSGi服务的解决方案具有一个规则代理,该代理具有引用该服务的规则。 因此,规则代理项目必须引用OSGi服务BOM,如图17所示。

图17.从规则代理到服务BOM的项目引用。

该示例中的业务模型非常简单,如图18所示。请注意,如何将出生日期建模为具有三个int字段(年,月和日)的概念。

图18.解决方案的简单业务模型
  1. 现在,您可以创建一个使用该服务的简单规则,如图19所示。您可以使用上下文帮助从OSGi服务的语言描述中找到年龄,并提供所需的参数,而无需了解Java实现。
    图19.引用OSGi服务的简单规则
  2. 在此阶段,您具有测试业务规则对服务的调用所需的全部功能,但仍必须导出并部署解决方案。 在导出解决方案之前,请检查解决方案项目是否引用了OSGi服务项目(在本示例中称为service_osgi ),如图20所示。
    图20.引用OSGi项目的解决方案项目
  3. 导出并部署解决方案后,可以使用简单的测试类(如以下示例)来测试新的OSGi服务:
    public class TestOSGiService {
    	TestDriver client = null;
    
    	@Before
    	public void setUp() throws Exception {
    		client = new TestDriver();
    		client.connect("service_consumer_sol");
    }
                
    	@After
    	public void tearDown() throws Exception {
    		client.disconnect();
    }
    
    	@Test
    	public void test() throws Exception{		
    createEntities();
    
    		Thread.sleep(10000);
    sendEvents(); 
    }
    	private void createEntities() throws Exception {
    		Customer customer = client.getConceptFactory
    							(ConceptFactory.class).createCustomer("111");
    		customer.setName("Mickey Mouse");
    		BirthDate dob=new com.ibm.service.comsumer.impl.BirthDate();
    dob.setYear(1928);
    dob.setMonth(5);
    dob.setDay(15);
    customer.setDateOfBirth(dob);
    
    		client.loadEntity(customer);
    }
    
    	private void sendEvents() throws Exception {
    		CustomerEvent ev =  client.getEventFactory()
    					.createEvent(CustomerEvent.class);
    		ev.setCustomerId("111");
    		client.submitEvent(ev);
    }
    }

    运行此测试后,您应该在日志中看到以下消息:

    [21/11/14 15:04:57:962 GMT] 00000246 SystemOut O Mickey Mouse's age is 86

结论

本教程通过在BOM表中描述服务,描述了创建OSGi服务并使其可从规则进行访问的过程。 您学习了如何在业务规则中使用服务以及如何在Decision Server Insights解决方案中打包服务。 使用此过程,您可以扩展规则语言中可用的功能,并使规则编写者更轻松地访问和使用更复杂的服务。

致谢

作者要感谢Daniel Selman和Matt Roberts对本教程的审阅。


翻译自: https://www.ibm.com/developerworks/bpm/bpmjournal/1503_defreitas2/1503_defreitas2.html

insights 磁力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值