EJB的远程调用与本地调用http://fay19860916.blog.163.com/blog/static/1186491192009819220664/
来源:互联网 发布:卡雷尔机器人编程 编辑:程序博客网 时间:2024/05/22 13:29
核心:远程调用传值 本地调用传址
远程调用是指运行在两个JVM中,通过通信建立的调用,本地调用是指运行在同一个JVM中,调用时传递的是一个引用,即一个内存地址
编写EJB:
package com.ighost.ejb;
imp
imp
public class User implements Serializable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
本地接口:
package com.ighost.ejb;
public interface UserManagerL {
public void addUser(User user);
}
远程访问接口
package com.ighost.ejb;
public interface UserManagerR {
public void addUser(User user);
}
实现Bean
package com.ighost.ejb;
imp
imp
imp
@Stateless
@Remote({UserManagerR.class})
@Local({UserManagerL.class})
public class UserManagerBean implements UserManagerR,UserManagerL {
public void addUser(User user){
System.out.println("用户" + user.getName() + "以保存成功");
user.setId(10);
}
}
调用过程:
远程调用
package ejbclient;
imp
imp
imp
imp
imp
imp
public class UserManagerClient {
/**
* 远程调用
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Properties prop = new Properties();
InputStream in = new FileInputStream("src/jndi.properties");
prop.load(in);
//初始化
InitialContext ctx = new InitialContext(prop);
//查找EJBBean
UserManagerR userManager = (UserManagerR)ctx.lookup("UserManagerBean/remote");
User user = new User();
user.setName("zhangsan");
//user.setBirth(new Date());
userManager.addUser(user);
System.out.println("用户已经被保存 id为:" + user.getId());
}
}
输出结果
用户已经被保存 id为:0
远程调用需要把需要的接口和类打包放到buildpath下 把jboss的client也要引入
本地调用测试:
建立一个web工程,将web工程与EJB部署到同一个服务器jboss下,即可使运行在同一个jvm下
<%@ page language="java" imp
pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
<%
//本地调用EJB_03 调用与EJB_03中的同一个JVM进程里 所以为本地调用 传递的是一个地址
//初始化
InitialContext ctx = new InitialContext();
//查找EJBBean
UserManagerL userManager = (UserManagerL)ctx.lookup("UserManagerBean/local");
User user = new User();
user.setName("zhangsan");
//user.setBirth(new Date());
userManager.addUser(user);
out.println("用户已经被保存 id为:" + user.getId());
%>
</body>
</html>
输出结果:
用户已经被保存 id为:10
注意:使用JSP本地调用时,不需要把接口和相关的类再加入环境变量 初始化可以使用默认的 另外jboss的client端也不需要 部署时jboss会把这些jar包部署进去 如果出现如下错误 则去掉相关的lib引用即可
java.lang.IllegalArgumentException: Wrong target. class com.persia.ejb.UserManagerBean for public void com.persia.ejb.UserManagerBean.addUser(com.persia.ejb.User)
at org.jboss.aop.joinpoint.MethodInvocation.handleErrors(MethodInvocation.java:141)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:116)
at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
- EJB的远程调用与本地调用http://fay19860916.blog.163.com/blog/static/1186491192009819220664/
- Axis2调用C#写的WebService(转自网易http://blog.163.com/cjd_cd/blog/static/46115565200811239239831/)
- http://junxia0404.blog.163.com/blog/static/265275572007498251691/
- http://blog.163.com/xiaoloong@126/blog/static/113726939201022761055233/
- http://qgjie456.blog.163.com/blog/static/3545136720112305582651/
- http://blog.163.com/mad010@126/blog/static/12237155200841645952814/
- 宏展开 http://hubeihuyanwei.blog.163.com/blog/static/2820528420111151152949/
- http://blog.163.com/023_dns/blog/static/1187273662012125112426472/
- http://blog.163.com/ecy_fu/blog/static/4445126200921512556887/
- http://picano.blog.163.com/blog/static/3108297620101112114513648/
- live555 http://jl9045.blog.163.com/blog/static/216206722011316103126788/
- http://blog.163.com/guotai_li/blog/static/110718702201091293641905/
- http://strong0511.blog.163.com/blog/static/15115379520124510362211/
- http://cl314413.blog.163.com/blog/static/19050797620121080918237/
- 转自:http://rongjih.blog.163.com/blog/static/33574461201247102329705/
- http://qbaok.blog.163.com/blog/static/1012926520119219573294/
- http://ranfeng0610.blog.163.com/blog/static/185708284201251524110617/
- http://blog.163.com/wzi_xiang/blog/static/65982961201302210854891/
- WinForm之CheckListBox:绑定、取值与单选
- 数据库中内连接、外连接、全连接
- 关于程序员面试的一点想法
- 《大话数据结构》简体中文版勘误
- HDU-1285-确定比赛名次
- EJB的远程调用与本地调用http://fay19860916.blog.163.com/blog/static/1186491192009819220664/
- ubuntu重启不清除 /tmp 设置
- 关于YAF框架自动加载类的注意事项
- 方向思考
- NET类型文字表示
- 南瑞继保、国电南自、国电南瑞
- POJ-1094-Sorting It All Out
- Android编译系统结构
- Explanation---lucene中对于评分细节描述的类