`
8366
  • 浏览: 802217 次
  • 性别: 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调用本地接口也成功!

 

 

 

 

 

分享到:
评论

相关推荐

    eclipse + JBoss 5 + EJB3开发指南

    (3):使用Session Bean的本地接口 9 (4):Session Bean中的注释方法 11 (5):使用配置文件发布Session Bean 12 (6):JBOSS中测试中的常用错误 13 (7):JBoss只能本地访问,不能通过ip远程访问解决办法 15 ...

    第一个EJB简单例子

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

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    8.3.2 开发本地调用的无状态 Session Bean 311 8.4 发布Session Bean 314 8.4.1 打包EJB-JAR 315 8.4.2 Annotation与部署描述文件 315 8.5 开发有状态的Session Bean 318 8.6 Session Bean的生命周期 321 8.6.1 无...

    EJB2的3本好书第3本 EJB Cookbook

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

    javax.ejb.jar.zip

    6. **本地接口**:对于在同一JVM内的通信,EJB还可以提供本地接口,效率更高,本地接口不包含远程通信的额外开销。 7. **生命周期回调方法**:如`ejbCreate()`、`ejbPostConstruct()`、`ejbRemove()`等,这些方法在...

    精通ejb第二版

    3. **接口和实现**:阐述Bean接口的设计原则,包括本地接口(Local Interface)和远程接口(Remote Interface),以及对应的实现类。 4. **持久化机制**:讲解实体Bean的持久化管理,包括CMP(Container-Managed ...

    Mastering EJB 2nd edition

    5. **远程接口**:讨论EJB的客户端调用机制,包括远程接口(Remote Interface)和本地接口(Local Interface),以及它们在分布式环境中的通信方式。 6. **ejb-jar.xml和web.xml**:解析这两个重要的XML配置文件,...

    struts经典案例

    无状态Bean通常用于简单操作,有状态Bean保存了会话期间的信息。 - Entity Beans:代表数据库中的持久化对象,通常用于数据存储和检索。 - Message-Driven Beans:用于处理消息队列中的消息,常用于异步处理。 3....

    jsp servlet 入门学习资料-新手一看就懂

    第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page指令 6.4.1 import 6.4.2 session 6.4.3 错误处理 6.5 包含其他文件 ...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java优化编程(第2版)

    第6章 类与接口 6.1 类的构造器 6.1.1 构造器编写规则 6.2 类的继承规则 6.2.1 单线继承规则 6.2.2 包内部继承规则 6.2.3 逻辑包含继承规则 6.3 抽象类与接口 6.4 继承与组合的应用时机 6.5 接口与抽象类的应用时机 ...

    Core J2EE Patterns核心模式第二版源码

    这本书的第二版源码对于深入理解J2EE开发中的核心概念和技术具有极高的价值。以下是基于源码的一些关键知识点的详解: 1. **企业架构模式**: - **Session Façade(会话 façade)模式**:作为客户端和EJB组件...

    Spring 2.0 开发参考手册

    18.2.2. 访问本地的无状态Session Bean(SLSB) 18.2.3. 访问远程SLSB 18.3. 使用Spring提供的辅助类实现EJB组件 19. JMS 19.1. 简介 19.2. 使用Spring JMS 19.2.1. JmsTemplate 19.2.2. 连接工厂 19.2.3. ...

    jsp从入门到高级编程

    第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page指令 6.4.1 import 6.4.2 session 6.4.3 错误处理 6.5 包含其他文件 ...

    JSP高级教程

    第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page指令 6.4.1 import 6.4.2 session 6.4.3 错误处理 6.5 包含其他文件 ...

    JavaEE6规范中文版(CHM)

    6. **Enterprise JavaBeans 3.1 (EJB 3.1)**:EJB3.1简化了EJB的使用,支持无状态会话bean的本地接口,以及轻量级的Singleton bean,使得EJB更适合于微服务架构。 7. **Web服务**:JavaEE6增强了对WS-*规范的支持,...

    JSP高级编程

    第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page指令 6.4.1 import 6.4.2 session 6.4.3 错误处理 6.5 ...

Global site tag (gtag.js) - Google Analytics