要使用Liquid Data实现数据集成,我们主要用到Data View将多个数据源(Data Source)中的数据整合起来。
使用Data View Builder,可以很方便的创建Data View。而在Data View中可以使用在WebLogic Domain中创建的Data Source和Custom Function。
启动Data View Builder
在Windows下,按以下快捷方式进入Data View Builder:开始菜单BEA WebLoigc Platform 7.0Liquid Data for WebLogic 1.0Launch Data View Builder
若从资源管理器进入则在目录<WL_HOME>\liquiddata\DataViewBuilder\bin下运行脚本"DVBuilder.cmd"
Data View Builder的界面
在Design分页,可以设计我们用于数据集成的查询;在Optimize分页,可以优化查询;在Test分页,可以测试查询。
在Design分页左边是Source设置部分,它有两个分页选择,Sources分页列出了所有在WebLogic Domain控制台的Liquid Data服务器中设置的数据源,包括(JDBC数据源、XML文件数据源、WebService数据源、Application View数据源、Data View数据源);Toolbox分页列出了Data View Builder中所有的标准函数和客户化的函数(Custom Function)、常量设定、查询参数设定及查询中涉及到的组件。
在Design分页右边是Target设置部分,它描述了我们从不同数据源中抽取内容整合出的结果,它是以XML结构表达的输出结果。
在Design分页的中间部分是设计区域,设计区域下方包含有三个分页,它们分别是:Mappings、Conditions和Sort By。在Mappings分页,记录着源数据与目标数据的映射关系;
在Conditions分页记录着目标数据选取的条件;在Sort By记录着目标数据的排序设置。
在Data View Builder中创建查询
在Design分页右边的区域设计目标数据的结构
将数据源从Design分页左边的Sources分页中拖到中间的设计区域
在不同的数据源间拖动数据域建立目标数据选取的条件(Conditions)。若选取条件涉及到Function(标准和客户化)的调用,则需要一些额外的操作,具体如下:
>> 若涉及到Function调用,在需要在设计区域选中Conditions分页-->在左边选择Toolbox分页-->选择需要调用的Function分组(注:在Data View Builder中操作符也跟Function一样的操作)-->将需要调用的Function拖到新的Conditions记录中-->在出现的函数编辑器(Function Editor)中编辑表达式(编辑表达式也是通过拖动完成)-->完成后选择"Close"
>> 若条件涉及到一个简单输入参数的相等判断时,在Design分页左边选择Toolbox分页-->选择Query Parameter-->设定查询参数-->将查询参数拖动到条件判断所需的数据域即可。
>> 若条件涉及到一个简单常量的相等判断是,在Design分页左边选择Toolbox分页-->选择Constants-->设定常量值-->将常量拖动到条件判断所需的数据域即可。

通过在中间设计区域和右边目标数据结构之间拖动数据域建立源数据和目标数据的映射(Mapping)。若目标数据域涉及到计算结果或函数调用而非简单的源数据域映射则需要一些额外的操作,具体如下:
>> 若涉及到Function调用,在需要在设计区域选中Mapping分页-->在左边选择Toolbox分页-->选择需要调用的Function分组(注:在Data View Builder中操作符也跟Function一样的操作)-->将需要调用的Function拖到新的Mapping记录中的Source栏-->在出现的函数编辑器(Function Editor)中编辑表达式(编辑表达式也是通过拖动完成)-->在右边目标数据域中选择要映射的目标数据域-->将它拖动到Mapping记录中的Target栏-->完成后选择"Close"

设置查询结果的排序条件(若需要)
调节优化设置(进入Optimize分页)
保存创建好的目标数据结构Schema和查询,操作如下:
>> 选择菜单FileSave Target Schema…-->存放到Liquid Data的schemas目录下

>> 进入Test分页-->选择菜单FileSave Query…(注:只有进入Test分页,此菜单选项菜激活)-->存放到Liquid Data的stored_queries目录下

客户端编程调用存储的查询
使用Java客户端调用存储的查询有两种方法。其一,是通过JSP Tag Library调用;另一种是通过Liquid Data EJB API调用。
方法一:通过JSP Tag Library调用
1. 要在JSP中使用JSP Tag Library,要将<LD_HOME>\server\lib目录下的LDS-taglib.jar、LDS-em-client.jar和LDS-client.jar三个Jar文件复制到JSP所在的Web Application的WEB-INF\lib目录下。
2. 修改JSP所在的Web Application的部署描述文件(WEB-INF目录下的web.xml文件)增加Tag Library的配置描述。配置例子如下:
<taglib>
<taglib-uri>LDSTLD</taglib-uri>
<taglib-location>/WEB-INF/lib/LDS-taglib.jar</taglib-location>
</taglib>
3. 在JSP文件中按如下方式调用查询:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="LDSTLD" prefix="lds"%>
.
.
.
<%
String userid = request.getParameter("userid");
%>
<lds:query name="SampleQuery" server="t3://localhost:7001">
<lds:param name="user_id" value="<%=userid%>"/>
</lds:query>
.
.
.
在JSP Tag Library中通过标签lds:query调用查询(本例为存储的查询):
name: 指定存储的查询名称----对应着在Data View Builder中的存储的文件名
server: 指定Liquid Data服务器名称
在JSP Tag Library中通过标签lds:param指定查询的参数:
name: 指定参数名
value: 指定参数值
标签lds:query返回的结果是在Data View Builder中Design分页右边的目标数据结构的XML表达。
方法二:通过Liquid Data EJB API调用。使用查询涉及到的EJB的远程接口是com.bea.ldi.server.Query,Home接口是
com.bea.ldi.server.QueryHome。查询涉及到的Java类有com.bea.ldi.server.common.QuereyParameters和com.bea.ldi.server.common.QueryResult。
1. 在Java程序中引入Liquid Data EJB包com.bea.ldi.server.*和com.bea.ldi.server.common.*,以下为JSP中的引用:
<%@ page import="com.bea.ldi.server.*" %>
<%@ page import="com.bea.ldi.server.common.*" %>
2. 获得QueryHome接口的方法与调用其它无状态EJB的方法一样,QueryHome对应的JNDI名称为bea.ldi.server.QueryHome。例程如下:
Context ctx = new InitialContext();
queryHome = (QueryHome)ctx.lookup("bea.ldi.server.QueryHome");
query = (Query)queryHome.create();
3. 执行查询的代码如下:
QueryResult result = null;
String userid = request.getParameter("userid");
try
{
Context ctx = new InitialContext();
queryHome = (QueryHome)ctx.lookup("bea.ldi.server.QueryHome");
query = (Query)queryHome.create();
QueryParameters qp = new QueryParameters();
qp.setString("user_id", userid);
result = query.executeStored("存储的查询名称", qp);
if(!result.isEmpty())
{
String resultXML = result.toXML();
// Use a XML parser to handle the resultXML.
.
.
.
}
}
catch(Exception e)
{
e.printStackTrace();
}
调用Query的方法executeStored执行存储的查询,查询参数通过Java类QueryParameters输入。具体方法请参考相关的Java Documents。
| 作者简介 |
|
丘晓斌是(dev2dev ID: andy) BEA Channel System Enginner |
|