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
分享到:
相关推荐
精通soa基于服务总线的struts+ejb+webservice整合应用开发 作者:梁爱虎 书中光盘内容:org.eclipse.jdt.ui_3.1.2.jar weblogic91.server axis
标签"Javaee"和"TE"表明这本书的内容不仅限于Axis,还可能涵盖了Java EE的其他技术,如Servlet、JSP、EJB等,以及技术教育(Technical Education)方面的指导,帮助读者更好地理解和掌握相关知识。 总之,《Axis...
它基于Java技术,允许开发者在Java应用程序中实现Service-Oriented Architecture (SOA)。Axis1.4版本是该框架的一个稳定发行版,包含了对SOAP(Simple Object Access Protocol)和WSDL(Web Services Description ...
而从技术人员的角度来看,SOA涉及数据库、主机、打包应用、EJB、Web客户端、.NET客户端、门户、J2EE应用、Servlets、.NET/Axis等多种技术的整合,利用XML、XSD、WSDL、WSIF、SOAP、JCA、JMS、JDBC等标准和技术进行...
在中国电信的IsmpSp接口开发过程中,涉及到的关键技术点包括基于SOAP 1.1的SOA架构、WSDL文件的使用、Axis2框架的应用以及Java EE 5.0规范的遵循。以下是对这些知识点的详细解释: 1. **SOAP 1.1与SOA**: SOAP...
基于Web+Service的学校OA系统,主要是指将Web技术与服务导向架构(Service-Oriented Architecture,SOA)的服务理念相结合,利用Web服务(Web Services)技术实现系统的分布式计算与信息交互。 知识点详细说明: 1...
- **架构**:WebLogic Server基于服务导向架构(SOA),支持多层分布式应用,并提供容器来管理和运行Java EE组件,如Servlet、JSP、EJB等。 - **集群**:WebLogic支持集群功能,能够通过多个服务器实例提供高可用...
为解决目前大中型企业内异构环境下的信息系统集成,并实现与企业外部信息系统的通信,以SOA的观点出发,提出一种完全基于OSS(开源软件)平台、轻量级的系统集成应用架构。该架构不使用EJB来实现企业总线而使用轻量级...
* SOA和ROA技术的原理和应用场景 二、软件设计 * 软件设计模式,包括工厂模式、观察者模式、代理模式、装饰模式等 * 设计模式的优缺点和适用场景 * 软件设计领域的职责和要求 三、服务器和中间件 * 软件架构师的...
Web服务是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的软件系统,能够通过网络进行互操作。在J2EE平台上,Web服务允许不同系统间的应用程序之间交换数据和实现功能集成。该书可能涵盖了以下关键知识点: 1. **...
- **基于SOAP协议的Web Services时代**:随着Microsoft推出.NET平台,Web Services概念被广泛推广,尽管其间曾遭遇挫折,但在IBM和BEA的推动下,SOA(Service-Oriented Architecture)重新崛起。 - **CORBA与EJB的...
架构师需要具备良好的架构设计能力和实践经验,能够成功地设计和实现大型系统。 14. 怎么做到系统整合? 系统整合可以通过代码整合或SSO方式来实现,使用同样的数据库或异构数据库。 15. 浅谈一下负载平衡的原理...
架构案例是指对软件系统的架构进行设计和规划的实践经验。架构案例可以帮助技术人员更好地理解软件架构的设计和规划。 14. 系统整合 系统整合是指对多个系统进行集成,使得它们能够协同工作。系统整合可以通过代码...
3. **Axis2**:这是Apache的一个Web服务框架,用于创建和部署SOAP和RESTful服务。它支持WSDL(Web Services Description Language)和WS-*标准,使得CMS能与其他系统无缝通信。 4. **JBoss**:这是一个流行的Java...
11.3.1 Create EJB and EAR Development Components 11.3.2 Create the Enterprise Java Bean 11.3.3 Build and Deploy 11.3.4 Create a New Enterprise Java Bean Function 11.4 Using the Claim Check Pattern...