`
生活的聆听者
  • 浏览: 17276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EJB原理简单还原呈现:Skeleton、Sub之间的关系

    博客分类:
  • EJB
 
阅读更多
在基于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原理图详解 #### 一、EJB工作原理概览 EJB(Enterprise JavaBeans)是Java EE平台中的一个重要组成部分,它主要用于构建企业级应用。EJB提供了一种面向服务的方式,允许开发者专注于业务逻辑,而将复杂的...

    EJB入门[整理].pdf

    * 配置 EJB 的环境变量和依赖关系。 七、EJB 的安全性 EJB 的安全性包括: * 身份验证:确保用户身份的合法性。 * 授权:控制用户对 EJB 的访问权限。 * 加密:保护 EJB 的数据传输安全。 八、EJB 的best ...

    第一个EJB简单例子

    在这个“第一个EJB简单例子”中,我们将深入探讨如何创建和理解基本的EJB组件。 1. **EJB组件类型**: - **会话Bean(Session Beans)**:代表客户端的一次交互或会话。它们可以是状态ful(维护会话状态)或状态...

    ejb.rar_site:www.pudn.com

    EJB(Enterprise JavaBeans)是Java EE(Enterprise Edition)平台中的一个核心组件模型,它为开发者提供了一种标准的方式来创建可复用的、模块化的、跨平台的企业级服务器端应用程序。EJB的设计目标是为了简化...

    ejb原理详细说明,一个很容易理解的例子

    本文将深入探讨EJB的工作原理,并通过一个简单的示例帮助读者更好地理解。 #### EJB的基本概念 EJB主要分为三类:会话Bean(Session Bean)、实体Bean(Entity Bean)以及消息驱动Bean(Message-Driven Bean)。...

    EJB工作原理

    ### EJB工作原理详解 #### 一、EJB概述与工作流程 EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,专为构建大型分布式企业级应用而设计。它提供了一种在服务器端实现业务逻辑的方式,允许开发者将业务...

    java源码:各种EJB之间的调用示例.zip

    6. **EJB 3.0及其后续版本**:自EJB 3.0以来,EJB的使用变得更加简单和轻量级,引入了注解来减少XML配置,并且可以与其他Java Persistence API(JPA)和JSF(JavaServer Faces)等技术更好地集成。 7. **依赖注入...

    ejb 3.0 jar 包 很全 part2

    EJB(Enterprise JavaBeans)3.0是Java EE(Enterprise Edition)平台中的一部分,它提供了一种用于构建可部署在服务器端的企业级应用程序的框架。EJB 3.0引入了许多改进,使得开发过程更加简洁,降低了对XML配置的...

    EJB_TEST自己编写的EJB例子

    在EJB_TEST中,我们看到的是作者自编的一个EJB实例,这通常涉及到创建、部署以及运行EJB组件,以便展示其功能和工作原理。 **EJB的组成部分**: 1. **实体Bean (Entity Bean)**:代表业务数据,通常映射到数据库中...

    ejb2.0与ejb3.0的区别

    开发者不再需要关注复杂的EJB接口和生命周期管理,而是通过注解和简单的配置文件即可完成实体类到数据库表的映射。 #### 三、部署描述符的变化 - **EJB 2.0**:要求显式定义部署描述符(Deployment Descriptors),...

    EJB调用原理分析

    **EJB调用原理分析** Enterprise JavaBeans(EJB)是Java EE平台中用于构建分布式企业级应用的重要组件。EJB提供了服务器端的组件模型,允许开发者将业务逻辑封装在可重用的组件中,这些组件可以透明地运行在Java...

    EJB.rar_ejb_site:www.pudn.com

    **企业级JavaBeans(EJB)技术详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用的核心技术。EJB规范由Java Community Process(JCP)制定,...

    EJB依赖注入的原理

    依赖注入(Dependency Injection,简称DI)是软件设计模式中的一种,它强调将对象间的依赖关系交由外部容器管理,而非由对象自身负责。EJB3.0规范引入依赖注入,大大提高了代码的可测试性和可维护性。在EJB3.0中,...

    EJB3.0__EJB3.0

    EJB(Enterprise JavaBeans)是Java EE(Enterprise Java Platform)平台的一部分,主要用于构建分布式、事务处理、多客户端支持以及安全的后端企业级应用。EJB3.0是EJB规范的一个重要版本,它引入了许多简化开发的...

    ejb spring

    **ejb与Spring框架整合详解** ejb(Enterprise JavaBeans)是Java EE平台中的核心组件,主要用于构建可扩展的企业级应用程序。它提供了服务器端的组件模型,包括会话bean(Session Beans)、实体bean(Entity Beans...

    EJB工作原理学习笔记.pdf

    ### EJB工作原理详解 #### 一、EJB概述 企业级Java Beans(EJB)是一种服务器端的组件模型,用于开发和部署可重用的企业级组件。它是Java平台的一部分,专门为开发分布式网络应用而设计。EJB允许开发者将业务逻辑...

    实战EJB 实战EJB 实战EJB

    ### 实战EJB知识点解析 #### 一、企业JavaBeans (EJB) 技术概览 **什么是企业JavaBeans技术?** 企业JavaBeans (EJB) 是Java平台上的服务器端组件模型,专为构建可扩展、可靠且跨平台的企业级应用程序而设计。...

    ejb-sample-wildlfy:Wildfly 8.2.0 的示例 EJB 应用程序

    **ejb-sample-wildfly: Wildfly 8.2.0 示例EJB应用程序** 本项目是基于Wildfly 8.2.0的应用程序服务器上的一个EJB(Enterprise JavaBeans)示例应用。EJB是Java EE(Java Platform, Enterprise Edition)的一部分,...

Global site tag (gtag.js) - Google Analytics