SOA(Service-Oriented Architecture,面向服务架构)是一种架构模型,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。
本文以axis1.4 + ejb2.x 为基础,SOAP由axis完成,ejb完成具体的服务实现,以期对SOA有一个感性的认识。
一、EJB的开发:
1、开构成EJB组件的相关类
/**
* Hello EJB组件的远程接口
* 该接口由容器实现,EJB对象会将客户请求委派给实际的EJB bean类
* @author chenwq
*/
public interface Hello extends EJBObject {
public String sayHello(String name) throws RemoteException;
}
/**
* Hello EJB组件的Home接口
* 该对象充当创建EJB对象的工厂
* 在Home接口中,存在create()方法
* @author chenwq
*/
public interface HelloHome extends EJBHome {
/**
* 创建EJB对象
* @return EJB对象
* @throws CreateException
* @throws RemoteException
*/
Hello create() throws CreateException, RemoteException;
}
/**
* 无状态的会话bean
* @author chenwq
*/
public class HelloImpl implements SessionBean {
// ** EJB规范定义的方法 ** //
public void ejbActivate() throws EJBException, RemoteException {
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {
}
public void ejbCreate(){
}
//业务方法
public String sayHello(String name){
System.out.println("Hi, " + name);
return "Hi, " + name;
}
}
2、编写部署描述符
1)ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar >
<enterprise-beans>
<session >
<ejb-name>Hello</ejb-name>
<home>com.ejb2x.HelloHome</home>
<remote>com.ejb2x.Hello</remote>
<ejb-class>com.ejb2x.HelloImpl</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
2)jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">
<jboss>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<jndi-name>ejb/Hello</jndi-name>
</session>
</enterprise-beans>
</jboss>
3、打包部署
按以下目录结构打成jar包:
ejb.jar
|- (.class文件)
|- META-INF
|- ejb-jar.xml
|- jboss.xml
将jar拷贝至\deploy目录下,启动JBOSS,进入jmx-console,如果能看见
jboss.management.local
* EJBModule=ejb2x.jar,J2EEApplication=null,J2EEServer=Local,j2eeType=StatelessSessionBean,name=Hello
则表明EJB模块部署成功。
如图:
二、AXIS
Axis(Apache eXtensible Interaction System)是一款开源的WebService运行引擎,它是SOAP协议的一个实现,网上有许多关于此的教程,有兴趣的可以上网搜索。这里只是简单介绍如何实现基于EJB+AXIS的SOA,这里采用的版本是Axis1.4。
1、下载axis的发行包:http://www.apache.org/dyn/closer.cgi/ws/axis/1_4
2、构建axis.war
可以新建一个web工程,也可以直接使用axis发行包中 \webapps\axis 下的web工程。这里以新建web工程为例讲解。
1)拷贝jar包及相关文件:
将axis-1_4\lib 下的所有jar包拷贝至项目的lib目录下。
另外,还需要activation-1.1.jar和mail-1.4.jar这两个依赖jar包
将\axis-1_4\webapps\axis\ 下的两个jsp文件 index.jsp和i18nlib.jsp 拷贝到WebRoot下
i18n_ja.properties 和 i18n.properties 两个文件拷贝至classpath下
2)配置web.xml:
<listener>
<listener-class>
org.apache.axis.transport.http.AxisHTTPSessionListener
</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>
org.apache.axis.transport.http.AdminServlet
</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
启动JBOSS,浏览器中键入:http://localhost:8080/axis/ 能看到如下画面,则表明axis已经配置成功。
2、编写WSDD文件
deploy.wsdd
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig" xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloService" provider="java:EJB" style="rpc" use="encoded">
<parameter name="beanJndiName" value="ejb/Hello"/> <!-- EJBBean的JNDI名称 -->
<parameter name="homeInterfaceName" value="com.ejb2x.HelloHome"/> <!-- EJB的Home接口类名 -->
<parameter name="remoteInterfaceName" value="com.ejb2x.Hello"/> <!-- EJB远程接口类名 -->
<parameter name="wsdlSoapActionMode" value="OPERATION"/>
</service>
</deployment>
3、生成server-config.wsdd文件
打开CMD命令控制台,在 %JBOSS_HOME%\server\default\deploy\axis.war\WEB-INF 下,键入如下命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
说明:参数-D是设置一个系统属性,java.ext.dirs=lib是将JVM的扩展目录路径设为lib目录,以保证JVM可以找到AdminClient类。
执行该程序实际会向 http://{address:port}/axis/services/AdminService 发起请求,所以要保证该命令正确执行,必须满足:
1)jboss处于运行状态
2)web context-root 为 axis,且配置有匹配 /services/AdminService 路径的servlet
调用成功后,会在当前目录下生成server-config.wsdd文件。
4、查看已发布的webservice
浏览器中键入 http://localhost:8080/axis/servlet/AxisServlet 可以查看已发布的webservice。如下图:
三、客户端调用
1、拷贝客户端依赖的jar包
将axis-1_4\lib 下的所有jar包拷贝至项目的lib目录下。
2、调用:
public static void main(String[] args) {
try {
Call call = (Call) new Service().createCall();
String wsdlUrl = "http://localhost:8080/axis/services/HelloService";
call.setTargetEndpointAddress(wsdlUrl);
call.setOperationName(new QName(wsdlUrl, "sayHello"));
call.invoke(new Object[] { "chenwenquan" });
} catch (ServiceException e) {
//process Exception
} catch (RemoteException e) {
//process Exception
}
}
后台打印出:INFO [STDOUT] Hi, chenwenquan 则表示调用成功。
以上只是简单演示了EJB2.x+AXIS1.4实现SOA的最基础版本,虽然ejb3.x已经取代了2.x,但我相信,任何新技术都是在已有技术的基础上进行的扩展,万变不离其宗,最本质的东西始终不会变,我们只要理解和掌握了最本质的东西,无论其版本如何变化,我想我们都可以游刃有余。
- 大小: 329.5 KB
- 大小: 93.7 KB
- 大小: 59.4 KB
分享到:
相关推荐
opencv_python-4.1.0.25-cp37-cp37m-linux_armv7l.whl
onnxruntime-1.13.1-cp38-cp38-win_amd64.whl
Few-shot CIFAR100数据集,来自CIFAR100数据集。 数据集共包含100类别,每个类别600张图像,合计60,000张图像。 数据集介绍:分为训练集、验证集、测试集 --data--train--:60个文件夹,36,000张图片 --data--val--: 20个文件夹,12,000张图片 --data--test--:20个文件夹,12,000张图片 FC100按照超类(Superclass)进行划分:训练集60个超类,验证集20个超类,测试集20个类别。
numpy-1.19.5-cp39-cp39-linux_armv7l.whl
基于springboot的城乡商城协作系统源码数据库文档.zip
基于springboot宠物管理系统源码数据库文档.zip
基于springboot餐饮连锁店管理系统源码数据库文档.zip
基于springboot在线问诊系统源码数据库文档.zip
1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/143734777 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
功能说明: 陕理工图书馆管理系统包括两种用户,管理员,和学生用户。不同的用户都需要进行登录,然后针对其操作权限才能进入管理系统。 系统的设计将分为后台和前台,后台是系统管理员进行登录后管理,前台是学生使用的部分。 前台实现的功能包括:学生用户注册、登录,座位信息查看、阅览室信息、在线交流、座位预约、查看图书位置等。 服务器后台管理实现的功能包括:管理员登录,阅览室信息管理,座位管理,预约管理,图书管理以及用户管理等。 环境说明: 开发语言:python Python版本:3.6.8 数据库:mysql 5.7数据库工具:Navicat11开发软件:pycharm
numpy-1.16.1-cp35-cp35m-linux_armv7l.whl
scipy-1.2.0-cp35-cp35m-linux_armv7l.whl
opencv_python-4.0.1.24-cp37-cp37m-linux_armv7l.whl
ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现
基于springboot的c语言学习辅导网站源码数据库文档.zip
基于springboot医疗废物管理系统源码数据库文档.zip
opencv_python-4.5.5.64-cp39-cp39-linux_armv7l.whl
gee_python基于机器学习ML(随机森林RF)的土地分类.ipynb
ta_lib-0.5.1-cp310-cp310-win32.whl
内容概要:本文档详细介绍了全国大学生电子设计竞赛的相关信息,包括竞赛的目的、流程、内容和技术要求等。竞赛涵盖了电子电路设计、嵌入式系统开发、信号处理等多个领域,通过竞赛可以有效提升学生的实践动手能力、创新意识和团队协作能力。 适合人群:准备参加全国大学生电子设计竞赛的学生及教师。 使用场景及目标:帮助学生和教师全面了解比赛的要求和流程,为备赛做好充分准备。 其他说明:文中提供了详细的竞赛内容介绍、技术要求、评审标准和注意事项,有助于参赛队伍制定合理的参赛策略,提高竞赛水平。