EJB用了那么长时间了,从来没写过关于它的东西,挺对不住它的。今天先写一个简单的小实例,虽然小但是却能体现出EJB的核心——分布式。我们可以将业务逻辑的接口跟实现部署到一台机器上,将调用它们的客户端部署到另一台机器上。至于为什么要用分布式,今天不做讨论,以后再细说。

先来看接口:

package com.tjb.ejb;

public interface MyEjb {
String helloEjb ();
}

接下来是对接口的具体实现:

package com.tjb.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService; @Stateless
@Remote
@WebService
public class MyEjbBean implements MyEjb { public String helloEjb() {
return "Hello EJB";
} }

然后编写一个客户端来通过接口调用我们的实现:

package com.tgb.ejb;

import javax.naming.InitialContext;
import javax.naming.NamingException; import com.tjb.ejb.MyEjb; public class MyEjbClient { public static void main(String[] args) throws NamingException { InitialContext ctx = new InitialContext();
MyEjb ejb = (MyEjb) ctx.lookup("MyEjbBean/remote");
String hello = ejb.helloEjb();
System.out.println(hello); } }

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

客户端需要建一个名为jndi.properties的配置文件:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=192.168.24.27:1099

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

客户端跟上面的SessionBean是两个完全独立的项目,但是它们可以进行交互,客户端可以调用SessionBean来完成自己想要的操作,这正是EJB的分布式特性。可以将程序部署到不同的服务器。今天就到这里,以后再说分布式有什么优点。

最新文章

  1. bootstrap的table调用本列ID
  2. linux socket高性能服务器处理框架
  3. 期权交易基本原理——买进看跌期权(Long Put),卖出看跌期权(Short Put)
  4. Linux进程操作信息
  5. soinn
  6. ubuntu 14.04安装quickbuild server (一)
  7. 关于Android L软件安装问题的发现
  8. python xml.dom模块解析xml
  9. Java基础学习-三元运算符和键盘录入的基本步骤和使用
  10. 回头来学习wpf的FlowDocument
  11. Linux之LVS 20180708
  12. HDU 1046(最短路径 **)
  13. git部分提交
  14. MySQL - 用户变量
  15. swift函数的调用约定
  16. 利用千人基因组数据库查看SNP在不同地区、国家、洲的频率及个数
  17. Oracle的创建表和创建约束的Sql语句
  18. HTML Viewer展示不同字体
  19. Django中Celery http请求异步处理(四)
  20. SharePoint 2013 Designer工作流——Parallel Block的应用

热门文章

  1. ssh无法登录,提示Pseudo-terminal will not be allocated because stdin is not a terminal.
  2. 【php导出pdf文件】php将html 导出成pdf文件(MPDF60),支持完美分页,注意是完美!!
  3. CSS的子选择器与后代选择器的区别
  4. Dubbo整合SpringBoot
  5. ios中广告滚动页面(uiscrollview)
  6. ios中GDataXML解析XML文档
  7. 从html加载json文件想起
  8. servlet 中通过response下载文件
  9. Ubuntu中root用户和user用户的相互切换[转载自93度的饼干]
  10. find -exec 与xargs 区别