`
yjshengshe
  • 浏览: 201551 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

axis在项目中配置

    博客分类:
  • axis
 
阅读更多

 

 

axis 1.4在项目中的配置(以下所有路径和代码都是以本人电脑上的为示例)

 

Axis支持三种web service的部署和开发,分别为:

 

  1、Dynamic Invocation Interface (DII)

 

  2、Dynamic Proxy方式

 

  3、Stubs方式

 

1 下载资源 axis1.4 jdk tomcat 

axis的下载地址:http://mirror.vmmatrix.net/apache/ws/axis/1_4/axis-bin-1_4.zip

   如果找不到,去http://ws.apache.org/axis/仔细找找。

   jdk和tomcat的地址就不说了。

 

2 新建两个Dynamic Web project项目 axisServer(服务提供方) 和 axisClient(接口适用方)

axisServer项目空间:D:\新的开始\workspace\workspace1

axisClient项目空间:D:\新的开始\workspace\workspace2

 

3 在项目中搭建axis环境 axisServer和axisClient都需要配置

 

a:添加需要的架包(以下架包可能有些事不需要的,暂时还没整理)

1 解压axis-bin-1_4.zip 拷贝lib下jar包到项目WEB-INF/lib下

2 查找 javax.jms.jar

3 查找 mailapi.jar 

4 查找 xmlsec-1.5.1.jar 

5 查找以上三个架包,并添加到项目WEB-INF/lib下

b:配置web.xml文件

1 在web.xml中添加以下配置 axisServer和axisClient都需要配置

<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>*.jws</url-pattern>   

</servlet-mapping>   

 

<servlet-mapping>   

   <servlet-name>AxisServlet</servlet-name>   

   <url-pattern>/services/*</url-pattern>   

</servlet-mapping>

4 axisServer发布服务

 

a 编写服务类结构如下

//domain对象

package com.server.domain;

public class Man {

private String name ;

private String age;

private int height;

public Man()

{

name = "sky";

age = "18";

height = 100;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public int getHeight() {

return height;

}

public void setHeight(int height) {

this.height = height;

}

}

 

//service对象

package com.server.service;

import com.server.domain.Man;

public class LoveService {

public Man grow(Man man)

{

man.setHeight(man.getHeight()+1);

return man;

}

}

b 编写wsdd文件 deploy.wsdd 个人设定路径:WEB-INF/deploy.wsdd

<!-- 发布文件 -->

<deployment

   xmlns="http://xml.apache.org/axis/wsdd/"

   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <service name="loveService" provider="java:RPC">

       

         <parameter  name="className" value="com.server.service.LoveService"/>

         <parameter  name="allowedMethods" value="*" />

         <beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"

              languageSpecificType="java:com.server.domain.Man"/>

       

   </service>

 

</deployment>

c 编写发布.bat文件 deploy.bat 个人设定路径:WEB-INF/deploy.bat

set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib  

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% 

set Axis_Servlet=http://localhost:8080/axisServer/servlet/AxisServlet 

%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd 

说明: Axis_Lib:项目中axis架包的路径

Java_Cmd:java驱动

Axis_Servlet:发布服务的访问路径 

其中 /servlet/AxisServlet ,就是web.xml中配置的路径

<servlet-mapping>   

   <servlet-name>AxisServlet</servlet-name>   

   <url-pattern>/servlet/AxisServlet</url-pattern>   

</servlet-mapping>

两者路径要一致。

deploy.wsdd:发布服务的wsdd文件

 

d 发布服务

执行deploy.bat文件

deploy.bat文件,如果想看到结果,可以通过cmd来执行

发布服务时,项目必须启动,不然会报connection refused

5 查看服务

在浏览器中输入:http://localhost:8080/axisServer/servlet/AxisServlet

如果看到以下显示,则说明服务发布成功:

And now... Some Services

 

loveService (wsdl)

grow

AdminService (wsdl)

AdminService

Version (wsdl)

getVersion

点击 wsdl可以查看服务的wsdl文件,根据wsdl文件可以生成客户端代码

 6 客户端访问

  a 根据wsdl文件生成客户端代码

  访问服务器接口地址:http://localhost:8080/axisServer/servlet/AxisServlet 

  点击页面wsdl链接进入服务wsdl页面 右击/另存为/wsdl.xml

 

  b 编写生成客户端代码.bat WEB-INF/WSDL2Java.bat

  set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib 

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% 

set Output_Path=D:\新的开始\学习笔记\axis学习

set Package=com.client

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% wsdl.xml

说明:

Axis_Lib :axis架包路径

Java_Cmd : Java驱动

Output_Path :客户端代码生成路径

Package : 包路径

wsdl.xml : 服务wsdl文件

c 执行 WSDL2Java.bat文件,生成客户端代码

d 把客户端代码考到客户端项目中,也可以直接生成到客户端项目中,只要看Output_Path的路径。

e 客户端代码访问

客户端接口代码包 com.client

具体的代码就不写了,axis自动生成的没啥好写的

客户端service代码,如下

//////////////////////////////Dynamic Proxy方式

package com.service;

import java.net.MalformedURLException;

import java.net.URL;

import java.rmi.RemoteException;

import javax.xml.namespace.QName;

import javax.xml.rpc.ParameterMode;

import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;

import com.client.Man;

public class LoveClientService {

public static void main(String[] args)

{

try 

{

/*service 服务地址*/       

String serverUrl="http://localhost:8080/axisServer/services/loveService"; 

Man man = new Man();

man.setHeight(100);

Service service=new Service();

Call call=(Call)service.createCall();

QName qn=new QName("urn:loveService","Man");

call.registerTypeMapping(Man.class,qn,new BeanSerializerFactory(Man.class,qn),new BeanDeserializerFactory(Man.class,qn));

call.setTargetEndpointAddress(new URL(serverUrl));

call.setOperationName(new QName("loveService","grow"));

call.addParameter("arg1",qn,ParameterMode.IN);

call.setReturnClass(Man.class);

Man resultBean=(Man)call.invoke(new Object[]{man});

System.out.println(resultBean.getHeight());

} catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ServiceException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//////////////////////////////Stub方式

package com.service;

 

import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;

import com.client.LoveService;

import com.client.LoveServiceServiceLocator;

import com.client.Man;

public class LoveClientServiceStub {

/**

* @param args

* @throws RemoteException 

*/

public static void main(String[] args){

// TODO Auto-generated method stub

try {

Man man = new Man();

man.setHeight(100);

LoveServiceServiceLocator locator = new LoveServiceServiceLocator();

LoveService service = locator.getloveService();

Man resultBean = (Man)service.grow(man);

System.out.println(resultBean.getHeight());

} catch (ServiceException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

执行LoveClientService类main方法,可以看到控制台输出了101

即客户端生成了一个Man对象,设置体重 100

客户端调用服务端接口,服务端接受Man对象,并执行grow方法 ,Man体重增长了1

服务端返回Man对象

 

6 使用Handler

J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter。说白了,就是监听器。

 

在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,

这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。

 

相应的,Web服务中的Handler通常也提供一下的功能:

对客户端进行认证、授权;

把用户的访问写入系统日志;

对请求的SOAP消息进行加密,解密;

为Web Services对象做缓存。

 

SOAP消息Handler能够访问代表RPC请求或者响应的SOAP消息。在JAX-RPC技术中,SOAP消息Handler可以部署在服务端,

也可以在客户端使用。 

 

实现Handler,可以实现org.apache.axis.Handle接口。也可以继承org.apache.axis.handlers. BasicHandler。

 

BasicHandler中的(MessageContext msgContext)方法是Handler实现类必须实现的方法,

它通过MessageContext来获得请求或者响应的SOAPMessage对象,然后对SOAPMessage进行处理。

//日志handler

a 编写handler对象 

包com.service.handler.LogHandler,主要功能:监听web服务被调用的次数。

package com.service.handler;

import org.apache.axis.AxisFault;

import org.apache.axis.Handler;

import org.apache.axis.MessageContext;

import org.apache.axis.handlers.BasicHandler;

/**

* @author Administrator

*

*/

public class LogHandler extends BasicHandler{

/**

*/

private static final long serialVersionUID = -2496628092698981957L;

@Override

public void invoke(MessageContext msgContext) throws AxisFault {

// TODO Auto-generated method stub

try {

String para = (String)getOption("para");

Handler handler = msgContext.getService();

Integer counts = (Integer)handler.getOption("counts");

if(counts == null)

{

counts = 0;

}

counts = counts + 1;

handler.setOption("counts", counts);

StringBuffer result = new StringBuffer(16);

result.append("web服务").append(msgContext.getTargetService());

result.append("共执行了").append(counts).append("次");

result.append("!系统参数para=").append(para);

System.out.println(result.toString());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw AxisFault.makeFault(e);

}

}

}

b 编写服务wsdd deploy.wsdd 服务添加日志Handler 

<!-- 发布文件 -->

<deployment

   xmlns="http://xml.apache.org/axis/wsdd/"

   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <service name="loveService" provider="java:RPC">

       

         <parameter  name="className" value="com.server.service.LoveService"/>

         <parameter  name="allowedMethods" value="*" />

         <beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"

              languageSpecificType="java:com.server.domain.Man"/>

         <!--添加Handler -->

         <requestFlow>

          <handler name="logHandler" type="java:com.service.handler.LogHandler">

          <parameter name="para" value="sky" />

          </handler>

         </requestFlow>

       

   </service>

 

</deployment>

c 调用deploy.bat重新发布服务 

d 客户端检测,客户端每次调用web 接口,服务端控制台都会打印出如下信息:

web服务loveService共执行了1次!系统参数para=sky

web服务loveService共执行了2次!系统参数para=sky

//认证Handler 主要是axis自带的权限认证,估计没人用,因为测试了,所以带上吧

a 编写handler对象

包com.service.handler.AuthenticationHandler,主要功能:接口访问权限认证。

package com.service.handler;

 

import org.apache.axis.AxisFault;

import org.apache.axis.MessageContext;

import org.apache.axis.handlers.BasicHandler;

import org.apache.axis.security.AuthenticatedUser;

import org.apache.axis.security.SecurityProvider;

import org.apache.axis.security.simple.SimpleSecurityProvider;

/**

* 认证Handler

* @author Administrator

*

*/

public class AuthenticationHandler extends BasicHandler {

/**

*/

private static final long serialVersionUID = 1L;

String securityProvider = "securityProvider";

String unauthenticated = "unauthenticated";

String authenticatedUser = "authenticatedUser";

   String cantAuth = "cantAuth";

@Override

public void invoke(MessageContext msgContext) throws AxisFault {

// TODO Auto-generated method stub

SecurityProvider provider = (SecurityProvider)msgContext.getProperty(securityProvider);

if (provider == null)

{

provider = new SimpleSecurityProvider();

msgContext.setProperty("securityProvider", provider);

}

if (provider != null)

{

String userId = msgContext.getUsername();

String pass = msgContext.getPassword();

AuthenticatedUser authUser = provider.authenticate(msgContext);

if (authUser == null)

{

throw new AxisFault(unauthenticated,"error", null, null);

}

//用户通过认证,把用户的设置成认证了的用户。

           msgContext.setProperty(authenticatedUser, authUser);

}

}

}

b 编写服务wsdd deploy.wsdd 服务添加权限认证Handler 

<!-- 发布文件 -->

<deployment

   xmlns="http://xml.apache.org/axis/wsdd/"

   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <service name="loveService" provider="java:RPC">

       

         <parameter  name="className" value="com.server.service.LoveService"/>

         <parameter  name="allowedMethods" value="*" />

         <beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"

              languageSpecificType="java:com.server.domain.Man"/>

         <!--添加Handler -->

         <requestFlow>

           <!-- 权限认证 -->

        <handler name="authen" type="java:com.service.handler.AuthenticationHandler"/>  

        <!-- 日志 -->       

          <handler name="logHandler" type="java:com.service.handler.LogHandler">

          <parameter name="para" value="sky" />

          </handler>

         </requestFlow>

       

   </service>

 

</deployment>

WSDD文件配置详解:

<!-- 发布文件 -->

<deployment

   xmlns="http://xml.apache.org/axis/wsdd/"

   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <service name="loveService" provider="java:RPC">

       

         <parameter  name="className" value="com.server.service.LoveService"/>

         <parameter  name="allowedMethods" value="*" />

         <beanMapping qname="myNS:Man" xmlns:myNS="urn:LoveService"

              languageSpecificType="java:com.server.domain.Man"/>

         <!--添加Handler -->

         <requestFlow>

        <handler name="authen" type="java:com.service.handler.AuthenticationHandler"/>         

          <handler name="logHandler" type="java:com.service.handler.LogHandler">

          <parameter name="para" value="sky" />

          </handler>

         </requestFlow>

       

   </service>

 

</deployment>

<deployment>

告诉Axis Engine 这是一个部署描述文件。一个部署描述文件可以表示一个

完整的engine配置或者将要部署到一个活动active的一部分组件。

<GlobalConfiguration>

用于控制engine范围的配置。可以包含如下子元素:

<parameter>:用来设置axis的各种属性,可以配置任意数量的参数元素。

<role> : 设置一个SOAP actor/role URI,engine可以对它进行识别。这允许指向这个role的SOAP 

headers成功的被engine处理。任意数量.

<requestFlow> : 全局的请求Handlers。在调用实际的服务之前调用.

<responseFlow> : 全局响应Handlers,在调用完实际的服务后,还没有返回到客户端之前调用.

<requestFlow [name="name"] [type="type"] >

可以放置任意多个<handler> or <chain>在<requestFlow>中,但是可能只有一个<requestFlow>.

<responseFlow [name="name"] [type="type"] >

This is used to configure handlers in response flow.

 You may put any number of <handler> or <chain> elements (see below) inside the <responseFlow>,

 but there may only be one <responseFlow>.

 

<undeployment>

部署文档的根元素,用于指示Axis这是个卸载描述文件

<handler [name="name"] type="type">

位于顶层元素<deployment> or <undeployment>, or inside a <chain>, <requestFlow>, or <responseFlow>.

用于定义Handler,并定义handler的类型。"Type" 可以是已经定义的Handler或者是"java:class.name"形式的QName。

可选的"name"属性允许将这个Handler的定义在其他部署描述部分中引用。

可以包含任意数量的<parameter name="name" value="value">元素.

<handler name="logHandler" type="java:com.service.handler.LogHandler">

<parameter name="para" value="sky" />

</handler>

 

补充:

 

 

////生成服务端代码

 

set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib 

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% 

set Output_Path=D:\新的开始\学习笔记\axis学习

set Package=com.server

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% --server-side --skeletonDeploy true server.wsdl

 

////根据接口class文件生成wsdl文件

 

set Axis_Lib=D:\新的开始\workspace\workspace1\axisServer\WebContent\WEB-INF\lib 

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% 

 

%Java_Cmd% org.apache.axis.wsdl.Java2WSDL -o server.wsdl -l"http://localhost:8080/axisServer/servlet/AxisServlet" -n "urn:LoveService" -p"com.server.service" "urn:service" com.server.service.LoveService

 

//服务端调用service处理

 d) 完成服务端代码
  将服务端代码写到*impl.java 文件中
  SyncNotifySPSoapBindingImpl.java

  注意: 在一个基于B/S 的web 应用当中,为了完成业务代码,很多时候都会用到服务层代码。
  也就是说我们写接口的时候很少会孤立的去写一个服务端程序,既然要用到服务层代码,那么
  我们的问题就是如何在web应用获取一个单例的service层对象。
  首先声明一下,本应用采用的是基于spring的业务层架构。所以问题转换为如何在一个普通的java类
  中获取单例的bean.所谓普通的java类指没有与任何的servlet api 相耦合,但是它的加载需要web容器
  的支持。
  有几种解决方法:
  ①实现接口ApplicationContextAware : 在spring初始化时,自动将application进行注入
   实现setApplicationContext(ApplicationContext applicationContext);
   例如:
   public class WebApplicationUtil implements ApplicationContextAware{
    private static ApplicationContext application;
    
    public void setApplicationContext(ApplicationContext applicationContext)
    throws BeansException {
     application = applicationContext;
    }

    public static Object getBean(String beanName){
     return application.getBean(beanName);
     
    }
   }

  ②继承自抽象类ApplicationObjectSupport
   不需要实现任何方法,直接通过getApplicationContext();即可获取
  ③继承自抽象类WebApplicationObjectSupport
   类似②

  

  注意:>该工具类需要在spring配置文件中进行配置.<bean id="WebApplicationUtil" class="com.xjgs.util.WebApplicationUtil"></bean>
        >上述工具类使用的场景是在一个web 应用中,由web容器支持的普通java类中. 
         而且该类的加载器必须是org.apache.catalina.loader.WebappClassLoader.

 

 

 

 

 

分享到:
评论

相关推荐

    axis1.4 部署解析webservie

    将axis项目放在某个盘的根目录下,(因在tomcat的安装目录在版本号前有个空格,配置axis环境变量时系统认不到对应的变量路径) 如:D:\axis;然后在TOMCAT的server.xml的添加项目加载的&lt;Context&gt;: &lt;Context path="/...

    如何用axis1和spring 配置webervice服务器

    testAxis是一个完整的测试项目,打开项目阅读说明及用法即可知怎么配置

    Axis2集成SSH搭建WebService支持事务(图文详解含核心代码)

    今天特意将项目中用Axis2集成SSH实现WebService的过程记录下来,一...3.灵活配置,在一个项目中配置多个WebService的调用接口。 4.顺便提一种方案,让我们的WebService更加安全。 5.提供测试例子,服务端客户端都有了。

    axis1.4部署webSevice项目测试(已有所相关的jar包)+开发指南+源码+部署相关配置wsdd文件,内有说明

    axis1.4部署webSevice项目测试(已有所相关的jar包)+开发指南+源码+部署相关配置wsdd文件,内有说明

    axis2依赖包大全

    个人整理之前项目中有用到的axis2包,里面包含 1. 直接用的lib(包含可发布服务和调用服务的包); 2. 一个精简版的pom及对应的包(只够调用WS服务的包和对应的pom配置); 3. 一个详细版的pom及对应的包(里面包含...

    axis配置及wsdl导入流程

    以前没学过webservice,项目经理突然要求用webservice处理项目,作为新手,在网上查阅了N多资源及教程后自己总结出来了靠谱的使用流程,包括相关包导入tomcat、myeclipse插件导入及wsdl文件导入生成Java类等

    webservice Axis2教程

    在这个项目中学员可以学习到如果将 WebService应用在Web程序中。该系统的主要思想是如果Web程序和WebService部署在同一台机器上,Web程序可以直接调用 WebService所对应的Java类。当然,也可以象第一个项目一样,...

    使用axis手动编写webservice服务发布,并调用

    使用axis手动编写webservice服务发布,并调用。 使用wsdl2java命令 ---------注意导入axis jar包

    axis2调用WebService详细说明

    包括axis2程序包官方下载地址(有点大,没法上传)安装及配置设置,并又客户端代码示例(本人项目中的代码截取)

    Springcloud项目调用dubbo项目.zip

    实现Springcloud向dubbo项目的接口调用。 FeignToDubbo-starter模块负责利用Feign将底层的Http协议转化为dubbo协议,供SpringCloud项目使用。引入FeignToDubbo-starter后会引入dubbo的依赖,使用注解DubboRefence...

    Axis2.0 Demo

    myeclipse 的web 项目 加 axis2 搭建的, 新建 业务类, 配置WEB-INF/services/imservices/META-INF/services.xml 就可以用了

    axistools:使用Apache Axis 1.4进行动态SSL配置的实用程序类

    轴工具 使用Apache Axis 1.4进行动态SSL配置的实用程序类 从下载并转换为Maven项目。

    axis2_webservice 文档

    这个文档配有相应的项目源码,在文档最后给出了下载地址,所需的jar包也在文档中给了地址,webservice非常简单,大家看了以后,大家在项目中想怎么用就怎么用,想脱离web项目也没问题,我们的webservice就是没跟web...

    wsdl2java源码-Axis1WebService:Axis1WebService例子,通过wsdl文件生成服务器端代码并部署

    wsdl2java 源码 Axis1 通过wsdl文件生成服务器端代码并部署 ...在out(根据项目而定)目录生成server-config.wsdd,拷贝server-config.wsdd至项目WEB-INF中 启动项目 webservice信息 列出所有服务,点击某一个看

    spring+hibernate+servlet+extjs+axis2

    初学axis2,这是我的第一个项目,比较简单,希望对大家有帮助。由于jar包太大,我没有权限上传,所以只截了张图在项目里。包里有struts2的包,放在里面没关系。里面默认的数据库是oracle,大家可以根据自己的情况换...

    esb-projects:此 repo 用于放置 esb 配置、可能可重用的axis2 项目

    esb 项目此 repo 用于放置可能可重用的 esb 配置。

    基于JavaScript的线上车位销售系统源码+sql数据库+项目说明.zip

    在mysql中配置相应数据库,仓库名称为parking_space_online_marketing 修改\src\main\resources下的jdbc配置文件,配置对应的用户名和密码 运行Tomcat服务器即可 src中有两个文件夹main和test,其中: mian是程序...

    3轴数字加速度传感器1.5g

    3-Axis Digital Accelerometer 是方向检测,手势检测和运动检测等项目中的关键部分。这款 3-Axis Digital Accelerometer(±1.5g) 基于 Freescale 的低功耗模块 MMA7660FC。它具有高达 10,000g 的高冲击耐受性和可...

    ( WebService实例及详细配置

    压缩包中包含的是基于axis的WebService的完整项目,包括服务端和客户端。其中还包括如何创建项目工程的完整步骤文档,这是我花了很多时间探索出来的,绝对经典,绝对的物超所值,走过路过,不要错过啊!

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

Global site tag (gtag.js) - Google Analytics