在基于J2EE的规范各个J2EE APPLICATION SERVER中,对于EJB容器的实现原理都一样,在EJB容器提供的对服务端的EJB应用的访问提供几种不同的访问方式:可以通过WEB应用访问、胖客户端、APPCLIENT访问,下面以胖客户端访问方式来简单的说明在调用服务端的 EJB应用底层SOCKET大体实现原理:
1、构造一个简单的EJB应用,下面的简单EJB应用用EJB3.0规范实现:
@Remote
public Interface Ejb3Interface{
public String invokeEjb();
}
@Stateless
public class Ejb3InterfaceImpl implements Interface{
public String invokeEjb(){
return "Successful" ;
}
}
2、客户端lookUp:
InitialContext ic = new InitialContext();
Ejb3Interfacefoo remote = (Ejb3Interface)ic.lookup("com.test.Ejb3Interface");
String returnString = remote.invokeEjb();
上面简单的写了下EJB和EJB客户端调用方式,其中lookup里面和服务端怎么返回实际上APPLICATION SERVER已经全部封装好,对客户完全是透明的。下面简单写下这个底层socket过程。
package com.test;
public interface EjbTheory {
public String returnEjbTest();
}
package com.test;
public class EjbThroeyImpl implements EjbTheory{
private String ejbThreoyString;
public EjbThroeyImpl(String ejbString){
ejbThreoyString = ejbString;
}
public String getEjbThreoyString() {
return ejbThreoyString;
}
public void setEjbThreoyString(String ejbThreoyString) {
this.ejbThreoyString = ejbThreoyString;
}
public String returnEjbTest(){
return ejbThreoyString;
}
}
package com.test;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class EjbTheoryStub implements EjbTheory{
private static final String IP_ADDRESS = "localhost";
private static final int IP_PORT = 8888;
Socket socket;
public EjbTheoryStub(){
try {
socket = new Socket("127.0.0.1", IP_PORT);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String returnEjbTest(){
ObjectOutputStream outputStream = null;
ObjectInputStream inputStream = null;
String returnString = null;
try {
outputStream = new ObjectOutputStream(socket.getOutputStream());
outputStream.writeObject("returnEjbTest");
outputStream.flush();
inputStream = new ObjectInputStream(socket.getInputStream());
returnString = (String)inputStream.readObject();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnString;
}
}
package com.test;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EjbTheorySkeleton implements Runnable{
private static final int PORT = 8888;
private EjbThroeyImpl ejbThroeyImpl;
private ServerSocket serverSocket ;
private Socket socket ;
public EjbTheorySkeleton(EjbThroeyImpl ejbThroeyImpl){
this.ejbThroeyImpl = ejbThroeyImpl;
try {
serverSocket = new ServerSocket(PORT);
System.out.println("Server Waiting" );
socket = serverSocket.accept();
System.out.println("Server Accept");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run(){
SkeletonConfirm();
}
private void SkeletonConfirm(){
ObjectInputStream objectInputStream = null;
ObjectOutputStream objectOutputStream = null;
try{
objectInputStream = new ObjectInputStream(socket.getInputStream());
System.out.println("Socket = " +socket);
String confirmMethod = (String)objectInputStream.readObject();
System.out.println("confirmMethod = " +confirmMethod);
if(confirmMethod.equals("returnEjbTest")){
String string = ejbThroeyImpl.returnEjbTest();
System.out.println("Receive From Client And Return is :" + string);
objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
objectOutputStream.writeObject(string);
objectOutputStream.flush();
}
}catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String args[]){
EjbThroeyImpl ejbThroey = new EjbThroeyImpl("Hello World");
new Thread(new EjbTheorySkeleton(ejbThroey)).start();
}
}
package com.test;
public class EjbTheoryTestClient {
public static void main(String args[]){
EjbTheory ejbTheory = new EjbTheoryStub();
String getString = ejbTheory.returnEjbTest();
System.out.println(getString);
}
}
未完,写的不详细 注释什么都还没有写,下次补上,写的比较简单,一看就会明白,欢迎指教哦
分享到:
相关推荐
简明扼要概括EJB的工作原理,让你能更好地理解EJB的工作机制
EJB是JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台
分析ejb及rmi原理 1. RMI工作原理 2. websphere、weblogic实现 3. 理解体会 ...
ejb工作原理,详细描述EJB的工作流程及原理
ejb 3.0 jar 包 很全ejb 3.0 jar 包 很全ejb 3.0 jar 包 很全
EJB3开发指南英文版《EJB.3.Developer.Guide》 出版商:PacketPublishing 出版日期:2008年5月 页数:276 简介: 第一章:EJB3体系结构简介 第二章:Session Beans 第三章:实体Entities 第四章:对象关系映射ORM 第...
这是一个EJB原理的详细介绍,里面是一个简单的例子和详细的解释说明,有助于学学者理解。
java源码:各种EJB之间的调用示例.zip
ejb 集群示例 JBoss EJB 集群示例 安装 在域模式下运行干净的 JBoss EAP 6.3 ./jboss-eap-6.3/bin/domain.sh 运行安装脚本 ./jboss-eap-6.3/bin/jboss-cli.sh -c --file=setup.cli 在服务器上部署文件ejb-cluster...
依赖注入的原理详细说明 依赖注入的原理详细说明 依赖注入的原理详细说明
ejb-定时器-测试 EJB TIMER SERVICE API 使用测试项目 #文档和/或官方教程: ://docs.oracle.com/javaee/7/tutorial/ejb-basicexamples004.htm#BNBOY #API JavaEE7 #Examples 以及如何运行它们: 注意:在运行...
this ppt describes ejb technology detailed from the scratch, you can get a skeleton of ejb through this ppt!
ejb目标jar 博文链接:https://zerxd.iteye.com/blog/250674
EJB3.0入门图文教程 :包含了EJB3的开发实例及JBOSS等服务器配置每一步开发和操作都有图示。(内含3有PDF文件包括EJB3详尽开发。)
EJB3的三本好书之三,也很不错的一本ejb3的书籍,是英文版,附带源代码,这本书的好处是与Mastering EJB 3ed有一定的继承性,可以对比来看. 3本书的地址 1. Beginning EJB3 Application Development From Novice to ...
EJB原理与运行环境培训教程.pptx
EJB3的三本好书第二本,最好的介绍ejb3的书,看过之后,其他的书都送人了,而且附带的源代码,几乎包括了所有的主流应用服务器的例子,glassfish, jboss, weblogic, oracleAS 3本书分别是: 1. Beginning EJB3 ...
struct ,spring,ejb架构原理培训以及相关源码,程秀野
ejb-样本Wildfly 8.2.0 的示例 EJB 应用程序
实战EJB 实战EJB 实战EJB 电子书 pdf