`
生活的聆听者
  • 浏览: 17209 次
  • 性别: 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方面相关详解

    Enterprise JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的分布式应用程序的一种技术。EJB标准由Java Community Process(JCP)制定,它为开发者提供了在服务器端实现业务逻辑的框架,使得开发人员...

    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平台上的服务器端组件模型,专为构建可扩展、可靠且跨平台的企业级应用程序而设计。...

Global site tag (gtag.js) - Google Analytics