EJB初学日记(2)

本文介绍了如何将 EJB 3.0 部署于 JBoss 容器,并在 Java SE 应用程序中通过 Swing 调用 EJB 的过程。演示了如何定义本地和远程接口,实现 HelloBean 类并从客户端应用进行调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2007年10月10日 07:39:00
其实在学习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包就可以了.

来自:
千里冰封

Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1817704


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值