开发远程接口的无状态会话bean

本文详细介绍了如何开发远程接口的无状态会话bean,包括定义远程接口、创建实现类及其注释说明,以及如何通过JSP页面进行测试。重点在于理解无状态会话bean的工作原理和性能优势。

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

 

开发远程接口的无状态会话bean

 

         由于无状态会话bean不维护会话状态,这就意味着一个bean实例可以为多个用户服务。简单地说就是:当无状态会话bean部署到应用服务器时,EJB容器会为它预先创建一些bean实例放在对象池。无状态会话bean比有状态会话bean更具性能优势,在条件允许的情况下开发人员首先考虑使用无状态会话bean。

3.1 开发实现远程接口的无状态会话bean

 

1、定义一个远程接口。 

package huizhi.HelloEJBRemote;

public interface HelloEJBRemote {
	public String hello(String name);
}

2、创建这个接口的实现类:

package huizhi.HelloEJBRemote;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote( { HelloEJBRemote.class })
public class HelloEJBRemotebean implements HelloEJBRemote {

    public HelloEJBRemotebean() {
        
    }

    public String hello(String name) {
        return new String("你好," + name);
    }

}


对双面的注释的介绍:

@Stateless  注释用来指定bean实现类是无状态的。该注释具有一个name属性可用来为bean实现类指定EJB名称,例如:

            @Stateless(name="HelloEJB")

如果不指定该属性,则默认就是不饿按实现类的类名。

@Remote   注释用来指定bean实现类的远程接口。bean实现类可以继承多个远程接口,每个接口之间用逗号隔开,例如:

            @Remote({HelloEJBRemote.class,UserEJBRemote.class})

如果只有一个远程接口则可以省去大括号,本例亦是如此。

通过下面的JSP页面来测试该会话bean:

<%@ page language="java" pageEncoding="GB2312" import="javax.naming.*, huizhi.HelloEJBRemote.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>远程无状态会话bean远程接口</title>
</head>
<body>
 <%
  try{
   InitialContext ctx = new InitialContext();
   HelloEJBRemote hr = (HelloEJBRemote)ctx.lookup("HelloEJBRemotebean/remote");
   out.println("<br>通过远程接口调用EJB<br>" + hr.hello("李小婉"));
  }catch(Exception e){
   out.print("远程接口调用失败!");
  }
 %>
</body>
</html>

       上述代码通过JNDI的方式查找到了HelloEJBRemote接口,并调用了该接口中的hello方法。lookup方法中的参数是会话bean的JNDI名称,下面是会话bean的JNDI名称的命名规则。

        当EJB组件发布到JBoss时,如果我们没有为它指定全局JNDI名称,JBoss就会按照默认的命名规则为会话bean生成全局的JNDI名称,默认的命名规则如下:

        (1)  如果把EJB作为模块打包进后缀为*.ear 的Java EE 企业应用文件中,默认的全局JNDI名称是:

  • 本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
  • 远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

        EAR-FILE-BASE-NAME 是 ear 文件的名称,EJB-CLASS-NAMEEJB 的类名。

        例如,把本实例作为EJB模块打包进名为HelloEJBRemote.ear 的企业应用文件中,他的远程接口的JNDI名称是:HelloEJBRemote/HelloEJBRemotebean/remote

        (2)  如果把EJB应用打包成后缀为*.jar 的模块文件,默认的全局JNDI名称是:

  • 本地接口:EJB-CLASS-NAME/local
  • 远程接口:EJB-CLASS-NAME/remote

        本实例打包成HelloEJBRemote.jar文件,它的远程接口的JNDI名称是:HelloEJBRemotebean/remote

        我们分别把该实例的会话bean和JSP页面打包成HelloEJBRemote.jar 和 HelloEJB.war 文件。把这两个文件复制到JBoss安装目录\server\default\deploy文件夹中即完成了部署。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收获de季节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值