无状态会话Bean发布为WebService是非常有意义的,因为如果我们将每一个EJB模块按照SOA的思想做成一个一个独立的服务模块(这里不讨论SCA,我认为Apache的SCA框架还不够强大,文档还不够全面),同样的代码在JavaEE体系之内的应用程序可以直接使用EJB3直接访问,JavaEE体系之外的应用程序可以直接使用WebService访问,这一点是非常有意义的。
下面要考虑的就是如何只写一份代码,让它能做两样事情。
网上有大量的使用EJB3发布WebService的教程,但是这些教程都是一个人写的,基本上没有太大的参考价值。最重要的是,他写的元注释都是写在实现类上的,接口上没有做任何描述。这种做法有两个问题,第一如果你的会话Bean使用了EM,那么麻烦了,JAXB在做绑定的时候不认识接口;第二WSDL文件的描述实际上应该是基于接口的描述,应该和实现类没有太大的关系。
看看网上流行的代码:
注意,基于RPC绑定模式下List,Set一类的接口都是不可传输的,这点会很麻烦,要用必须用实现类。
看看我的代码:
接口:
实现类:
这个WebService是针对接口发布出去,而且使用的DOCUMENT样式,可以直接使用List、Set的接口。
这个WebService生成的WSDL文件很有意思:
里面有import来指引到真正的WSDL文件。这样很容易将会话Bean变成WS~一样的代码两样的功能,超值!
posted on 2009-07-02 13:54 阿南 阅读(1939) 评论(0) 编辑 收藏 所属分类: EJB3 、个人原创