您的位置:首页 > 其它

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

2013-01-06 19:55 381 查看
项目目的:理解远程调用服务端和本地调用服务端的区别

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>

--------------------------------------------------------------

通过这个例子的结果,可以分析,远程访问方式,和本地访问方式的不同,和联系

----------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: