`
8366
  • 浏览: 809308 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

    博客分类:
  • ejb
阅读更多

 

 

理解:

 

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调用本地接口也成功!

 

 

 

 

 

分享到:
评论

相关推荐

    实战EJB 实战EJB 实战EJB

    #### 三、实战EJB之二:开发会话Bean(无状态会话Bean) **什么是无状态SessionBean?** 无状态会话Bean是一种EJB组件类型,它不保留客户端之间的任何状态信息。每次客户端请求都会创建一个新的实例,这意味着每个...

    eclipse + JBoss 5 + EJB3开发指南

    #### (1):编写第一个无状态的SessionBean ##### 一、配置开发环境 在开始编写无状态的SessionBean之前,首先需要确保开发环境已经正确配置。以下是所需的主要组件: 1. **Eclipse**:版本3.4.2,推荐使用针对...

    ejb3.0非常实用教程

    - **仅Remote接口**:开发简单的无状态Session Bean,仅提供Remote接口。 - **仅Local接口**:创建只有Local接口的无状态Session Bean。 - **同时提供Remote和Local接口**:结合两种接口类型的优势。 2. **有状态...

    第一个EJB简单例子

    - 编写接口:对于会话Bean,可能需要本地(Local)和远程(Remote)接口,供客户端调用。 - 打包部署:将Bean类、接口、配置文件打包成ejb-jar,并放入应用服务器的部署目录。 3. **EJB生命周期**: - 实例化:...

    Jboss EJB3.0教程

    - 开发同时具备Remote与Local接口的无状态Session Bean: - 讨论如何同时支持远程和本地接口访问的策略。 - **有状态Session Bean**: - 描述有状态Session Bean的生命周期管理机制。 - **无状态与有状态...

    EJB 3.0实例教程(pdf)

    - **仅提供本地接口**:展示如何仅使用本地接口来开发无状态会话Bean。 - **同时提供远程和本地接口**:介绍如何同时为无状态会话Bean定义远程和本地接口。 - **有状态会话Bean(Stateful Session Bean)**:解释有...

    ejb3入门

    - **SWING**: 在Swing桌面应用中通过本地接口调用EJB。 **4. WEB应用调用EJB** - 在部署于JBoss AS的Web应用中调用EJB组件。 **5. 获取最新版本的JBoss** - 访问JBoss官方网站或社区论坛获取最新的包含EJB3支持的...

    JBOSS EJB3.0实例教程

    **4.1 STATELESS SESSION BEANS(无状态Bean)开发** - 无状态会话Bean不保存客户端之间的状态信息。 - 适用于执行短暂任务,如业务逻辑处理等。 **4.1.1 开发只存在Remote接口的无状态SessionBean** - 定义远程...

    EJB2的3本好书第3本 EJB Cookbook

    1. **本地接口(Local Interfaces)**:EJB2.1引入了本地接口,使得同一个J2EE应用内部的组件可以直接调用EJB,无需通过远程接口,提高了效率。 2. **CMP2.0改进**:容器管理的持久化增强了对复杂关系的支持,比如...

Global site tag (gtag.js) - Google Analytics