其实在学习EJB之前,就听说过EJB,有人说他很复杂,也有人说一般般而已,但是几乎所有的人都说EJB3.0确实是简单了许多.
一般讲起JAVA EE,一般人都认为是应用在网页里面的,甚至有人把JAVA EE和JSP等同起来,要知道,JAVA EE是一个很庞大的结构,而JSP只是里面一部份中的一部份而已.
今天我就把JAVA EE的EJB应用到JAVA SE中看一看,在JBOSS里面布署好EJB,然后在swing里面调用EJB,并且观察一些特性.
首先我们先定义一个EJB的接口,接口里面放上我们需要远程调用的方法
在定义接口的时候,可以给它加上@Remote或者@Local注释,表示是远程还是本地,也可以什么都不加,就是一个很普通的接口,然后在实现的时候加上相应的注释,我们就采取第二种,也就是接口的定义里面什么注释都没有
package test1;
/**
* This is the business interface for Hello enterprise bean.
*/
public interface HelloLocal {
public String helloFromLocal(String s);
}
package test1;
import javax.ejb.Remote;
/**
* This is the business interface for Hello enterprise bean.
*/
public interface HelloRemote {
public String helloFromRemote(String s);
}
以上是两个接口, 一开始是拟做本地调用和远程调用的两个接口,后来我想,能不能让一个接口既是本地接口也是远程接口呢,在JBOSS是可以的.实现如下
/*
* HelloBean.java
*
* Created on 2007年9月6日, 下午6:02
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package test1;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.swing.JOptionPane;
/**
*
* @author hadeslee
*/
@Stateless
@Remote({HelloLocal.class,HelloRemote.class})
@Local({HelloLocal.class,HelloRemote.class})
public class HelloBean implements test1.HelloRemote, test1.HelloLocal {
private int i=0;
/** Creates a new instance of HelloBean */
public HelloBean() {
}
public String helloFromRemote(String s) {
i++;
System.out.println("第"+i+"次调用");
System.out.println("来自远程的问侯:"+s);
return "远程返回:"+s+":"+i;
}
public String helloFromLocal(String s) {
i++;
System.out.println("第"+i+"次调用");
JOptionPane.showMessageDialog(null,"来自本地的问侯:"+s);
System.out.println("来自本地的问侯:"+s);
return "本地返回:"+s+":"+i;
}
}
在实现的类里面@Remote@Local表示它们要实现的接口,我把两个都放进去了,在NetBeans里面,会有错误的提示,提示内容如下:
Bean使用以下类做为本地和远程业务接口:test1.HelloLocal
但是我编译以后一样是可以布署的,不知道别的EJB容器是否可以这样做.jboss确实是可以的
好了,现在我们都定义好了,马上把它们布署到JBOSS里面去吧.
布署完了之后,就开始开发我们的应用程序了,因为这个调用只涉及到一个方法,我们就不用去定义一个界面了.
我们简单的程序如下.
/*
* TestHello.java
*
* Created on 2007年9月6日, 下午6:06
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package testejb;
import java.util.Properties;
import javax.naming.InitialContext;
import test1.HelloLocal;
import test1.HelloRemote;
/**
*
* @author hadeslee
*/
public class TestHello {
/** Creates a new instance of TestHello */
public TestHello() {
}
public static void main(String[] args) throws Exception{
Properties props = new Properties();
//这些是JBOSS的初始化一些参数
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx;
ctx = new InitialContext(props);
//找到远程接口,这时其实也可以转成HelloLocal
HelloRemote hello = (HelloRemote) ctx.lookup("HelloBean/remote");
System.out.println(hello.helloFromRemote("千里冰封"));
//可以直接转型过来
HelloLocal local=(HelloLocal)hello;
System.out.println(local.helloFromLocal("hadeslee"));
}
}
这个时候,我们就可以看到,会有一个 JOptionPane弹出来,点了确定之后,客户端这边才会有输出,JOpitonPane出来之后不一定在最前端显示,所以可能需要找一下,就是因为这个问题搞得我糊涂了一下,我找了半天找不到,后来一个一个窗口的最小化,终于发现了JOptionPane在那里.
为了能运行客户端,你需要把如下的JAR包放到运行客户端的classpath里面,如果是用NetBeans开发的话,加入一个库可以了,库里面包含的JAR文件如下:
[jboss安装目录]\client\commons-logging.jar
[jboss安装目录]\client\ concurrent.jar
[jboss安装目录]\client\ ejb3-persistence.jar
[jboss安装目录]\client\ hibernate-annotations.jar
[jboss安装目录]\client\ hibernate-client.jar
[jboss安装目录]\client\ javassist.jar
[jboss安装目录]\client\ jboss-annotations-ejb3.jar
[jboss安装目录]\client\ jboss-aop-jdk50-client.jar
[jboss安装目录]\client\ jboss-aspect-jdk50-client.jar
[jboss安装目录]\client\jboss-common-client.jar
[jboss安装目录]\client\ jboss-ejb3-client.jar
[jboss安装目录]\client\ jboss-ejb3x.jar
[jboss安装目录]\client\jboss-j2ee.jar
[jboss安装目录]\client\jboss-remoting.jar
[jboss安装目录]\client\jbosssx-client.jar
[jboss安装目录]\client\jboss-transaction-clie
[jboss安装目录]\client\jnp-client.jar
[jboss安装目录]\client\trove.jar
[jboss安装目录]\client\jbossws-client.jar
[jboss安装目录]\client\jboss-jaxws.jar
[jboss安装目录]\client\xmlsec.jar
这样的话,就可以把EJB布署在EJB容器里面,而我们可以在任何地方调用它了.只要你在想调用的地方,带上上面的JAR包就可以了.
分享到:
相关推荐
**企业级JavaBeans(EJB)初学者指南** 企业级JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用程序的核心技术。EJB规范定义了一组组件模型,允许开发人员创建分布式、多层的服务器...
本教程针对EJB初学者,旨在通过分章节的示例代码帮助大家逐步掌握EJB的核心概念和技术。 1. **EJB概述** EJB是一种服务器端组件模型,它提供了事务管理、安全性、状态管理和并发控制等服务,以简化企业级应用程序...
### EJB初学者常有的十一个疑惑解析 #### 一、EJB与Java Bean的区别 在探讨EJB与Java Bean的区别之前,我们首先需要明确两者的基本概念。 **Java Bean**: - **定义**:Java Bean是一种可重用的组件,没有严格的...
2. **EJB生命周期**: - **创建(Creation)**:当容器接收到对bean的请求时,会实例化bean。 - **初始化(Initialization)**:bean实例化后,可能会执行初始化方法。 - **激活(Activation)**:对于有状态会话...
本源代码主要向EJB初学者介绍JMS的使用,如何创建和初始化一个请求Requestor对象、如何初始化请求Requestor对象、如何建立一个会话和发送请求、如何打印出请求的过程信息、如何接受由反馈者replier发回的消息等。
### EJB 3.0 初学者必备知识点详解 #### 一、EJB 3.0 概述 **EJB (Enterprise JavaBeans)** 是Java平台为企业级应用程序提供的一种组件模型,它允许开发者以模块化的方式构建分布式网络计算的应用程序。EJB 3.0...
【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...
这个示例对于初学者来说,是一个很好的学习资源,因为它展示了如何在实际项目中将EJB和Struts2结合起来,同时也涉及到了Java EE的基础知识,如服务器部署、MVC架构、EJB的使用以及Struts2的配置。通过研究这个示例,...
### EJB3课堂笔记知识点概览 #### 一、EJB 概述 - **EJB 定义**: Enterprise JavaBeans (EJB),即企业级Java Bean,是一种用于开发、部署服务器端分布式组件的标准(规范),它采用了Java语言进行编写。 - **EJB ...
总的来说,《Mastering EJB 2nd edition》不仅是一本预览EJB技术的PDF读物,还是一本深入学习和掌握EJB的实用指南,无论你是初学者还是有经验的开发者,都能从中受益匪浅。通过阅读此书,你可以系统地了解EJB,并...
### EJB3 最新学习教程知识点详解 #### 一、EJB3 概念与特点 **企业级JavaBean(EJB)**是Java...通过以上内容的学习,初学者可以系统地了解EJB3的核心概念、开发流程及高级特性,为进一步深入学习打下坚实的基础。
第1篇对EJB编程基础进行介绍,它概要性地对EJB进行了阐述,无论是EJB初学者,还是资深EJB专家,这部分内容都值得阅读;第2篇重点关注EJB编程的具体内容和过程,其中,研究了如何开发如下三种EJB组件:会话Bean、实体Bean和...
j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee ...
- **EJB2**:这是一个目录,里面可能包含EJB 2.0的项目结构,包括Bean的源代码、部署描述符(deployment descriptor,如ejb-jar.xml)、以及可能的测试用例。EJB Bean的源代码通常遵循特定的接口,如Remote接口...
在 ejb2.rar_bmp ejb2_ejb2_ejb2 cmp b 这个压缩包中,我们看到的是针对EJB 2.1规范的一个登录实例,它涉及到了两种主要的实体Bean管理策略:CMP(Container-Managed Persistence,容器管理持久化)和 BMP(Bean-...
### EJB技术详解 #### EJB 2.0与EJB 1.1的主要区别及其应用场景 EJB(Enterprise JavaBeans)技术自1998年首次推出以来,经历了多个版本的演进,其中EJB 2.0是EJB 1.1的重要升级版,带来了诸多改进和新特性,旨在...
EJB2是EJB规范的第二个主要版本,相较于EJB1,它提供了更多的功能和改进,使得企业级开发更加方便。 在EJB2中,主要存在三种类型的Bean: 1. **Session Bean**:处理复杂的业务逻辑,它们是无状态或有状态的。无...
javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....