http://blog.csdn.net/wanbin021614/archive/2007/09/04/1771432.aspx
先介绍一下BEA的DSP,所谓DSP就是data service platform,是BEA近几年推出的一个新产品,跟SOA架构有很紧密的联系,说简单点就是SOA的获取数据的那一层,这一层负责收集数据、整理数据并对外发布接口。
关于DSP其实BEA的DEV2DEV上有一个比较好的例子,但它的例子是基于weblogic自带的pointbase内存数据库为基础的,而实际中的数据源基本不可能使用pointbase,于是我个人最近两天做了一个基于mysql的demo,更贴近实际一点。
下面就来就一步一步介绍创建和部署这个demo。
顺便说一句,运行dsp至少要512M内存,推荐1G以上。
mysql的准备工作,新建一个schema名字叫VLS,然后新建几张表: emailTemplate(emailTemplateID int(PK), emailTemplateName varchar) emailTemplatePack(emailTemplatePackID int(PK), emailTemplatePackName varchar) emailTemplateBridge(emailTemplateID int, emailTemplatePackID int) 其中emailTemplate就是一个邮件的内容定义,emailTemplatePack就是定义一组邮件,在我的项目中就是定义一个课程全过程中的邮件,包括课程创建提醒,课程确认,课程时间提醒1、2、3之类的,emailTemplateBridge是定义两张表的多对多的关系。两个ID都是FK。数据自己随便输点。
下载bea weblogic 8.1.6 platform并安装到默认目录。 下载data service platform并安装,目前的版本是2.5。 这两个下载的地址在[url=http://dev2dev.bea.com]http://dev2dev.bea.com[/url] 自己去找吧。 下载mysql的driver,并复制到C:/bea/weblogic81/server/lib中。这步是一定要有的,很奇怪的是BEA并没有在自己的lib目录里面附带对应数据库的driver文件,或许是我没有找到。
设置环境变量,修改C:/bea/weblogic81/common/bin/commEnv.cmd,找到这句设置WEBLOGIC_CLASSPATH的环境变量 set WEBLOGIC_CLASSPATH=%JAVA_HOME%/lib/tools.jar;%WL_HOME%/server/lib/weblogic_sp.jar; 在后面加上%WL_HOME%/server/lib/weblogic.jar;%WL_HOME%/server/lib/mysql-connector-java-3.0.15-ga-bin.jar (我下载的mysql driver是mysql-connector-java-3.0.15-ga-bin.jar),当然,你可以把这个driver放到其他classpath中。 保存并关闭文件。
打开bea workshop,新建一个data service application,使用默认的weblogic server,名字叫VLS,我是根据我手上的一个项目来作例子,名字也就使用原来项目的名字了。建好以后,会自动建一个dataservices的项目。 一般情况下可以使用这个默认的ds项目,但个人更喜欢建一个新的项目。鼠标右键点击VLS也就是最顶层的application,弹出菜单中有一个new,二级菜单中单击project,弹出菜单如图。
修改名字为EmailTemplate,这个DS项目依照VLS项目中的邮件功能部分作为原型。 右键EmailTemplate这个DS项目然后新建两个文件夹,一个叫DS,一个叫Model。建好以后的项目结构图如下:
右键DS这个文件夹,然后选择Import Source Meta这个项目。如图:
点击后弹出的页面如图:
点next按钮,如果在开始没有启动weblogic server,这个时候会弹出一个对话框让你启动weblogic server,点确定就可以了。这个时候就会启动server,过程比较长,慢慢等吧。
当弹出的dos窗口中出现这样的文字 server started in running mode的时候,server就启动成功了。
下一个页面就是选择你要import的data source,默认的一般是pointbase自带的cgDataSource这个pool
点击页面上的new按钮,会弹出data source viewer来查看现有的已经配置好的data source pool和pool中的data source
点击当前页面的左下角的New data source按钮,弹出一个新建data source的对话框
在Pool的下拉菜单中选择来新建一个pool,然后下面的这些Pool Name, Driver等就会被激活,可以进行修改,在Driver下面选择com.mysql.jdbc.Driver这个,然后URL就会出现一个template: jdbc:mysql://:3306/,把IP地址和数据库名字填写好以后就可以使用了。
新建好以后,就可以在第一个select data source中选择刚刚建立好的data source了。
data service分成两种,一种是物理意义上的数据服务,就像email template这种直接从数据库获取数据的服务。还有一种是逻辑服务。我们接下来作的就是根据物理数据服务定制自己想要的逻辑服务。
这几个步骤可能比较烦,细心点。然后检查下源代码,代码应该跟下面的一样,不一样的可以自己手动修改一下
declare namespace ns17="ld:EmailTemplate/emailtemplatebridge"; declare namespace ns16="ld:EmailTemplate/emailtemplate"; declare namespace ns15="ld:EmailTemplate/emailtemplatepack"; import schema namespace ns11="ld:EmailTemplate/emailtemplatelist" at "ld:EmailTemplate/schemas/emailtemplatelist.xsd"; declare namespace ns14="ld:EmailTemplate/emailtemplatelist"; ... declare function ns14:getEmailTemplatePack() as element(ns11:emailtemplatelist)* {
for $emailtemplatepack in ns15:emailtemplatepack() return <ns11:emailtemplatelist> <emailTemplatePackID>{fn:data($emailtemplatepack/emailTemplatePackID)}emailTemplatePackID> <emailTemplatePackName>{fn:data($emailtemplatepack/emailTemplatePackName)}emailTemplatePackName> <EmailTemplateList> { for $emailtemplatebridge in ns17:emailtemplatebridge() where $emailtemplatepack/emailTemplatePackID = $emailtemplatebridge/emailTemplatePackID for $emailtemplate in ns16:emailtemplate() where $emailtemplatebridge/emailTemplateID = $emailtemplate/emailTemplateID return <emailTemplate?> <emailTemplateID>{fn:data($emailtemplate/emailTemplateID)}emailTemplateID> <emailTemplateTriggerName?>{fn:data($emailtemplate/emailTemplateTriggerName)}emailTemplateTriggerName> <emailTemplateSendMode>{fn:data($emailtemplate/emailTemplateSendMode)}emailTemplateSendMode> <emailTemplateSubject?>{fn:data($emailtemplate/emailTemplateSubject)}emailTemplateSubject> <emailTemplateText?>{fn:data($emailtemplate/emailTemplateText)}emailTemplateText> <emailTemplateDaysThreshold?>{fn:data($emailtemplate/emailTemplateDaysThreshold)}emailTemplateDaysThreshold> <emailTemplateCCAddress?>{fn:data($emailtemplate/emailTemplateCCAddress)}emailTemplateCCAddress> <emailTemplateBCCAddress?>{fn:data($emailtemplate/emailTemplateBCCAddress)}emailTemplateBCCAddress> emailTemplate> } EmailTemplateList> ns11:emailtemplatelist>