学习感悟:每次学习新的知识,都会通过第一个小的实例入手,获得成就感,经典的Hello Workd实例奠定了我们成功的大门哈,这些经典的实例虽小但是五脏俱全呢,很好的理解了,Ejb的核心。

今天主要以这个小实例,来学习EJB的分布式,我们可以将接口与实现放到一台计算机上,而客户端可以放到另一台机器上,当然分布式的意思很大了(下篇博客给大家讲解),快来看实例。

一:代码实现

1:定义接口

<span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.ejb;

public interface FirstEjb {
public String saySomething(String name); }</span></span>

2:编写对接口的实现

<span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless; @Stateless
@Remote
public class FirstEjbBean implements FirstEjb { @Override
public String saySomething(String name) {
// TODO Auto-generated method stub
return "你好,"+ name;
} }
</span></span>

3:编写客户端来通过接口调用实现

<span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.ejb;

import javax.naming.InitialContext;

public class FirstEjbElient {
public static void main(String[] args) throws Exception{
InitialContext context = new InitialContext(); FirstEjb firstEjb = (FirstEjb)context.lookup("FirstEjbBean/remote");
String s = firstEjb.saySomething("張三");
System.out.println(s); }
}
</span></span>

客户端实例化一个上下文对象,然后通过其lookup方法查找远程实现,最后调用具体的方法。客户端想要成功调用,需要将其接口引用到客户端的项目里。

需要添加jndi配置文件

java.naming.provider.url指的是接口跟实现所在机器的地址和端口。

<span style="font-size:18px;">java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost</span>

客户端跟上面的SessionBean是两个完全独立的项目,但是它们可以进行交互,客户端可以调用SessionBean来完成自己想要的操作,这正是EJB的分布式特性。

效果实现

二:配置



服务端开发好后,需要将其jar包部署到jboss的热部署目录。客户端通过JNDI服务,能够从此拿到服务对象。



使用JNDI来远程访问Ejb服务,需要使用强制转换来转化成接口类型。



所以,我们需要在Ejb的客户端引入jboss的client包,加到当前项目的环境变量中,来支持JNDI服务;



另外客户端需要知道服务端的接口,不然就无法根据名字拿到服务。所以需要将服务端的接口打成jar包,并在ejb的客户端引入。

总结

实现了本文实例,大家就算是入门了,带着这些成功的学习劲头,快速继续学习,在后文我会对Ejb进行更加深入的剖析。

SSH深度历险(二) Jboss+EJB的第一个实例的更多相关文章

  1. SSH深度历险(十一) AOP原理及相关概念学习+xml配置实例(对比注解方式的优缺点)

    接上一篇 SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP,本篇我们主要是来学习使用配置XML实现AOP 本文采用强制的CGLB代理方式 Security ...

  2. SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP

    AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...

  3. SSH深度历险(三) EJB Session Bean有状态和无状态的差别与联系

    刚開始对两种sessionbean存在误解.觉得有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用.而觉得无状态是每次调用实例化一次,不保留用户信息.细致分析并用实践检验后,会发现,事实 ...

  4. SSH深度历险(三) EJB Session Bean有状态和无状态的区别与联系

    刚开始对两种sessionbean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息.仔细分析并用实践检验后,会发现,事实 ...

  5. SSH深度历险(七) 剖析SSH核心原理(一)

    接触SSH有一段时间了,但是对于其原理,之前说不出来莫模模糊糊(不能使用自己的语言描述出来的就是没有掌握),在视频和GXPT学习,主要是实现了代码,一些原理性的内容还是欠缺的,这几天我自己也一直在反问 ...

  6. SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传

    在gxpt_uas系统中,要实现文件(文件和图片等等,可以灵活配置)的批量上传至mongodb,在学习这个过程中,学习了mongodb,并实现了批量上传的功能,实现思路:在DWZ的基础上参考官方的实例 ...

  7. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了详细总结,在此之间对Spring的事务配置只是停留在听说的阶段,总结一下,整体把控,通过这次的学习发觉Spring的事务配置只要把思路 ...

  8. SSH深度历险(四) Maven初步学习

    这几天接触这个词,很多遍了,只是浅显的体会到它在GXPT中的好处,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理 ...

  9. SSH深度历险(四) Maven初步学�

    这几天接触这个词,非常多遍了,仅仅是浅显的体会到它在GXPT中的优点,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),能够通过一小段描写叙述信 ...

随机推荐

  1. 例10-7 uva10820(欧拉)

    题意:输入n,要求满足1≤x,y≤n,且x,y互素的个数. 若输入2,则答案3为(1,1),(1,2),(2,1);所以欧拉函数求出所有数的phi值,除了1之外都加上phi值的2倍即可 通过推导: p ...

  2. [BZOJ]3110 K大数查询(ZJOI2013)

    这大概是唯一一道小C重写了4次的题目. 姿势不对的树套树(Fail) → 分块(Fail) → 整体二分(Succeed) → 树套树(Succeed). 让小C写点心得静静. Description ...

  3. [bzoj3673/3674可持久化并查集加强版]

    n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2 ...

  4. [bzoj1143][CTSC2008]祭祀

    题意:给定一个n个点m条边的有向无环图,你要选出最多的点,并且满足任意两点之间都不存在通路.2)输出每个点选了它之后还是否有最优解.   n<=100 m<=1000 题解:每个点拆两个点 ...

  5. zookeeper快速入门

    一.zookeeper简介 zookeeper 是apache旗下的hadoop子项目,它一个开源的,分布式的服务协调器.同样通过zookeeper可以实现服务间的同步与配置维护.通常情况下,在分布式 ...

  6. 使用WebStorm进行javascript调试

    曾经的选择是使用火狐浏览器的Firebug插件,具体的用法到时候在细说,这篇文章登场的是开发静态网页及javascript的利器--webstorm. 一.相关软件安装和配置 安装WebStorm  ...

  7. C++值传递与引用传递

    值传递:形参是对实参的拷贝,改变形参的值不会改变外部实参的值,从被调用的角度来说,值传递时单向传递(实参->形参),参数的值只能传入,不能传出. 当函数内部需要修改参数,并且不希望这个改变影响调 ...

  8. 《Java技术》第一次作业——Java语言基础

    学习总结 Scanner类实现基本数据输入的方法 Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配.然后可以使用不同的 next 方法将得到的标记转换为不同类型的值. ...

  9. 初体验GCP,【福利300$试用金】

    1.https://cloud.google.com/free/ ,填写相应信息.需要信用卡,预扣1美元. 2.一波信息填写,成功. 3.激活终端 4.创建一个Python项目,选择部署地点. 5.部 ...

  10. jquery easyui panel title文字格式设置

    $('#txtLeftPercent').panel({ title: '剩余权重:' + '<b style="color:red">' + 100 + '%< ...