corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

通过 Web 服务传递二进制数据,第 2 部分:创建 EJB 模块

本教程的目标是创建一个公开两种方法的 EJB 模块,第一种方法用于提供单个图像,第二种用于提供所有图像。通常,这些图像应该来自于数据库。由于数据库检索不是本教程关注的重点,所以我们将这些图像放在 EJB 模块内的一个资源文件夹中。

本系列教程

本页中的内容适用于 NetBeans IDE 6.1
  1. 概述
  2. => 创建 EJB 模块
  3. 创建 Web 服务
  4. 测试 Web 服务
  5. 修改模式和 WSDL 文件传递二进制数据
  6. 创建 Swing 客户机
  7. 登录和优化 Web 服务

创建 EJB 模块

在以下步骤中,创建一个包含图像的 Enterprise Java Bean (EJB),这些图像将被 Web 服务作为二进制数据传递。

要创建该 EJB 模块,请执行以下步骤:

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。此时将打开“新建项目”向导。在“企业”类别中选择“EJB 模块”选项并单击“下一步”按钮。此时将打开“名称和位置”页面。
  2. 在“项目名称”字段中键入 FlowerAlbum。选择放置此项目的位置 — 对为此端到端应用程序创建的其他项目,使用同一位置。保留其他选项为默认设置,然后单击“下一步”按钮。此时将打开“服务器和设置”页面。
  3. 选择应用服务器和 Java EE 版本。这必须与端到端应用程序中的所有项目相同。IDE 会创建一个 EJB 模块项目,如下图中的“项目”窗口所示:
    新 EJB 项目的“项目”视图
  4. 右键单击 FlowerAlbum 项目节点并选择“新建”>“会话 Bean”。或者,右键单击该项目节点并选择“新建”>“其他”。在“新建文件”向导中,在“企业”下面,选择“会话 Bean”。此时将打开“新建会话 Bean”向导。
  5. 将该会话 Bean 命名为 Flower,加上 flower.album 作为包名。确保选择“无状态和远程”。现在您应该看到以下内容:
    “新会话 Bean”向导及名称、位置、会话类型和接口

    单击“完成”按钮。

    IDE 会给 Source Packages 节点添加一个会话 Bean,以及一个远程接口,如下所示。在“企业 Bean”节点,为您的新 FlowerBean 添加了一个新节点:


    显示新 Flower Bean 的“项目”视图
  6. 右键单击 FlowerBean 节点并选择“添加”>“业务方法”。此时将打开“业务方法”对话框。
  7. 在“业务方法”对话框中键入以下值:

    • 名称: getFlower
    • 返回类型: byte[]

    单击“添加”按钮。在“名称”字段中,键入 name。其他值保持不变。现在您应该看到以下内容:
    “业务方法”对话框显示名称、返回类型和“名称”参数

  8. 单击“异常”选项卡。单击“添加”按钮。打开“查找类型”对话框。键入 IO 并选择 IOException (java.io)
    选择了 IOException 的“查找类型”对话框

    单击“确定”。返回显示 IOException 的“业务方法”对话框。
    显示已选择 IOException 的“业务方法”对话框

    单击“确定”。现在您的 Bean 类中已经有了方法的基本内容,在远程接口类中有方法声明。

  9. 再次调出“业务方法”对话框。这次键入以下值:
    • 名称: allFlowers
    • 返回类型: List<byte[]>

    像以前一样,将 IOException 添加到“异常”选项卡。单击所有对话框,IDE 将创建方法。

  10. 在远程接口类中,注意以前的步骤已经成功生成了这些方法:
    @Remote
    public interface FlowerRemote {
    
    byte[] getFlower(String name) throws IOException;
    
    List<byte[]> allFlowers() throws IOException;
    
    }

    查看 Bean 类,注意到已经为声明的方法创建了桩模块:

    @Stateless
    public class FlowerBean implements FlowerRemote {
    
    public byte[] getFlower(String name) throws IOException {
    return null;
     }
    
    public List<byte[]> allFlowers() throws IOException {
    return null;
     }
    
    }

    如果不使用“业务方法”对话框,也可以手动向 Bean 类和远程接口类添加代码。但是,如果您使用“业务方法”对话框,IDE 将同时向 Bean 类和远程接口类添加代码。

  11. Bean 和远程接口类中的“修复导入”。在每个类中,将光标放在代码中的任何位置,单击右键打开上下文菜单,选择“修复导入”。这将打开一个对话框,显示所有必须的导入。单击“确定”,NetBeans 生成导入语句。或者在每个类中按 Ctrl-Shift-I 打开导入对话框。

  12. 现在您已经在远程接口中声明了方法,并在 Bean 类中实现了桩模块。

    现在“项目”窗口应该在 Enterprise Beans 节点中为您的新方法显示两个新节点,如下所示:
    具有两个 Enterprise Bean 节点的“项目”视图

  13. 使用以下代码填充该 Bean 类,用于公开单个图像和公开所有图像:
    @Stateless
    public class FlowerBean implements FlowerRemote {
    
    private static final String[] FLOWERS = {"aster", "honeysuckle", "rose", "sunflower"};
    
    public byte[] getFlower(String name) throws IOException {
    URL resource = this.getClass().getResource("/flower/album/resources/"+name+".jpg");
    return getBytes(resource);
     }
    
    public List<byte[]> allFlowers() throws IOException {
    List<byte[]> flowers = new ArrayList<byte[]>();
    for (String flower:FLOWERS) {
    URL resource = this.getClass().getResource("/flower/album/resources/"+flower+".jpg");
    flowers.add(getBytes(resource));
     }
    return flowers;
     }
    
    private byte[] getBytes(URL resource) throws IOException {
    InputStream in = resource.openStream();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];
    for(int read; (read = in.read(buf)) != -1;) {
    bos.write(buf, 0, read);
     }
    return bos.toByteArray();
     }
    
    }
  14. 创建一个叫做 resources 的新子包。将以下图像复制到该包:

    在“项目”视图中,这些图像应该显示如下:


    显示下载图像的“项目”视图

    在您的代码中,注意方法 getFlowerallFlowers 都使用此包中的图像。

  15. 现在您的 EJB 模块完成了!在下一部分,创建一个委托给 EJB 模块的 Web 服务,以便检索代码中相应点的图像。

    未来计划:

    创建 Web 服务


    要发送意见和建议,获取支持,了解关于 NetBeans IDE Java EE 开发特性的最新发展,请加入 邮件列表

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems