EJB远程调用和本地调用

一,远程调用

@Stateless//一般定义成无状态的
@Remote
public class UserManagerBean implements UserManager {
	@Override
	public void addUser(User user) {
		System.out.println("User["+user.getUsername()+"] is saved...");
		user.setId(10);
	}
}

因为要在远程调用中使用User对象,所以这个对象要实现序列化的接口。

测试远程调用:

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("张三");
		user.setPassword("lhc");
		userManager.addUser(user);
		System.out.println("用户信息已经被成保存,用户ID是:"+user.getId());
	}
	

结果:

发现调用完成之后,是服务端并没有把对User对象的值设置好之后返回client端。

二,本地调用

新增类:

PS:我的Jboss版本不支持将类同时标记为远程对象和本地对象,所以就分开写了。如果你在查找的时候,找不到对象,可能也是因为将类标记为remote跟local之后,因为服务器不支持,导致报错了。

之后,新建web项目,并将这个web项目部署到跟EJB项目同一个jboss服务器下面.

测试本地调用:

<%

		InitialContext context=new InitialContext();
		UserManager userManager=(UserManager)context.lookup("UserManagerBeanTwo/local");
		User user=new User();
		user.setUsername("张三");
		user.setPassword("lhc");
		userManager.addUser(user);
		out.println("用户信息已经被成保存,用户ID是:"+user.getId());
 %>

根据结果:

从上我们可以推断,因为两个项目在同一个Jboss服务器下面,所以本地调用ejb对象的时候,User对象是在这个服务器中是以引用的形式传递的,所以当服务端执行完成之后,我们可以从客户端看到用户ID被改变。

时间: 2024-08-04 00:50:13

EJB远程调用和本地调用的相关文章

JBOSS EAP 6.2 -EJB远程调用-客户端的配置

EJB访问方式分为远程客户端访问.本地客户端访问和WebService客户端. 所谓的EJB的远程调用是说客户端与服务端的EJB对象不在同一个JVM进程中. 本地客户端是说客户端与服务端的EJB对象在同一个JVM进程中. WebService客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webService客户端才可以访问到. 远程调用 在没有远程调用的时候,我们需要用到别人的数据了,就直接把别人的接口和实现都拿过来了,接着打到自己的包中,这样做一

JBOSS系列 -EJB远程调用-客户端的配置

EJB访问方式分为远程客户端访问.本地客户端访问和WebService客户端. 所谓的EJB的远程调用是说客户端与服务端的EJB对象不在同一个JVM进程中. 本地客户端是说客户端与服务端的EJB对象在同一个JVM进程中. WebService客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webService客户端才可以访问到. 远程调用 在没有远程调用的时候,我们需要用到别人的数据了,就直接把别人的接口和实现都拿过来了,接着打到自己的包中,这样做一

RHEL6-X Window System-8.图形桌面的本地调用与远程调用解析

Linux的X或X11 (X Window System)是一个基础的图形框架接口,拥有基本的图形显示.在此框架基础之上,有诸如GNOME/KDE之类的图形桌面窗口管理应用软件(Window manager).而且图形框架X11包括两大部分X Client与X Server,采用C/S主从架构.所以它是一个system而不单单只是一个组件. Linux图形桌面的本地调用与远程调用解析如图 说明: 通过图形还是文本控制台传递命令,经过内核处理后,返回相应的数据给对方 本地情况: 1.如果是图形,则

EJB远程接口调用

一.EJB简介 EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序.简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行.凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台.EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准.其特点包括网络服务支持和核心开发工具(SDK). 在J2EE里,Enterprise Java Beans(EJB)称为J

解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常

EJB本地调用方式:把Webclient和EJB服务端部署到同一个JBoss,client和server通过一个JVM进行通信. Web客户端本地调用时.需引用EJB服务端打包的jar,不需引用JBoss/client下的jar和src下的jndi.properties文件.调用方式例如以下: <%@ page language="java" import="java.util.*,javax.naming.*,com.tgb.ejb.*" pageEncod

Ejb远程调用-jboss服务器调用服务器-Bean调用Bean

英文参考地址 https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project 要解决的问题 公司的底层架构中的Ejb的远程调用通过Controller调用的Bean,所有现在存在的问题就是业务逻辑都写到了Controller,有一些业务得不到复用,方法得不到复用.分布式事务无法控制等等,所以咱们急需把业务写到Bean的实现里面,

dubbo之本地调用

本地调用 本地调用使用了 injvm 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链. 配置 定义 injvm 协议 <dubbo:protocol name="injvm" /> 设置默认协议 <dubbo:provider protocol="injvm" /> 设置服务协议 <dubbo:service protocol="injvm" /&

Android调用JNI本地方法跟踪目标代码

正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 0 * Message("%s = %d\n", GetString(Dword(R2+0x10),-1, ASCSTR_C), R2+0x20)打出的记录 enforceInterface = 1108147904writeInterfaceToken = 1108151492write

Dubbo如何支持本地调用?InJvm方式解析

Dubbo是一个远程调用的框架,对于一个服务提供者,暴露了一个接口供外部消费者调用,那么对于提供者自己是否可以调用这个接口,需要什么特殊处理吗? 这篇文章就分享下Dubbo关于本地调用的实现机制,以及如何开启和关闭本地调用. injvm支持本地调用 使用 Dubbo 本地调用不需做特殊配置,按正常 Dubbo 服务暴露服务即可.任一服务在暴露远程服务的同时,也会同时以 injvm 的协议暴露本地服务.injvm 是一个伪协议,不会像其他协议那样对外开启端口,只用于本地调用的目的. InjvmPr