`
生活的聆听者
  • 浏览: 16692 次
  • 性别: 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);
	}
}


未完,写的不详细 注释什么都还没有写,下次补上,写的比较简单,一看就会明白,欢迎指教哦
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics