java entrypoint_SCA程序设计——Entry Point : 让Web服务发布简单起来

1.简介

Entry Point是SCA中模块的“入口”。模块可以通过Entry Point将自身定义好的组件(Component)发布成一个可供外部远程访问的服务,这所谓的“远程服务”都是通过一些标准的协议进行访问的,最常见的就是Web服务,所以我们可以这样去理解Entry Point:

Entry Point是将SCA组件发布成各种可供标准远程技术所访问模型,这里的远程访问技术可以是Web Service,JMS或者EJB等。

在这篇文章中,我将介绍如何使用Balto SCA容器,利用Entry Point来将已有的组件发布成一个可用Web服务。对SCA中组件的概念不明白的读者可以先看看SCA程序设计系列的第一篇《本地服务》,或者可以看一下《浅谈SCA》,都能帮助你理解一些SCA基本的概念。

2.如果定义Entry Point

Entry Point的定义是写在sca.module文件中的,它的XML格式如下:

<

entryPoint

name

="xs:NCName"

multiplicity

="0..1 or 1..1 or 0..n or 1..n"

?

>

*

<

interface

.interface-type

/>

<

binding

.binding-type uri

="xs:anyURI"

/>

+

<

reference

>

wire-target-URI

reference

>

entryPoint

>

下面简单介绍一下Entry Point的XML文章中各个元素以及属性的含义:

首先是entryPoint的属性name,这个属性是表示的是该Entry Point的名称。

interface元素是指entryPoint对应的接口。(读者可以看一下《本地服务》,了解更多interface的信息)

binding元素表示entryPoint在发布该远程服务,采用的什么样的远程协议进行绑定的。通常情况下都使用的是WebService Binding,除此之外,还有Ejb,JMS的Binding。

reference元素是指该Entry Point将哪个组件做为远程服务发布的实际调用对象。或者我们理解为:将哪个组件做为远程服务发布了出去。

在这一篇文章中我们只讨论基于Web服务的绑定方式,所以整篇文章中所提到的Binding,都是WebService Binding。

组件通过Entry Point发布出去后,外部就可以通过Entry Point所设置的Binding的具体网络协议对该组件进行访问。也就是说,如果我们想要使本地的一些Java类发布成一个Web Service,那在SCA容器中,只需要将这个Java类做成组件,然后再发布成Web服务绑定的Entry Point;同样我们还可以把它发布成EJB的形式。更重要的是,如果我们在Entry Point中,指定了多种Binding方式,那该组件服务就可以通过多种远程协议进行访问。

3.示例

为了证明Entry Point的确能够帮助开发人员简单地发布Web 服务,这里我们来一个示例工程。

示例工程代码下载

准备工作:

下载WTP 1.0

下载Balto SCA

首先我们将下载好的Balto SCA容器释放到某处,然后在WTP的首选项中,找到Server项,然后添加一个Tomcat 5.5 Runtime,路径指向刚才释放的Balto SCA的地方:

ad4bcfcbe53d58234a3850c7dc6b5a96.png

小贴士:在上一篇文章《ExternalService应用》中我已经提到了,Balto SCA是整合了Tomcat,Balto本身就是一个Tomcat容器,只是修改了Tomcat的一些信息,能对部署的Web应用进行SCA方面的一些管理,所以使用Balto SCA就像使用Tomcat一样。

在WTP中新建一个动态Web工程,取名为balto_entrypoint_test

536f7de4643c13248ac3f955243f038b.png

然后我们建立一个接口Cat:

@Remotable

public

interface

Cat {

int

getAge();

float

getWeight();

String getName();

AppearanceTypeImpl getAppearance();

String callingIt(String name);

}

4f1150b881333f12a311ae9ef34da474.png

注意,该接口我们利用了SCA的Remotable标签进行标识,这是因为Balto 容器中,对Entry Point所指定的组件接口是有一定要求的,该要求就是要这个组件是一个远程的,所以这里我们需要构建一个Remotable的组件接口

接下来我们做一个类MyCat,实现Cat接口,并且指明该MyCat是一个组件,而服务则接口则是Cat接口,也就是在MyCat类上标明@Service 标签(不明白的读者可以看SCA程序设计第一篇文章 《本地服务》)

@Service(Cat.

class

)

public

class

MyCat

implements

Cat {

public

int

getAge() {

return

1

;

}

public

float

getWeight() {

return

10.89f

;

}

public

String getName() {

return

"

DuoDuo

"

;

}

public

AppearanceTypeImpl getAppearance() {

AppearanceType app

=

AppearanceFactory.eINSTANCE.createAppearanceType();

EyesType eyes

=

AppearanceFactory.eINSTANCE.createEyesType();

CoatType coat

=

AppearanceFactory.eINSTANCE.createCoatType();

eyes.setColor(

"

Deep Blue

"

);

coat.setColor(

"

White

"

);

coat.setHeight(

"

Height

"

);

app.setCoat(coat);

app.setEyes(eyes);

return

(AppearanceTypeImpl)app;

}

public

String callingIt(String name) {

return

"

Hello

"

+

name

+

"

, MIAO~~~

"

;

}

}

好了,上面的创建好的Cat接口以及MyCat实现类,已经为我们的整个SCA模块生成了一个可用的Component了。

Balto在解析Java Annotation的时候,如果发现了@Service标签,就会主动将这个类注册成为一个Component,并且,该Component的名字是它对应的服务接口的名字,这里也就是Cat。

接下来就是要将这个Component接到Entry Point上,并通过Web服务发布出去。

在工程的src下新建一个sca.module文件(必须在src下),我们在文件中写入:

xml version="1.0" encoding="ASCII"

?>

<

module

xmlns

="http://www.osoa.org/xmlns/sca/0.9"

xmlns:v

="http://www.osoa.org/xmlns/sca/values/0.9"

name

="balto_entryPoint_test"

>

<

entryPoint

name

="Cat"

>

<

interface

.java interface

="org.uxteam.balto.test.Cat"

/>

<

binding

.ws

port

="http://localhost:8080/balto_entrypoint_test/sca/services/LookingCat?

wsdl#wsdl.endpoint(LookingCatService/LookingCatServiceSOAPBinding)"

/>

<

reference

>

Cat

reference

>

entryPoint

>

module

>

这个就是我们所定义的Entry Point:

Web服务名 : Cat

interface:java接口,接口类是Cat接口

binding :Web服务绑定,但后面port给出的信息在目前的Balto版本中是不会关心的。

reference:指定了我们刚才建立的Cat组件。

现在我们打开WTP的Server视图:

a77ac767215579bd3e41c61bc286e00e.png

新建一个Server,Runtime就是我们的Balto,然后再将刚做的balto_entrypoint_test工程加入到server中,启动!

我们会发现在控制台打出了一些信息,如果没有发生异常,Balto SCA容器就算是启动成功了:

8c68ba2342808a76d3510c2ae9fba7de.png

测试Web服务

我们现在需要测试一下发布出去的Web服务是否能用。

首先,打开WTP的Web服务测试Web页面:

76ab87e2f45f5cdf969a6cb0d1f35fc5.png

然后选择WSDL Page项,我们会发现一下的一个界面,在文本中输入:

http://localhost:8080/balto_entrypoint_test/sca/services/Cat?wsdl

小贴士:Balto容器在处理Web服务使用的是Axis2,也就是说纯粹的是通过Axis2的Servlet来处理Web服务请求的,所以,Balto在Web应用启动的阶段,为这些输入SCA管理范围内的Web应用,动态加入了Axis2,而由于目前Balto并不完善,所以在处理Servlet-Mapping的时候,都默认给出了“/sca/services”做为Web服务映射的URL。从上面这段URL可以看出,这是一个请求WSDL文档的URL。

点击GO后我们发现在页面左侧出现了一个树形结构的东西。点开它,呵呵,看见了没,我们发布的Web服务方法全在这儿呢。

fd698fa1614ba667f80834da22b2ff79.png

随便选择一个,然后在右侧输入参数后点击GO。成功后在Status中我们可以点开Source,查看一下返回的SOAP相信信息。我们拿callIt做个例子:

30bf48e8bd12b30aa296a4431b3d5ab6.png

信息准确无误,成功了。

4.小结

我们这里所提到的Entry Point是在SCA 0.9规范中给出了,而在0.9版本后,Entry Point已经改名了.

通过Entry Point这种"暴露服务"方式,开发人员能够很容易地将自己的Component注册成为一个远程可用的服务,这正是SOA中所提出的那样:服务是可运行在独立节点上的,利用规范的接口描述,让消费者能够在任何地方访问到.SCA中所提出的Entry Point其实就是一个独立服务的访问入口,所以在SCA规范的0.9版本以后Entry Point这个名词就没有再沿用,而是支持将它改为了Service,这更能准确地表明它的性质吧.

本文中并没有具体讲解如何使用XSD中的复杂类型来作为Web服务中的类型,但示例工程中是有的,有兴趣的朋友可以看一看.

本人文笔有限,有什么不对的地方还请大家指出,谢谢收看,再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值