其实在学习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包就可以了.
分享到:
相关推荐
在J2EEOA项目中,EJB可能被用来处理复杂的业务规则和数据访问。 Struts是基于MVC(Model-View-Controller)设计模式的Web应用框架,它帮助开发者组织和管理JavaServlet和JSP,使应用程序结构更加清晰,便于维护。在...
2. **系统设计**:在需求分析基础上,文档将深入到系统架构的设计,包括J2EE三层架构(表现层、业务逻辑层、数据访问层)的应用,以及可能采用的技术栈,如Servlet、JSP、JavaBean、EJB等。此外,还会涉及数据库设计...
这个"JSF学习日记"的压缩包文件包含了一个作者在学习过程中创建的实例和所需的JSF库文件,这对于初学者或者希望深入理解JSF的人来说是非常有价值的资源。 JSF的核心概念包括以下几个方面: 1. **组件模型**:JSF...
6. **EJB(Enterprise JavaBeans)**:虽然现代JavaEE应用更多使用轻量级框架如Spring,但了解EJB的基本概念也是有益的,特别是Session Beans和Entity Beans。 7. **Web容器**:如Tomcat或Jetty,这些容器负责部署...
总结,这份实习报告详细涵盖了Java语言的基础知识,从语言的历史、基本语法、数据类型、控制结构到面向对象编程、异常处理、集合框架等核心概念,还包括了简单的IO流、线程和网络编程的介绍,对于初学者来说是一份...
**JSP(Java Server Pages)**是Java平台上用于创建动态网页的一种技术,它结合了HTML、脚本语言(如JavaScript)和Java代码,使得开发者可以...通过阅读"JSP学习日记",你可以逐步了解这些概念,并通过实践提升技能。
此外,《Enterprise JavaBeans》一书提供了关于企业级Java应用的重要知识,特别是对于那些希望掌握EJB框架的人来说。 #### 应用服务器的选择与学习 对于想要进行更深层次的企业级Java应用开发的开发者来说,选择...