现在的位置: 首页 > 综合 > 正文

EJB3.0学习笔记—理解远程调用服务端和本地调用服务端的区别

2019年09月15日 ⁄ 综合 ⁄ 共 3798字 ⁄ 字号 评论关闭

项目目的:理解远程调用服务端和本地调用服务端的区别
1.异常:
      javax.ejb.EJBException: Local and Remote Interfaces cannot     

  have duplicate interface for bean UserManagerBean
2.本地客户端可以使用远程访问方式;这样就会用远程的方式去调用;也就是说 

 取不到服务端设置的id值;
3.本地访问方式传递对象的时候,接口的实现类处理的对象和jsp中取得的对象 

 是同一个对象,也就是对应的本地的同一块内存区域,当用本地访问方式的时  

候,user对象可以不实  现序列号接口
--------------------------------------------------------------------
4.注意:
  a.本地的访问方式:客户端调用服务端EJB的时候,传递的是一个引用,客户端 

    和服务端用的是内存中的一块内存空间
  b.远程访问的时候,传的是值;
--------------------------------------------------
5.注意:
  a.如果写的客户端是web工程的时候,那么可以不需要引入EJB的包,因为
    部署的时候,已经部署到jboss中了,而那些包,也已经在jboss启动的时    

    候加载,加入又重复的引入了EJB的jar包,那么eclipse在运行时候会把    

    这些jar包,加到WEB-INF/lib下,比如javax.servlet中千万不要重复的    

    丢到这里面来;
  b.不需要,在src下写入jndi.properties文件;因为,它运行的时候就是在    

jboss的运行环境中;
--------------------------------------------------------------------
1.新建项目:EJBTest_03
  com.credream.ejb
  User.java
  package com.credream.ejb;

import java.io.Serializable;

public class User implements Serializable{
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

}
----------------------------------------------------------  
  
UserManager.java
package com.credream.ejb;

public interface UserManager {
public void addUser(User user);
}
------------------------------------------------
  
UserManagerBean.java
package com.credream.ejb;

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

@Stateless
@Remote(UserManager.class)
@Local(UserManager.class)
public class UserManagerBean implements UserManager {

public void addUser(User user) {
System.out.println("user[username="+user.getUsername()+"]已

经被成功保存了");
user.setId(10);
}
}
------------------------------------------------------------
新建本地客户端:javaproject,导入jar包,并且类路径下写入jndi.properties
com.credream.ejb
UserManagerClient.java
package com.credream.ejb;

import javax.naming.InitialContext;

public class UserManagerClient {
public static void main(String[] args) throws Exception{
InitialContext context=new InitialContext();
UserManager userManager=(UserManager) context.lookup("UserManagerBean/remote");
        User user=new User();
        user.setUsername("zhangsan");
        user.setPassword("123lidewei");
        userManager.addUser(user);
        System.out.println("用户信息已经被成功保存,它的ID是:"+user.getId());
}

}
-------------------------------------------------------------------
新建远程客户端:新建web project
EJBTest03_webClient
<%@ page language="java" import="java.util.*,javax.naming.*,com.credream.ejb.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
 <%
InitialContext context=new InitialContext();
//UserManager userManager=(UserManager) context.lookup("UserManagerBean/remote");
//本地客户端可以使用远程访问方式;这样就会用远程的方式去调用;也就是说  取不到服务端设置的id值;
        UserManager userManager=(UserManager) context.lookup("UserManagerBean/local");
        User user=new User();
        user.setUsername("zhangsan");
        user.setPassword("123lidewei");
        userManager.addUser(user);
        out.println("用户信息已经被成功保存,它的ID是:"+user.getId());
  %>
  </body>
</html>
--------------------------------------------------------------
通过这个例子的结果,可以分析,远程访问方式,和本地访问方式的不同,和联系
----------------------------------------------------------------

抱歉!评论已关闭.