blob: 3bba9e04f98a64284dc1568fd90df91cd759aaec [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011 Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>测试 Maven 企业应用程序</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="description" content="A tutorial on how to use NetBeans IDE to test a database connection in a Maven enterprise application.">
<link rel="stylesheet" href="../../../netbeans.css">
<link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen">
<script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script>
<meta name="author" content="ken ganfield">
</head>
<body>
<h1>测试 Maven 企业应用程序</h1>
<p>本教程说明了如何使用 NetBeans IDE 和 Maven 原型测试简单的企业应用程序。在本教程中,将创建包含实体类和会话 Bean 的企业应用程序。您将使用向导为 Bean 类创建一个简单的测试类,然后在 IDE 中运行测试。测试类将用于创建 GlassFish 嵌入式 EJB 容器的实例,以测试与数据库的连接。
</p>
<p><b>教程练习</b></p>
<img alt="此页上的内容适用于 NetBeans IDE 7.1" class="stamp" src="../../../images_www/articles/71/netbeans-stamp.png" title="此页上的内容适用于 NetBeans IDE 7.1">
<ul>
<li><a href="#intro">在 IDE 中使用 Maven</a></li>
<li><a href="#Exercise_1">创建企业应用程序</a>
<ul>
<li><a href="#Exercise_1a">创建 Web 项目</a></li>
<li><a href="#Exercise_1b">创建实体类</a></li>
<li><a href="#Exercise_1c">创建会话 Bean</a></li>
</ul>
</li>
<li><a href="#Exercise_2">创建会话 Bean 测试</a></li>
<!-- <li><a href="#Exercise_3">Checking Code Coverage</a></li>
<li><a href="#Exercise_4">Downloading the Solution Project</a></li>-->
</ul>
<p><b>要学习本教程,您需要具备以下软件和资源。</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">软件或资源</th>
<th class="tblheader" scope="col">要求的版本</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">7.1,Java EE 包</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 开发工具包 (JDK)</a></td>
<td class="tbltd1">版本 6 或版本 7</td>
</tr>
<tr>
<td class="tbltd1">GlassFish Server Open Source Edition</td>
<td class="tbltd1">3.1.1</td>
</tr>
</tbody>
</table>
<p class="notes"><strong>注:</strong>下载的 Java EE 包中附带了 GlassFish Server 3.1.1 的安装程序。在 NetBeans IDE 的安装过程中,您可以安装和注册 GlassFish。</p>
<p><b>先决条件</b></p>
<p>本文档假定您具备以下技术的一些基本知识或编程经验:</p>
<ul>
<li>Java 编程</li>
<li>NetBeans IDE</li>
</ul>
<p>在开始本教程之前,您可以先阅读下面这些文档。</p>
<ul>
<li><a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">NetBeans IDE 中的 Apache Maven 最佳做法</a></li>
<li><a href="http://www.sonatype.com/books/maven-book/reference/introduction.html" target="_blank">Chapter 1. Introducing Apache Maven</a>(第 1 章. Apache Maven 简介,来自 <a href="http://www.sonatype.com/books/maven-book/reference/public-book.html" target="_blank">Maven: The Definitive Guide</a>(Maven:权威指南))</li>
</ul>
<!-- <p class="tips">You can download <a href="https://netbeans.org/projects/samples/downloads/download/Samples%252FJavaEE%252FMavenEnterpriseApp.zip">a zip archive of the finished project</a>.</p>-->
<a name="intro"></a>
<!-- ===================================================================================== -->
<h2>在 IDE 中使用 Maven</h2>
<p>NetBeans IDE 中完全集成了 Maven 支持。开发使用 Maven 框架的项目几乎与在 Ant 中开发项目完全相同。不过,Maven 构建项目和使用依赖关系的方式有一些区别。如果是第一次创建 Maven 应用程序,以下提示可帮助您避免某些问题。</p>
<p class="tips"><strong>检查 Maven 设置</strong></p>
<div class="indent">
<p>如果这是您首次创建 Maven 项目,则需要在 "Options"(选项)窗口中检查 Maven 配置设置。要学完本教程,您的本地系统中必须安装有 Maven。从 NetBeans IDE 7.0 开始,Maven 与 IDE 捆绑在一起,并随同 IDE 一起安装。如果您使用的是早期版本的 IDE,则可以从 <a href="http://maven.apache.org/">Maven 站点</a>下载该安装程序。</p>
<ol>
<li>在 IDE 中打开 "Options"(选项)窗口。</li>
<li>在 "Options"(选项)窗口中选择 "Miscellaneous"(其他)类别,然后单击 "Maven" 标签。</li>
<li>确认指定了 Maven Home 目录。
<p>您可以使用与 IDE 捆绑在一起的 Maven 版本,也可以指定 Maven 在本地的安装位置(要求为 2.0.9 或更高版本)。</p></li>
<li>检查本地 Maven 资源库的位置是否正确。</li>
<li>选择 "OK"(确定)以关闭 "Options"(选项)窗口。</li>
</ol>
<p class="notes"><strong>注:</strong>如果以前尚未在 IDE 中创建 Maven 项目,则首先需要在 IDE 中激活 Maven 模块。为此,您可以在新建项目向导中选择一个 Maven 项目原型。选择原形之后,IDE 会自动激活相应模块。在 IDE 中,您无需完成向导即可激活 Maven。</p>
</div>
<p class="tips"><strong>更新 Maven 资源库</strong></p>
<div class="indent">
<p>本地和远程 Maven 资源库可用于代码完成以及构建项目。应更新 Maven 远程资源库索引,以确保在开发项目时可方便地使用所需的任何工件。可以在 "Options"(选项)窗口的 "Maven" 标签中配置 IDE 检查更新的频率。您可以执行即时更新检查,并使用 "Maven Repository Browser"(Maven 资源库浏览器)览本地和远程 Maven 资源库。</p>
<ol>
<li>选择 "Window"(窗口)> "Other"(其他)> "Maven Repository Browser"(Maven 资源库浏览器)。</li>
<li>单击 "Maven Repository Browser"(Maven 资源库浏览器)窗口顶部的 "Update Indexes"(更新索引)(<img alt="Update Indexes(更新索引)按钮" src="../../../images_www/articles/72/javaee/maven-testing/maven-refreshrepo.png" title="Update Indexes(更新索引)按钮">)。</li>
</ol>
<p>在单击 "Update Indexes"(更新索引)时,IDE 将检查并下载每个 Maven 远程资源库的最新索引。索引表示位于资源库中的工件的当前状态,并用于提供对可用于应用程序的工件的引用。默认情况下,在明确需要工件之前,IDE 不会从资源库中下载该工件。</p>
<p class="notes"><strong>注:</strong>索引非常大,因此可能需要一些时间才能全部更新。</p>
</div>
<p class="tip">有关在 NetBeans IDE 中使用 Maven 的更多详细信息,请参见<a href="https://netbeans.org/kb/docs/java/maven-hib-java-se.html">使用 Hibernate 创建 Maven Swing 应用程序</a>教程中的<a href="https://netbeans.org/kb/docs/java/maven-hib-java-se.html#02">配置 Maven</a> 部分以及 <a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">NetBeans IDE 中的 Apache Maven 最佳做法</a></p>
<a name="Exercise_1"></a>
<!--Exercise 1: -->
<h2>创建企业应用程序</h2>
<p>在本部分中,将创建一个简单的 Web 应用程序,其中包含实体类以及用于访问该实体类的会话 Bean。</p>
<div class="indent">
<a name="Exercise_1a"></a>
<h3>创建 Web 项目</h3>
<p>在本练习中,将使用新建项目向导,通过 Maven 原型创建 Java EE 6 Web 应用程序。使用该向导创建项目时,可将 GlassFish Server 3.1.1 指定为目标服务器。</p>
<ol>
<li>从主菜单中选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键;在 Mac 上为 ⌘-Shift-N 组合键),以打开新建项目向导。</li>
<li>在 "Maven" 类别中选择 "Web Application"(Web 应用程序)。单击 "Next"(下一步)。</li>
<li>将项目命名为 <strong>mavenwebtestapp</strong> 并设置项目位置。单击 "Next"(下一步)。</li>
<li>在 "Server"(服务器)下拉列表中选择 "GlassFish Server 3.1.1"。</li>
<li>在 "Java EE Version"(Java EE 版本)下拉列表中选择 "Java EE 6 Web"。单击 "Finish"(完成)。</li>
</ol>
<p>在单击 "Finish"(完成)后,IDE 将创建 Web 应用程序,并在 "Projects"(项目)窗口中打开该项目。</p>
<img alt="显示已生成项目的 Projects(项目)窗口" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-projects.png" title="显示已生成项目的 Projects(项目)窗口">
<p>如果在 "Projects"(项目)窗口中展开项目节点,则可以看到 <tt>javaee-web-api-6.0</tt> JAR 作为项目依赖关系列出,而 JDK 1.6 作为 Java 依赖关系列出。IDE 生成了项目 POM (<tt>pom.xml</tt>),并将该文件列在 "Project Files"(项目文件)节点的下方。
</p>
<a name="Exercise_1b"></a>
<h3>创建实体类</h3>
<p>在本练习中,将使用新建文件向导创建实体类。创建实体类时,将在该向导中选择 <tt>jdbc/sample</tt> 数据源。您不需要创建或注册新的数据源,因为 <tt>jdbc/sample</tt> 数据源已在安装服务器时进行了注册。
</p>
<p class="notes"><strong>注:</strong>如果要创建新数据源或使用其他数据源,则必须先在服务器上注册该数据源,然后再使用嵌入的容器测试应用程序。使用嵌入的容器测试应用程序时,IDE 将不会为您注册数据源,因为在部署到 GlassFish Server 实例时,它已对该数据源进行了注册。
</p>
<ol>
<li>右键单击项目节点,然后选择 "New"(新建)> "Entity Class"(实体类)。
<p>此外,也可以从主菜单中选择 "File"(文件)> "New File"(新建文件)(Ctrl-N 组合键;在 Mac 上为 ⌘-N 组合键),然后在 "Persistence"(持久性)类别中选择 "Entity Class"(实体类)。</p></li>
<li>键入 <strong>MyEntity</strong> 作为类名。</li>
<li>选择 <tt>com.mycompany.mavenwebtestapp</tt> 作为包,并将 "Primary Key Type"(主键类型)设置为 <strong><tt>int</tt></strong></li>
<li>确认选中了 "Create Persistence Unit"(创建持久性单元)。单击 "Next"(下一步)。</li>
<li>在 "Data Source"(数据源)下拉列表中选择 <strong>jdbc/sample</strong></li>
<li>确认选中了 "Use Java Transaction APIs"(使用 Java 事务 API),然后选择 "Drop and Create"(删除并创建)作为 "Table Generation Strategy"(表生成策略)。单击 "Finish"(完成)。<br /> <img alt="显示已生成项目的 Projects(项目)窗口" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-pu.png" title="显示已生成项目的 Projects(项目)窗口">
<p>在单击 "Finish"(完成)后,IDE 将生成 MyEntity 类,并在源代码编辑器中打开该类。IDE 将添加 <tt>eclipselink-2.3.0</tt><tt>javax.persistence-2.0.3</tt><tt>org.eclipse.persistence.jpa.modelgen.processor-2.3.0</tt> 工件作为依赖关系。</p></li>
<li>在源代码编辑器中,将私有字段 <tt>name</tt> 添加到类中。
<pre class="examplecode">private String name;</pre>
</li>
<li>在编辑器中右键单击,然后从 "Insert Code"(插入代码)弹出式菜单(Alt-Insert 组合键;在 Mac 上为 Ctrl-I 组合键)中选择 "Getter and Setter"(Getter 和 Setter),以便为 <tt>name</tt> 字段生成 getter 和 setter。 </li>
<li>添加以下方法
<pre class="examplecode">
public MyEntity(int id) {
this.id = id;
name = "Entity number " + id + " created at " + new Date();
}</pre>
</li>
<li>添加以下 <tt>@NamedQueries</tt><tt>@NamedQuery</tt> 标注(以粗体显示),以创建命名 SQL 查询,用于在 MyEntity 表中查找所有记录。
<pre class="examplecode">
@Entity
<strong>@NamedQueries({
@NamedQuery(name = "MyEntity.findAll", query = "select e from MyEntity e")})</strong>
public class MyEntity implements Serializable {</pre>
<p></p>
</li>
<li>单击类声明旁边左旁注中的提示,然后选择 <strong>Create default constructor</strong>(创建默认的构造函数)提示。<br /> <img alt="显示已生成项目的 Projects(项目)窗口" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-createconstructor.png" title="显示已生成项目的 Projects(项目)窗口">
</li>
<li>修复 import 语句(Ctrl-Shift-I 组合键;在 Mac 上为 ⌘-Shift-I 组合键),以便为 <tt>javax.persistence.NamedQuery</tt><tt>javax.persistence.NamedQueries</tt><tt>java.util.Date</tt> 添加 import 语句。保存所做的更改。 <br />
</li>
</ol>
<a name="Exercise_1c"></a>
<h3>创建会话 Bean</h3>
<p>在本练习中,将使用向导为 <tt>MyEntity</tt> 实体类创建会话 Facade。在使用向导生成 Facade 时,IDE 还将生成抽象 Facade,其中包含一些访问实体类时常用的方法,如 <tt>create</tt><tt>find</tt>。然后,将两个方法添加到 Facade 中。
</p>
<ol>
<li>右键单击项目节点,然后选择 "New"(新建)> "Other"(其他)。
<p>此外,也可以从主菜单中选择 "File"(文件)> "New File"(新建文件)(Ctrl-N 组合键;在 Mac 上为 ⌘-N 组合键),以打开新建文件向导。</p></li>
<li>在 "Enterprise JavaBeans" 类别中,选择 "Session Beans For Entity Classes"(实体类的会话 Bean)。单击 "Next"(下一步)。</li>
<li>从 "Available Entity Classes"(可用的实体类)列表中选择 <tt>MyEntity</tt> 类,然后单击 "Add"(添加)。单击 "Next"(下一步)。</li>
<li>使用该向导的 "Generated Session Beans"(生成的会话 Bean)面板中的默认属性。单击 "Finish"(完成)。
<p>在单击 "Finish"(完成)后,IDE 将在 <tt>com.mycompany.mavenwebtestapp</tt> 包中生成 <tt>AbstractFacade.java</tt><tt>MyEntityFacade.java</tt>,并在源编辑器中打开这些类。</p>
<p>在源代码编辑器中,可以看到 IDE 为 <tt>EntityManager</tt> 生成了代码,并添加了 <tt>@PersistenceContext</tt> 标注,以指定持久性单元。</p>
<pre class="examplecode">
@Stateless
public class MyEntityFacade extends AbstractFacade&lt;MyEntity&gt; {
@PersistenceContext(unitName = "com.mycompany_mavenwebtestapp_war_1.0-SNAPSHOTPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public MyEntityFacade() {
super(MyEntity.class);
}
}</pre>
</li>
<li>将以下方法添加到 <tt>MyEntity.java</tt> 中。
<pre class="examplecode">
@PermitAll
public int verify() {
String result = null;
Query q = em.createNamedQuery("MyEntity.findAll");
Collection entities = q.getResultList();
int s = entities.size();
for (Object o : entities) {
MyEntity se = (MyEntity) o;
System.out.println("Found: " + se.getName());
}
return s;
}
@PermitAll
public void insert(int num) {
for (int i = 1; i <= num; i++) {
System.out.println("Inserting # " + i);
MyEntity e = new MyEntity(i);
em.persist(e);
}
}</pre>
</li>
<li>修复导入以添加所需的 import 语句。保存所做的更改。 <br /> <img alt="显示已生成项目的 Projects(项目)窗口" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-fiximports.png" title="显示已生成项目的 Projects(项目)窗口">
<p class="notes"><strong>注:</strong>请确认 "Fix All Imports"(修复所有导入)对话框中的 <strong><tt>javax.persistence.Query</tt></strong> 处于选中状态。</p>
</li>
</ol>
</div>
<a name="Exercise_2"></a>
<h2>创建会话 Bean 测试</h2>
<p>在本部分中,将为 <tt>MyEntityFacade</tt> 会话 Facade 创建 JUnit 测试类。IDE 将为 Facade 类中的每个方法以及抽象 Facade 中的每个方法生成框架测试方法。您需要标注为抽象 Facade 中的方法生成的测试方法,以指示 IDE 和 JUnit 测试运行器将其忽略。然后,您需要修改已添加到 <tt>MyEntityFacade</tt> 中的 <tt>verify</tt> 方法的测试方法。
</p>
<p>在生成的测试中,将会看到 IDE 自动添加用于调用 <tt>EJBContainer</tt> 以创建 EJB 容器实例的代码。在生成测试类后,包含调用的行会在左旁注中显示一条提示,指出 Java EE API 不在类路径中,并建议使用 GlassFish Server 3.1 安装中的 EJBContainer。此提示将会修改 POM 以添加一个指定 GlassFish 本地安装路径的属性。
</p>
<!-- <p>The Ant version includes steps to use @BeforeClass and @AfterClass to create and close the container,
but these annotations do not seem to work with Maven.</p>-->
<ol>
<li>在 "Projects"(项目)窗口中右键单击 <tt>MyEntityFacade.java</tt>,然后选择 "Tools"(工具)> "Create JUnit Tests"(创建 JUnit 测试)。</li>
<li>选择 JUnit 4.x 作为 JUnit 版本。单击 "Select"(选择)按钮。</li>
<li>使用 "Create Tests"(创建测试)对话框中的默认选项。单击 "OK"(确定)。
<p>默认情况下,IDE 将生成框架测试类,其中包含 <tt>MyEntityFacade</tt><tt>AbstractFacade</tt> 中每个方法的测试。IDE 自动将 JUnit 4.10 的依赖关系添加到 POM 中。</li>
<li>使用 <tt>@Ignore</tt> 标注对每个测试方法(<tt>testVerify</tt> 除外)进行标注。运行测试时,IDE 将跳过使用 <tt>@Ignore</tt> 标注的每个测试。
<p>此外,也可以删除所有测试方法,但 <tt>testVerify</tt> 除外。</p>
</li>
<li>找到测试类中的 <tt>testVerify</tt> 测试方法。
<p>您可以看到,调用 <tt>EJBContainer</tt> 的行旁边的左旁注中出现错误标注。</p>
<pre class="examplecode">
@Test
public void testVerify() throws Exception {
System.out.println("verify");
EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade");
int expResult = 0;
int result = instance.verify();
assertEquals(expResult, result);
container.close();
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}</pre>
</li>
<li>单击旁注中的错误标注,然后从弹出式菜单的建议中选择 <strong>Use EJBContainer from installation of GlassFish Server 3.1.1</strong>(使用 GlassFish Server 3.1.1 安装中的 EJBContainer)。
<p>此外,也可以将插入光标放在产生该错误的行中,并按 Alt+Return 组合键,然后在弹出式菜单中选择相应的建议。 </p>
<a href="../../../images_www/articles/72/javaee/maven-testing/maven-testing-ejbcontainer.png" rel="lytebox" title="选择该提示可指定 EJBContainer 的位置"> <img alt="显示用于指定 EJBContainer 位置的编辑器提示的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/javaee/maven-testing/maven-testing-ejbcontainer.png" style="width: 600px" title="单击查看大图"></a>
<p>在选择建议之后,IDE 会将 <tt>&lt;glassfish.embedded-static-shell.jar&gt;</tt> 元素(以粗体显示)添加到 POM 中的 <tt>&lt;properties&gt;</tt> 元素内。<tt>&lt;glassfish.embedded-static-shell.jar></tt> 元素用于标识 GlassFish Server 的本地安装路径。如果该本地安装路径发生变化,则需要修改 POM 中的此元素。
</p>
<pre class="examplecode">
&lt;properties&gt;
&lt;endorsed.dir&gt;${project.build.directory}/endorsed&lt;/endorsed.dir&gt;
&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
<strong>&lt;glassfish.embedded-static-shell.jar&gt;/Applications/NetBeans/glassfish-3.1.1/glassfish/lib/embedded/glassfish-embedded-static-shell.jar&lt;/glassfish.embedded-static-shell.jar&gt;</strong>
<!-- &lt;glassfish.embedded-static-shell.jar&gt;/Applications/NetBeans/glassfish-3.1.1/glassfish/lib/embedded/glassfish-embedded-static-shell.jar&lt;/glassfish.embedded-static-shell.jar&gt;-->
&lt;/properties&gt;
</pre>
<p>IDE 还将 <tt>glassfish-embedded-static-shell</tt> 依赖关系添加到引用本地安装路径的 POM 中。</p>
<pre class="examplecode">
&lt;dependency&gt;
&lt;groupId&gt;org.glassfish.extras&lt;/groupId&gt;
&lt;artifactId&gt;glassfish-embedded-static-shell&lt;/artifactId&gt;
&lt;version&gt;3.1.1&lt;/version&gt;
&lt;scope&gt;system&lt;/scope&gt;
&lt;systemPath&gt;${glassfish.embedded-static-shell.jar}&lt;/systemPath&gt;
&lt;/dependency&gt;
</pre>
</li>
<li><tt>testVerify</tt> 测试方法的框架进行以下更改(以粗体显示)。
<pre class="examplecode">
@Test
public void testVerify() throws Exception {
System.out.println("verify");
EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade");
<strong>System.out.println("Inserting entities...");
instance.insert(5);</strong>
int result = instance.verify();
<strong>System.out.println("JPA call returned: " + result);
System.out.println("Done calling EJB");
Assert.assertTrue("Unexpected number of entities", (result == 5));</strong>
container.close();
}</pre>
</li>
<li>修复 import 语句以添加 <tt>junit.framework.Assert</tt>。保存所做的更改。</li>
<li>在 "Projects"(项目)窗口中右键单击项目节点,然后选择 "Test"(测试)。 </li>
</ol>
<p>在选择 "Test"(测试)时,IDE 将构建应用程序,并运行构建生命周期的测试阶段。单元测试将使用 Surefire 插件执行,该插件支持运行 JUnit 4.x 测试。有关 Surefire 插件的更多信息,请参见 <a href="http://maven.apache.org/plugins/maven-surefire-plugin/">http://maven.apache.org/plugins/maven-surefire-plugin/</a></p>
<p>测试结果显示在 "Test Results"(测试结果)窗口中。</p>
<p>在本示例中,可以看到通过了九项测试。如果在 "Output"(输出)窗口中查看,则可以看到只运行了一项测试,而其他八项测试都被跳过。</p>
<pre class="examplecode">
Running com.mycompany.mavenwebtestapp.MyEntityFacadeTest
verify
...
Inserting entities...
Inserting # 1
Inserting # 2
Inserting # 3
Inserting # 4
Inserting # 5
Found: Entity number 2 created at Fri Feb 25 18:26:53 CET 2011
Found: Entity number 4 created at Fri Feb 25 18:26:53 CET 2011
Found: Entity number 3 created at Fri Feb 25 18:26:53 CET 2011
Found: Entity number 1 created at Fri Feb 25 18:26:53 CET 2011
Found: Entity number 5 created at Fri Feb 25 18:26:53 CET 2011
JPA call returned: 5
Done calling EJB
...
Results :
Tests run: 9, Failures: 0, Errors: 0, Skipped: 8
</pre>
<!-- <a name="Exercise_3"></a>
<h2>Checking Code Coverage</h2>
<p>In this section you install the Maven Code Coverage plugin and configure the POM to add reporting. See http://wiki.netbeans.org/MavenCodeCoverage</p>
<ol>
Download and install plugin
<li>Open the Services window in the IDE.</li>
<li>Expand the sample datasource connection under the Database node.</li>
<li>Expand the Tables node under the App node.</li>
<li>Right-click the SEQUENCE table and choose Delete.</li>
<li>Add the following to the POM. Save your changes.
<pre class="examplecode">&lt;/dependencies&gt;
<strong>&lt;reporting&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
&lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;
&lt;version&gt;2.5.1&lt;/version&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/reporting&gt;</strong>
&lt;build&gt;</pre>
</li>
<li>Right-click project node and choose Code Coverage &gt; Show Report.</li>
<li>Open MyEntityFacadeTest in the editor.</li>
<li>Modify the test to change the JNDI lookup for the bean from
<tt>java:global/classes/MySessionBean</tt> to <tt>java:global/cobertura/MySessionBean</tt>.
<pre class="examplecode">
@Test
public void testVerify() throws Exception {
System.out.println("verify");
EJBContainer container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
// MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/classes/MyEntityFacade");
<strong>MyEntityFacade instance = (MyEntityFacade)container.getContext().lookup("java:global/cobertura/MyEntityFacade");</strong>
System.out.println("Inserting entities...");
instance.insert(5);
int result = instance.verify();
System.out.println("JPA call returned: " + result);
System.out.println("Done calling EJB");
Assert.assertTrue("Unexpected number of entities", (result==5));
container.close();
}</pre>
</li>
<li>Click Run All Tests in Code Coverage window.
<p>Result displays coverage is 0% and the following is in the Output window. </p>
</li>
</ol>-->
<br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Creating%20an%20Enterprise%20Application%20Using%20Maven">请将您的反馈意见发送给我们</a></div>
<br style="clear:both;" >
<!-- ======================================================================================= -->
<h2><a name="nextsteps"></a>另请参见</h2>
<p>有关使用 NetBeans IDE 开发 Java EE 应用程序的更多信息,请参见以下资源:
</p>
<ul>
<li><a href="../../docs/javaee/javaee-intro_zh_CN.html">Java EE 技术简介</a></li>
<li><a href="../../docs/javaee/javaee-gettingstarted_zh_CN.html">Java EE 6 应用程序入门指南</a></li>
<li><a href="../../docs/javaee/javaee-entapp-ejb_zh_CN.html">使用 EJB 3.1 创建企业应用程序</a></li>
<li><a href="../../trails/java-ee_zh_CN.html">Java EE 和 Java Web 学习资源</a></li>
</ul>
<p>您可以在 <a href="http://download.oracle.com/javaee/6/tutorial/doc/">Java EE 6 教程</a>中找到有关使用 企业 Bean 的详细信息。</p>
<p>要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请<a href="../../../community/lists/top.html">加入 nbj2ee 邮件列表</a></p>
</body>
</html>