EJB3-远程、本地调用

     做个笔记以免忘记了。

     EJB远程调用使用scoket通信,遵循IIOP协议,对象要经过序列化才能传输。有网络的开销,协议的开销,对象序列化的开销。

     EJB和客户端分别部署在不同的JVM中时使用远程调用。

     这里我是用的是JBoss4-2-3 GA版本作讲解。

     第一步:编写接口

   public interface HelloWorld {
        public String sayHello(String name);
    }

    第二部:编写实现类

     import javax.ejb.Remote;
     import javax.ejb.Stateless;

@Stateless
@Remote(HelloWorld.class)
public class HelloWorldImpl implements HelloWorld {

 public String sayHello(String name) {
  return name+" 你好,世界";
 }

}

     注意:编写好实现类后,我们要声明类为有状态或者无状态的bean,用注解Stateless,还要标明是该bean是远程调用类型。

     到这一步简单的EJB已经开发完成了,下面我们要将其部署到JBoss中,使用eclipse导出为jar包后放到jboss解压目录D:\jboss-4.2.3.GA\server\default\deploy,在目录D:\jboss-4.2.3.GA\bin中双击运行run.bat,启动jboss即可完成部署。

     第三步:编写调用EJB的客户端代码

(1) 新建jndi.properties文件

  在文件中输入:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

(2)客户端调用的java类

import javax.naming.InitialContext;

import cn.itcast.ejb3.HelloWorld;

public class EJBClient {

 public static void main(String args[]){
  try {
   InitialContext ctx=new InitialContext();
   HelloWorld hw=(HelloWorld)ctx.lookup("HelloWorldImpl/remote");
   System.out.println(hw.sayHello("yangfeng"));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

InitialContext加载jndi上下文信息,构造函数不传参默认读取jndi.properties的配置信息。

至此,成功完成EJB的远程调用。

       本地调用:

    EJB端基本不用做什么改变,只用讲Remote(HelloWorld.calss)改为Local(HelloWorld.class)即可。

    由于本地调用必须部署在同一个JVM中,所以客户端用JavaEE来实现,新建Web Project ,命名为EJBLocalClient

    新建test.jsp

    内容如下:

      <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="utf-8"%>
    <%@page import="javax.naming.*,cn.itcast.ejb3.HelloWorld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%try {
 InitialContext ctx=new InitialContext();
 HelloWorld hw=(HelloWorld)ctx.lookup("HelloWorldImpl/local");
 System.out.println(hw.sayHello("本地调用"));
} catch (Exception e) {
 e.printStackTrace();
} %>
</body>
</html>

配置EJBLocalClient引入Project EJBLocal,不然test.jsp中HelloWorld类找不到。如下图:

        在浏览器输入http://localhost:8080/EJBLocalClient/test.jsp,在eclipse控制台查看输出信息。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值