ejb 2.0 3.0_Eclipse的EJB V3.0数据库持久性

ejb 2.0 3.0

在应用程序开发领域发生的一件事是数据的可用性。 有来自各种资源的各种数据。 一方面,这使应用程序比以往更加丰富。 另一方面,所有这些数据实在是一团糟。 如果您需要持久存储数据而不是仅仅读取数据,它将变得更加复杂。

在Java环境中,EJB已成为一种可靠的持久性方式,同时保持了良好的可维护性和适当的角色分离。 EJB V3.0继续了这一发展,带来了更多的工具和选项。 使用EJB并不困难。 借助Eclipse和一些基本概念,您可以在应用程序中利用它们的强大功能。

EJB V3.0

EJB V3.0使用基于注释的API简化了EJB的开发,在该API中,虽然可以使用远程/本地接口,本地/本地本地接口和部署描述符,但它们不是必需的。 开发实体EJB需要Java IDE,应用程序服务器和关系数据库。 WebSphere V6.x需要WebSphere Application Server V6.1功能部件包来创建EJB V3.0实体bean。 WebSphere V7具有对EJB V3.0的内置支持。 Eclipse IDE是最常用的开源Java IDE。 在本文中,我们将使用Eclipse-IBM WebSphere 7-IBM DB2 9.5组合开发EJB V3.0实体bean。

WebSphere中的EJB V3.0规范以Java Persistence API(JPA)为后盾。 JPA进一步基于其他持久性技术,例如Hibernate,JDO和TopLink。 JPA是用于对象关系映射的POJO持久性API,它利用元数据注释来定义Java对象与关系数据库之间的映射。 JPA支持用于静态和动态查询的类SQL语言。 JPA已集成到JSR 220:Enterprise JavaBeans V3.0规范中。

使用了WebSphere Application Server和DB2数据库的试用版,但是讨论的技术可以转移到WebSphere Application Server和DB2的社区版。 还提供了对WebSphere Application Server社区版的支持

初步设置

  1. 下载并安装WebSphere Application Server V7(请参阅参考资料 )。
  2. 下载并安装面向Java EE开发人员的Eclipse IDE(请参阅参考资料 )。
  3. 下载并安装DB2 V9.5(见相关主题 )。
  4. 在DB2中创建数据库实例SAMPLE。

使用DB2配置WebSphere

启动WebSphere Application Server。 在“第一步”控制台中,选择“ 启动服务器” 。 WebSphere服务器已启动,如图1所示。

图1.启动WebSphere V7应用服务器
屏幕快照显示了WebSphere Application Server V7启动时的控制台消息

接下来,通过选择管理控制台链接来启动管理控制台/集成解决方案控制台。 在Integrated Solution Console窗口中,在JDBC provider表中选择Resources> JDBC> JDBC > New ,如图2所示。

图2.创建一个新的JDBC提供程序
屏幕快照显示了配置了JDBC提供程序时的WebSphere Application Server管理控制台

在“ Create a new JDBC Provider窗口中,选择“ 数据库” >“ DB2” ,“ 提供程序” >“ DB2通用JDBC驱动程序提供程序 ”和“ 实现” >“ 连接池”数据源 ,然后单击“ 下一步” ,如图3所示。

图3.设置配置值
屏幕截图显示了特定JDBC数据资源的配置

Summary页面列出了JDBC提供程序配置的摘要。 选择完成 。 新的JDBC提供程序将添加到JDBC providers表中。 选择新的JDBC提供程序,然后单击Save将JDBC提供程序存储到主配置中,如图4所示。

图4.新的JDBC提供程序
屏幕截图显示了在管理控制台中成功配置的JDBC提供程序

在配置数据源之前,需要一个J2EE连接器认证数据条目。 JDBC数据源使用J2EE连接器身份验证数据条目登录数据库。 在集成解决方案控制台中选择“ 安全性”>“全局安全性”节点。 接下来,在Authentication子标题中选择Java Authentication and Authorization Service> J2C身份验证数据链接,如图5所示。

图5.创建J2C认证数据
屏幕截图显示了配置身份验证设置后的控制台

在用户标识和密码表中,单击“ 新建” 。 在新标题中,在Alias字段中指定一个用户别名,一个User Id ,这是DB2数据库的登录ID,以及用于登录DB2数据库的密码,如图6所示。

图6.指定J2C认证数据属性
屏幕截图显示了用于数据库身份验证的名称和密码的条目

单击保存将J2C认证数据条目存储到主配置中。 DB2数据库登录别名已添加到J2C认证数据表中,如图7所示。

图7.新的J2C认证数据
Screensthot显示成功配置了扩增数据

要配置JDBC数据源,请选择先前配置的JDBC提供程序。 在“ DB2 Universal JDBC Provider标头中,单击“ 数据源”链接,如图8所示。

图8.数据源
屏幕快照显示了在定义JDBC数据源时的WebSphere Application Server V7管理控制台

在“数据源”表中单击“ 新建 ”以创建新的数据源。 指定一个JNDI名称,然后单击Next ,如图9所示。JNDI名称将在EJB V3.0实体bean的persistence.xml文件中使用,稍后将创建它。

图9.创建数据源
屏幕快照显示了在配置单个数据源时的WebSphere Application Server V7管理控制台

为数据源指定特定于数据源的属性。 选择驱动程序类型 > 4数据库名称 > 样本服务器名称 > 本地主机端口号 > 50000 。 单击Next ,如图10所示。

图10.指定数据源属性
屏幕快照显示了定义数据源属性时的WebSphere Application Server V7管理控制台

要为数据源选择J2C认证数据,请选择先前创建的认证别名。 单击Next ,如图11所示。

图11.设置安全别名
屏幕快照显示了为数据库定义安全性别名时的WebSphere Application Server V7管理控制台

在数据源的“ Summary页面中,选择“ 完成” 。 新的数据源将添加到表中。 单击保存将数据源存储到主配置。 在表中选择数据源 > 测试连接 。 数据源连接测试将指示测试是否成功,如图12所示。

图12.测试数据源连接
屏幕快照显示了在测试与数据库的连接时的WebSphere Application Server V7管理控制台

创建一个DB2数据库表

从命令行工具(例如,命令编辑器或命令行处理器)访问DB2数据库。 要在默认的示例数据库SAMPLE中创建数据库表,请运行以下SQL脚本。 这将为EJB V3.0实体bean创建一个Catalog表。

CREATE TABLE Catalog (id INT PRIMARY KEY NOT NULL, 
journal VARCHAR(100), publisher VARCHAR(100), date VARCHAR(100), 
title VARCHAR(100), author VARCHAR(100));

在Eclipse中创建EJB V3.0项目

  1. 在Eclipse IDE中,选择File> New> Project
  2. 在“ New Project窗口中,选择“ EJB”>“ EJB Project” >“ 下一步”
  3. 在“ New EJB Project窗口中,指定项目名称(例如EJB3EntityBean )。 选择EJB模块版本 > 3.0 > 下一步
  4. 在“ EJB模块”窗口中,选择默认的“ 源文件夹” >“ ejbModule” >“ 完成”
  5. 接下来,将实体bean Java类添加到EJB V3.0项目。 选择File> New> Other,然后在New窗口中,选择Java> Class > Next
  6. 在“ New Java Class窗口中,默认情况下,“源”文件夹为EJB3EntityBean/ejbModule 。 指定包名称(例如com.ejb3.websphere )和类名称( Catalog ),然后单击Finish
  7. 实体bean Java类已添加到EJB V3.0项目。 WebSphere V7需要JDK V6。 如果尚未安装,请安装JDK V6(请参阅参考资料 )。 右键单击EJB 3.0 > 属性,然后选择Java构建路径节点。 添加JRE系统库[jre6]以及WebSphere V7中包含的J2EE V5 JAR。 创建一个库EJB3并将j2ee.jar添加到该库中,如图13所示。
图13. Java构建路径中的库
屏幕快照显示了Eclipse配置,其中在Java Build Path中定义了库

将源文件夹ejbModule添加到Java Build Path,如图14所示。

图14. Java构建路径中的Source文件夹
屏幕快照显示了添加文件夹ejbModule时的Eclipse Java构建路径配置

与添加Catalog.java bean类相似,添加Java类CatalogTestBean.java (会话bean), CatalogTestLocal.java (本地业务接口)和CatalogTestRemote.java (远程业务接口)。 要求EJB V3.0实体bean在META-INF目录中具有persistence.xml配置文件。

  1. 在项目资源管理器中,选择META-INF > 文件>新建>其他
  2. 在“ New窗口中,选择XML> XML > 下一步
  3. 在“ New XML File窗口中,选择ejbModule> META-INF文件夹。 指定文件名 > persistence.xml > 完成 。 将persistence.xml文件添加到META-INF文件夹。
  4. 使用文件>新建>其他> XML> XML在EJB V3.0项目中创建build.xml脚本。 在项目文件夹中创建一个META-INF文件夹,并将application.xml添加到该文件夹​​中。
  5. 在项目文件夹中创建一个webModule文件夹,以创建实体EJB的JSP客户端,然后将EJB3Client.jsp添加到该文件夹​​中。
  6. WEB-INF文件夹添加到webModule文件夹,并将web.xml文件添加到WEB-INF文件夹。 EJB V3.0项目的目录结构如图15所示。
图15. EJB V3.0项目的目录结构
Eclipse中的项目的屏幕快照,显示了文件层次结构

创建一个EJB V3.0实体bean

与EJB V2.0不同,在EJB V3.0中,实体Bean是普通旧Java对象(PO​​JO)。 实体Bean映射是使用注释定义的,注释是在JDK V5中引入的,并且位于javax.persistence包中。 带有@Entity注释的POJO类是一个实体bean。 使用@Table批注在类级别设置实体bean映射的模式和表。 如果未指定@Table批注,则默认表名是实体bean类名。 我们将创建一个映射到Catalog表的实体bean Catalog

@Entity
@Table(name="Catalog")
public class Catalog implements Serializable {
...
}

如果已将启用了缓存的实体Bean通过实体管理器保留到数据库中,则该实体Bean将通过缓存进行序列化。 因此,建议使用实体bean来实现java.io.Serializable接口。 在实体bean类中,指定POJO属性。 还要指定serialVersionUID ,序列化运行时将其用于将版本号与可序列化的类相关联。 为实体bean属性添加getter和setter方法。 用@Id注释指定标识符属性。 还有其他EJB V3.0批注,可以在实体bean中指定它们(请参阅参考资料 )。 清单1中显示了Catalog实体bean。

清单1.实体bean类Catalog.java
import java.io.Serializable;
import javax.persistence.*;


@Entity
@Table(name="Catalog")
public class Catalog implements Serializable {
	private static final long serialVersionUID = 7422574264557894633L;
	private long id;
	private String journal;
            private String publisher;
            private String date;
	private String title;
            private String author;

    public Catalog(){ super();}

    public Catalog(Integer id, String journal, String publisher, String date, 
               String title, String author){
    super();
    this.id=id;
    this.journal=journal;
    this.publisher=publisher;
    this.date=date;
    this.title=title;
    this.author=author;
    }

	@Id
		public long getId() {
		return id;
	}

	
	public void setId(long id) {
		this.id = id;
	}

        public String getJournal() {
		return journal;
	}

	
	public void setJournal(String journal) {
		this.journal = journal;
	}

         public String getPublisher() {
		return publisher;
	}

	
	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}


           public String getDate() {
            return date;
           }
 
           public void setDate(String date) {
            this.date = date;
           }

	
	public String getTitle() {
		return title;
	}

	
	public void setTitle(String title) {
		this.title = title;
	}


        public String getAuthor() {
		return author;
	}

	
	public void setAuthor(String author) {
		this.author = author;
	}

}

创建一个持久性配置文件

persistence.xml文件中的根元素是持久性。 需要命名persistence-unit 。 先前已在WebSphere V7应用程序服务器中配置了具有JNDI jdbc / DB2DS的JDBC数据源。 在persistence.xmljta-data-source元素中指定JNDI名称。 WebSphere Application Server V7中的默认JPA持久性提供程序是Apache OpenJPA提供程序的版本。 将清单2复制到Eclipse中的persistence.xml文件。

清单2.配置文件persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
        <persistence-unit name="catalog">
           <jta-data-source>jdbc/DB2DS</jta-data-source>
        </persistence-unit>
        </persistence>

WebSphere V7的限制是,如果在persistence元素中使用以下属性指定了persistence.xml文件的模式位置,则会生成错误。

xmlns:xsi="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"

创建一个会话bean

为了获得更好的性能,开发EJB的最佳实践之一(请参阅参考资料 )是从会话Bean访问实体Bean。 使用消耗比有状态会话Bean少的资源的无状态会话Bean来调用实体Bean方法。 无状态会话Bean类使用@Stateless注释进行注释。 无状态会话Bean类CatalogTestBean实现了CatalogTestLocalCatalogTestRemote接口。 使用EntityManager API创建,查找,查询和删除实体实例。 使用@PersistenceContext批注注入EntityManager

@PersistenceContext
            EntityManager em;

使用JNDI绑定Session_Bean_Class_Name部署到WebSphere服务器的会话bean具有本地业务接口的默认JNDI名称绑定,即ejblocal:Session_Bean_Class_Name 。 为了方便从JSP客户端访问JNDI名称, public static final变量分配给本地JNDI名称。

public static final String LocalJNDIName = "ejblocal:"
            + CatalogTestBean.class.getSimpleName();

接下来,创建一个test()方法,该方法返回从测试客户端调用的String 。 使用test()方法创建和持久化实体实例,查询实体实例并删除实体实例,所有这些都使用EntityManager对象(该对象已在会话Bean类中注入)。 注入EntityManager暗示的实例EntityManager是可用的会话bean。 创建实体bean类的实例。

Catalog catalog = new Catalog(new Integer(1), "IBM developerWorks", "IBM", 
            "July 2006", "The Java XPath API", "Elliotte Rusty Harold");

使用persist()方法将实体实例persist()到数据库中。

em.persist(catalog);

同样,保留两个以上的实体实例。 接下来,使用EntityManager对象的createQuery方法创建查询。 该字符串被指定为EJB-QL查询。 使用getResultList()方法执行并以List返回结果。 例如,选择与作者Elliotte Rusty Harold相对应的目录条目。

List catalogEntry = em.createQuery("SELECT c from Catalog c where c.author=:name").
            setParameter("name", "Elliotte Rusty Harold").getResultList();

为测试方法的返回值创建一个字符串变量。

String retValue = "<b>A catalog entry: </b>";

遍历结果列表以输出实体实例的属性。

for (Iterator iter = catalogEntry.iterator(); iter.hasNext();) {
Catalog element = (Catalog) iter.next();
retValue = retValue + "<br/>" + element.getJournal() + "<br/>"+ 
element.getPublisher() + "<br/>" + element.getDate() + "<br/>"+ element.getTitle() + 
"<br/>" + element.getAuthor()+"<br/>";
}

创建并运行EJB-QL查询以返回Catalog数据库中的所有标题。

List allTitles = em.createQuery("SELECT c from Catalog c").getResultList();

可以使用remove()方法remove()实体实例。

em.remove(catalog2);

相应的数据库行将从Catalog表中删除。 随后,创建并运行查询以列出映射到数据库的所有其余实体实例。 清单3中显示了会话bean类CatalogTestBean

清单3.会话bean CatalogTestBean.java
package com.ejb3.websphere;

import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class CatalogTestBean implements CatalogTestRemote, CatalogTestLocal {
	@PersistenceContext
	EntityManager em;

	public static final String LocalJNDIName = "ejblocal:"
			+ CatalogTestBean.class.getSimpleName();

	public String test() {
		Catalog catalog = new Catalog(new Integer(1), "IBM developerWorks",
				"IBM", "July 2006", "The Java XPath API",
				"Elliotte Rusty Harold");
		em.persist(catalog);
		Catalog catalog2 = new Catalog(new Integer(2), "IBM developerWorks",
		   	"IBM", "March 2009", "Use XQuery for the presentation layer",
				"Brian M. Carey");
		em.persist(catalog2);
		Catalog catalog3 = new Catalog(new Integer(3), "IBM developerWorks",
			"IBM", "April 2008", "Use XQuery from a Java environment",
				"Brett McLaughlin");
		em.persist(catalog3);

		String retValue = "<b>A catalog entry: </b>";
		List catalogEntry = em.createQuery(
			"SELECT c from Catalog c where c.author=:name").setParameter(
				"name", "Elliotte Rusty Harold").getResultList();
		for (Iterator iter = catalogEntry.iterator(); iter.hasNext();) {
		        Catalog element = (Catalog) iter.next();
		        retValue = retValue + "<br/>" + element.getJournal() + "<br/>"
				+ element.getPublisher() + "<br/>" + element.getDate()
					+ "<br/>" + element.getTitle() + "<br/>"
					+ element.getAuthor() + "<br/>";

		}

		retValue = retValue + "<b>All Titles: </b>";
		List allTitles = em.createQuery("SELECT c from Catalog c")
				.getResultList();
		for (Iterator iter = allTitles.iterator(); iter.hasNext();) {
			Catalog element = (Catalog) iter.next();
			retValue = retValue + "<br/>" + element.getTitle() + "<br/>";

		}

		em.remove(catalog2);
		retValue = retValue + "<b>All Entries after removing an entry: </b>";

		List allCatalogEntries = em.createQuery("SELECT c from Catalog c")
				.getResultList();
		for (Iterator iter = allCatalogEntries.iterator(); iter.hasNext();) {
			Catalog element = (Catalog) iter.next();
			retValue = retValue + "<br/>" + element + "<br/>";

		}
		return retValue;
	}
	}

为会话bean添加一个远程接口和一个本地接口(请参见清单4)。

清单4.会话bean的远程和本地接口
package com.ejb3.websphere;

import javax.ejb.Remote;

@Remote
public interface CatalogTestRemote {
	public String test();
}

package com.ejb3.websphere;

import javax.ejb.Local;

@Local
public interface CatalogTestLocal {
	public String test();
	}

创建一个测试客户端

到目前为止,已经创建了包含业务逻辑的实体Bean和作为该实体Bean的包装器的会话Bean。 接下来,创建一个测试客户端JSP EJB3Client.jsp,在其中运行会话bean的test() 。 要创建的实例CatalogTestLocal使用JNDI查找,首先创建一个IntialContext对象。 使用会话Bean中的JNDI查找获得CatalogTestLocal实例。

InitialContext context = new InitialContext();
CatalogTestLocal beanLocal = (CatalogTestLocal) 
context.lookup(CatalogTestBean.LocalJNDIName);

调用会话bean的test()方法并输出返回值。

String catalog=beanLocal.test();
<%=catalog  %>

清单5中显示了测试客户端JSP EJB3Client.jsp

清单5. EJB3Client.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="com.ejb3.websphere.*, javax.naming.*" %> 
<!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=ISO-8859-1">
<title>EJB3 Client</title>
</head>
<body>
<% InitialContext context = new InitialContext();
CatalogTestLocal beanLocal = (CatalogTestLocal) 
context.lookup(CatalogTestBean.LocalJNDIName);
String catalog=beanLocal.test();
%>
<%=catalog  %>
</body>
</html>

WEB-INF/web.xml文件指定Web部署描述符。 由于未指定Web配置,因此将以下清单复制到web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
  
  </web-app>

为EJB和Web模块创建一个application.xml部署描述符。 将清单6复制到application.xml。

清单6. application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" version="5"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
  http://java.sun.com/xml/ns/javaee/application_5.xsd">
  <display-name></display-name>
  <description></description>
  <module>
   <ejb>ejb3.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>websphere.war</web-uri>        
     <context-root>websphere</context-root>
    </web>
  </module>
  </application>

将实体bean部署到WebSphere

所有的类和配置文件都已完成,可以创建EJB V3.0实体bean。 接下来,编译这些类以创建EJB JAR文件,WAR文件和EAR文件,然后将EAR文件部署到WebSphere服务器。 使用build.xml脚本来编译EJB类,创建EJB EAR文件,并将EJB EAR文件部署到WebSphere。 有关Apache Ant的介绍,请参阅Apache Ant用户手册(请参阅参考资料 )。 在构建脚本中,为脚本中使用的各种目录路径指定属性,例如WebSphere服务器目录,构建目录和WebSphere部署目录。 指定编译EJB类所需的各种JAR文件的类路径。 指定表1中讨论的目标。

表1. build.xml中的目标
目标 描述
准备 创建构建目录和已编译类的目录
编译 编译EJB类
创建一个EJB JAR文件
战争 创建一个WAR文件
组装应用 创建一个EAR文件
部署 将EAR文件部署到WebSphere服务器。 WebSphere部署目录为C:\ Program Files \ IBM \ WebSphere \ AppServer \ installableApps
清洁 删除JAR,WAR和EAR文件

清单7显示了build.xml脚本。

清单7. build.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
		WebSphere build file
	-->
<project name="ejb3" default="deploy" basedir=".">
	<property environment="env" />
	<property name="src.dir" value="${basedir}/ejbModule" />
	<property name="src.resources" value="${basedir}/ejbModule" />
	<property name="websphere.home" value="C:\Program Files\IBM\WebSphere" />
	<property name="websphere.server" value="C:\Program Files\IBM\WebSphere\
        AppServer"/>
	<property name="build.dir" value="${basedir}/build" />
	<property name="build.classes.dir" value="${build.dir}/classes" />
	<property name="deploy.dir" value="${websphere.server}/installableApps" />
	<path id="classpath">
		<fileset dir="${websphere.server}/java/lib">
			<include name="*.jar" />
		</fileset>
		<fileset dir="${websphere.server}/lib">
			<include name="*.jar" />
		</fileset>
		<pathelement location="${build.classes.dir}" />
	</path>
	<property name="build.classpath" refid="classpath" />
	<target name="prepare">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.classes.dir}" />
	</target>
	<target name="compile" depends="prepare">
		<javac srcdir="${src.dir}" destdir="${build.classes.dir}" 
               debug="on" deprecation="on" optimize="off" includes="**">
			<classpath refid="classpath" />
		</javac>
	</target>
	<target name="jar" depends="compile">
		<jar jarfile="${build.dir}/${ant.project.name}.jar">
			<fileset dir="${build.classes.dir}">
				<include name="**/*.class" />
			</fileset>
			<fileset dir="${src.resources}/">
				<include name="META-INF/persistence.xml" />
			</fileset>
		</jar>
	</target>
	<target name="war" depends="jar">
		<war warfile="${build.dir}/websphere.war">
			<fileset dir="webModule">
				<include name="*.jsp" />
			</fileset>
			<fileset dir="webModule">
				<include name="WEB-INF/web.xml" />
			</fileset>
		</war>
	</target>
	<target name="assemble-app" depends="war">
		<jar jarfile="${build.dir}/${ant.project.name}.ear">
			<metainf dir="META-INF">
				<include name="application.xml" />
			</metainf>
			<fileset dir="${build.dir}" includes="*.jar,*.war" />
		</jar>
	</target>
	<target name="deploy" depends="assemble-app">
		<copy file="${build.dir}/${ant.project.name}.ear" todir="${deploy.dir}" />
	</target>
	<target name="clean">
		<delete file="${build.dir}/${ant.project.name}.ear" />
		<delete file="${build.dir}/${ant.project.name}.jar" />
		<delete file="${build.dir}/websphere.war" />
	</target>
	</project>

在Eclipse中运行构建脚本。 在Package Explorer中,右键单击build.xml > Run As> Ant Build ,如图16所示。

图16.运行build.xml
屏幕截图显示了在Eclipse中打开为“运行方式”的上下文菜单以及选项

构建脚本中的默认构建目标是deploy ,每个目标都依赖于前一个目标。 运行preparecompilejarwarassemble-appdeploy目标,并将EAR文件ejb3.ear部署到WebSphere服务器,如图17所示。

图17.运行build.xml
Eclips中的屏幕快照显示了正在执行的Ant构建

在WebSphere Application Server中安装EJB V3.0

在管理控制台中,单击应用程序>新建应用程序 。 在“新建应用程序”标题中,单击“ 新建企业应用程序” 。 指定ejb3.ear文件的路径,然后单击Next ,如图18所示。

图18.指定要安装的EAR文件
屏幕快照显示了为在WebSphere Application Server管理控制台中进行部署而配置的EAR文件

对于条目“如何安装应用程序”,选择“ 详细信息” >“ 下一步” 。 对于条目“选择安装选项标题”,单击复选框“ 预编译JavaServer Pages文件”和“ 部署企业bean” 。 指定要安装应用程序的目录为“ C:\ Program Files \ IBM \ WebSphere \ AppServer \ profiles \ AppSrv01 \ installedApps \ dvohra09-PCNode01Cell”(对于Windows),然后单击Next ,如图19所示。安装的scope目录路径可能与示例不同。

图19.指定安装选项
屏幕截图显示了用于部署应用程序的安装选项的选择

在“群集和服务器”标题中选择默认设置,然后单击“ 下一步” 。 在“提供用于编译JSP的选项”中选择默认设置,然后单击“ 下一步” 。 在“提供用于执行EJB部署的选项”标头中,选择“ 数据库” >“ 9.5” ,“ JDK编译级别” >“ 6.0 ”以及“ 数据库访问” >“ JDBC” >“ 下一步” ,如图20所示。

图20.指定EJB部署选项
屏幕快照显示了用于部署应用程序的EJB部署选项

在“为Web模块提供JSP重新加载选项”标题中,选择默认设置,然后单击“ 下一步” 。 在“映射共享库”标题中,选择默认设置,然后单击“ 下一步” 。 在“映射共享库关系”标题中,选择默认设置,然后单击“ 下一步” 。 在“提供bean的JNDI名称”标题中, 为所有接口选择JNDI名称,并指定目标资源JNDI名称 ,如图21所示,然后单击Next

图21.指定会话Bean JNDI名称
屏幕截图显示了应用程序部署的JNDI配置

在“绑定EJB业务”标题中,选择默认设置,然后单击“ 下一步” 。 在“映射Web模块的虚拟主机”标题中,选择websphere.war WAR文件,选择“ default_host”虚拟主机,然后单击“应用”。 单击下一步 。 在“ Map context roots for Web modulesMap context roots for Web modules目录”标头中,将websphere.war Web上下文的根目录指定为“ websphere”。单击“ 下一步” 。在“模块的元数据”标头中,选择默认设置,然后单击“ 下一步” 。 在“摘要”页面中,单击完成 。 如图22所示,将安装ejb3.ear EAR文件并部署ejb3.jar EJB JAR文件。单击Save保存主配置更改。

图22.安装的EAR文件
屏幕截图显示了EAR文件的成功安装

单击Start初始化EJB3应用程序,该应用程序已安装并启动,如图23所示。

图23. EAR应用程序启动
屏幕快照显示了在WebSphere Application Server V7管理控制台中运行的EJB3应用程序

要为EJB V3.0实体Bean运行JSP客户端,请使用URL http:// localhost:9080 / websphere / Catalog.jsp调用JSP。 会话bean的test()方法被调用。 创建了三个实体bean实例并将其持久化到DB2。 如图24的客户机JSP输出所示,列出了与作者Elliotte Rusty Harold对应的实体实例的entity-bean属性值。 列出所有实体实例的标题。 如后续查询所示,实体实例将被删除以获取所有实体实例,该实体实例仅列出两个实体实例。

图24.运行EJB V3实体bean客户端
运行EJB V3实体Bean客户端

结论

EJB V3.0支持是WebSphere V7中的一项新功能。 Eclipse-WebSphere7-DB2 9.5的组合非常适合开发EJB V3.0实体bean。


翻译自: https://www.ibm.com/developerworks/opensource/library/os-eclipse-ejb3/index.html

ejb 2.0 3.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值