ejb3 第6讲--开发具有本地接口的无状态bean

系统 1399 0

 

 

理解:

 

1.当ejb的服务器端和客户端不再一个jvm上的时候,也就是部署在不同的机器上的时候,我们必须使用远程接口调用ejb,这时候我们就需要使用iiop协议,socket完成ejb客户端和ej服务器的通讯。

 

2.当ejb的服务器和ejb的客户端在同一个jvm的时候,也就是不数载相同的机器上的时候,我们可以使用ejb的本地接口来调用ejb,不需要走网络通信,直接在jvm级别完成ejb的调用。

 

3.我们在实际的开发过程中,要根据情况选择是通过本地接口调用ejb还是使用远程接口来调用ejb

 

 

实验:

 

我们现在模拟一个ejb,它有远程接口,也有本地接口,使用两个客户端调用这个ejb,一个在eclipse中写一个main方法,让它充当ejb的客户端,则他和ejb是不在一个jvm里,我们使用远程接口调用ejb,在写一个web工程,吧她部署在jboss中,她和ejb在一个jvm,或者容器中,我们使用 远程接口来调用ejb。

 

步骤:

 

 1.ejb远程接口

    package cn.com.xinli.ejb3;

public interface HelloWorld
{
	public String sayHello(String name);
}

  

 

2.ejb本地接口 只需要继承远程接口即可

    package cn.com.xinli.ejb3;

public interface HelloWorldLocal extends HelloWorld
{
	
}

  

 

 3.实现

    package cn.com.xinli.ejb3.impl;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateful;

import cn.com.xinli.ejb3.HelloWorld;
import cn.com.xinli.ejb3.HelloWorldLocal;


/*表明这个ejb是无状态的会话bean*/
@Stateful
/*声明这个ejb的远程接口是HelloWorld,必须要写这个注解,否则调用的时候会报错*/
/*声明这个ejb的本地接口是HelloWorldLocal,必须要写这个注解,否则调用的时候会报错*/
@Local(HelloWorldLocal.class)
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld,HelloWorldLocal
{

	public String sayHello(String name)
	{
		return name+",你好,世界!我的ejb3的第一个例子!";
	}
	
}

  

 

4.不再一个jvm的客户端

 

    package cn.com.xinli.ejb3.test;
import java.util.Hashtable;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import cn.com.xinli.ejb3.HelloWorld;
public class EjbClient
{
	public static void main(String[] args)
	{
		Hashtable evn = new Hashtable();
		evn.put(Context.PROVIDER_URL, "127.0.0.1:1099");
		evn.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		
//		Properties properties=new Properties();
//		properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
//		properties.setProperty("java.naming.provider.url", "localhost:1099");
	
		try
		{
			InitialContext context=new InitialContext(evn);
			/**
			 * ejb3比ejb2有可地方比较好,就是在jndi查找的时候不用我们在写ejb-jar.xml
			 * 只要我们按照jndi名字的查找规范就可以找到远程接口了
			 * 
			 */                                              
			HelloWorld helloword=(HelloWorld)context.lookup("HelloWorldBean/remote");
			System.out.println(helloword.sayHello("huxl"));
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

  

 

5.和ejb在一个jvm的客户端,主要是建立一个web项目,然后他引用 ejb那个项目。部署在jboss里,写一个jsp页面,里面用<%%>的形式写一个客户端,完成本地接口的调用

test.jsp

 

    <%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="javax.naming.InitialContext"%>
<%@page import="cn.com.xinli.ejb3.HelloWorldLocal"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert titlsse here</title>
</head>
<body>


<%



try
{
	
	//由于是本地调用,不需要在设置本地的属性配置,它会从上下文中找jndi信息
	//这样做也体现了跨平台,比如从jbss->websphere 属性配置是不一样的
	
	
	InitialContext context=new InitialContext();
	                                              
	HelloWorldLocal helloword=(HelloWorldLocal)context.lookup("HelloWorldBean/local");
	
	out.println(helloword.sayHello("huxl"));
	
} catch (Exception e)
{
	// TODO Auto-generated catch block
	e.printStackTrace();
}


%>
</body>
</html>
  

 

 

 6.打包ejb,然后通过main方法调用远程接口成功,使用test.jsp调用本地接口也成功!

 

 

 

 

 

ejb3 第6讲--开发具有本地接口的无状态bean


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论