Java EE 6测试第I部分– EJB 3.1可嵌入API

我们从Enterprise JavaBeans开发人员那里听到的最常见的请求之一就是需要改进的单元/集成测试支持。
EJB 3.1 Specification引入了EJB 3.1 Embeddable API,用于在Java SE环境中执行EJB组件。

与传统的基于Java EE服务器的执行不同,可嵌入式用法允许客户端代码及其相应的企业bean在同一JVM和类加载器中运行。 这为测试,脱机处理(例如批处理)以及在桌面应用程序中使用EJB编程模型提供了更好的支持。
[…]可嵌入的EJB容器为托管环境提供了对Java EE运行时中存在的相同基本服务的支持:注入,对组件环境的访问,容器管理的事务等。通常,企业bean组件不了解他们在其中运行的一种托管环境。 这使得企业组件在各种测试和部署方案中都具有最大的可重用性,而无需进行大量的返工。

让我们看一个例子。

首先创建一个Maven项目,然后添加可嵌入的GlassFish依赖项。
我选择使用TestNG测试框架,但JUnit应该也能正常工作。

<dependencies><dependency><groupId>org.glassfish.extras</groupId><artifactId>glassfish-embedded-all</artifactId><version>3.1.2</version><scope>test</scope></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.4</version><scope>test</scope></dependency><!--The javaee-api is stripped of any code and is just used tocompile your application. The scope provided in Maven meansthat it is used for compiling, but is also available whentesting. For this reason, the javaee-api needs to be belowthe embedded Glassfish dependency. The javaee-api can actuallybe omitted when the embedded Glassfish dependency is included,but to keep your project Java-EE 6 rather than GlassFish,specification is important.--><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>6.0</version><scope>provided</scope></dependency>
</dependencies>

这是一个简单的Stateless会话Bean:

@Stateless
public class HelloWorld {public String hello(String message) {return "Hello " + message;}
}

它通过无接口视图公开业务方法。
它没有可用于嵌入执行的特殊API。

以下是一些测试代码,用于在可嵌入容器中执行Bean:

public class HelloWorldTest {private static EJBContainer ejbContainer;private static Context ctx;@BeforeClasspublic static void setUpClass() throws Exception {// Instantiate an embeddable EJB container and search the// JVM class path for eligible EJB modules or directoriesejbContainer = EJBContainer.createEJBContainer();// Get a naming context for session bean lookupsctx = ejbContainer.getContext();}@AfterClasspublic static void tearDownClass() throws Exception {// Shutdown the embeddable containerejbContainer.close();}@Testpublic void hello() throws NamingException {// Retrieve a reference to the session bean using a portable// global JNDI nameHelloWorld helloWorld = (HelloWorld)ctx.lookup("java:global/classes/HelloWorld");// Do your testsassertNotNull(helloWorld);String expected = "World";String hello = helloWorld.hello(expected);assertNotNull(hello);assertTrue(hello.endsWith(expected));}
}

源代码在GitHub上的ejb31-embeddable文件夹下可用。

有关JPA示例的分步教程,请阅读使用嵌入式EJB容器从NetBeans文档测试企业应用程序 。

尽管此新API向前迈了一大步,但我仍然对这种方法有疑问:您正在将容器进行测试。 这需要一个与您的生产环境不同的专用容器。

在Java EE 6测试第二部分中 ,我将介绍Arquillian和ShrinkWrap 。
Arquillian是一个功能强大的面向容器的测试框架,位于TestNG和JUnit之上,使您能够在您选择的容器上创建生产环境,并仅在该环境中执行测试(使用数据源,JMS目标以及许多其他工具)。您希望在生产环境中看到的其他配置)。 Arquillian并没有将您的运行时带到测试中,而是将您的测试带到了运行时中。

相关文章

  • Java EE 6测试第二部分– Arquillian和ShrinkWrap简介
  • Maven 2 Cobertura插件–更新
  • 单元测试JBoss 5服务
  • 条带框架和EJB3
  • Maven 2 Cobertura插件
  • 上一篇文章:使用jQuery更改URL参数
  • 下一篇文章:Java EE 6测试第二部分– Arquillian和ShrinkWrap简介

参考: Java EE 6测试第I部分–来自我们JCG合作伙伴 Samuel Santos的EJB 3.1可嵌入API ,位于Samaxes博客上。


翻译自: https://www.javacodegeeks.com/2012/06/java-ee-6-testing-part-i-ejb-31.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flume 中文入门手冊

原文&#xff1a;https://cwiki.apache.org/confluence/display/FLUME/GettingStarted 什么是 Flume NG? Flume NG 旨在比起 Flume OG 变得明显更简单。更小。更easy部署。在这样的情况下&#xff0c;我们不提交Flume NG 到 Flume OG 的后向兼容。当前。我们期待来自感兴趣測试…

原生JavaScript+CSS3实现移动端滑块效果

在做web页面时&#xff0c;无论PC端还是移动端&#xff0c;我们会遇到滑块这样的效果&#xff0c;可能我们往往会想着去网上找插件&#xff0c;其实这个效果非常的简单&#xff0c;插件代码的的代码往往过于臃肿&#xff0c;不如自己动手&#xff0c;自给自足。首先看一下效果图…

mysql的连接名是哪个文件_mysql连接名是什么

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

Activiti绩效对决

每个人在学习Activiti时都会一直问到的问题&#xff0c;与软件开发本身一样古老&#xff1a;“它如何执行&#xff1f;”。 到现在为止&#xff0c;当您问我同样的问题时&#xff0c;我将告诉您Activiti如何以各种可能的方式最小化数据库访问&#xff0c;如何将流程结构分解为“…

怎么使用CKEDITOR

出于工作需求&#xff0c;自己在网上找了个文本编辑器控件, 网址是http://ckeditor.com/ 怎么使用&#xff1f; 先插入脚本<script type"text/javascript" src"*/ckeditor.js"></script>, 然后&#xff0c;在自己的脚本里调用CKEDITOR.replac…

centos 打开pdo_mysql_centos中添加php扩展pdo_mysql步骤

pdo_mysql是php中一个mysql连接类了&#xff0c;我们可以直接使用pdo_mysql来操作数据库这样自己可以不需要写数据库操作类了&#xff0c;下面来介绍在centos中安装pdo_mysql扩展的步骤。本文内容是以 CentOS 为例&#xff0c;红帽系列的 Linux 方法应该都是如此&#xff0c;下…

Java线程死锁–案例研究

本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析。 此案例研究还将证明掌握线程转储分析技能的重要性&#xff1b; 包括用于IBM JVM Thread Dump格式。 环境规格 – Java EE服务器&#xff1a;Oracle Weblogic Server 1…

bzoj1968: [Ahoi2005]COMMON 约数研究

水题。。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int is;i<t;i) int main(){int ans0,n;scanf("%d",&n);rep(i,1,n) ansn/i;printf("%d\n…

题目1457:非常可乐(广度优先遍历BFS)

题目链接&#xff1a;http://ac.jobdu.com/problem.php?pid1457 详解链接&#xff1a;https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码&#xff1a; // // 1457 非常可乐.cpp // Jobdu // // Created by PengFei_Zheng on 22/04/2017. // Copyright © 2017 Pe…

mysql查询某张表的所有外键_oracle中查询所有外键引用到某张表的记录

欢迎进入Oracle社区论坛&#xff0c;与200万技术人员互动交流 >>进入 oracle中查询所有外键引用到某张表的记录 //查询表的主键约束名 select * from user_constraints e where e.table_name表名;--输入 //查询所有引用到该主键的记录 select b.table_name,b.column_欢迎…

BTrace for Java应用程序简介

本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序&#xff08;JDK 6&#xff09;&#xff0c;而无需更改应用程序的代码和配置参数。 什么是BTrace&#xff1f; BTrace是一个开源项目&#xff0c;始于2007年&#xff0c;最初由A.Sundararajan和K.Balasubra…

丛铭俣 160809324 (作业1)

老师&#xff0c;助教好&#xff01;我是计科3班的丛铭俣&#xff0c;我的性格阳光开朗&#xff0c;待人大方友善&#xff0c;凡事不喜欢斤斤计较&#xff1b;本人热心&#xff0c;喜欢乐于助人&#xff0c;也喜欢和积极向上的人交朋友。最喜欢打羽毛球&#xff0c;其次是篮球&…

mysql死锁分析_MySQL死锁分析

熟悉或者了解数据库的朋友都知道锁的概念&#xff0c;这里不做过多的解析&#xff01;锁的种类有很多&#xff0c;不同数据库的锁管理方式也不同。这里主要谈下MySQL innodb引擎下的死锁。死锁通俗的来讲就是2个事务相互请求对方持有的锁&#xff0c;这样就会造成2个事务相互等…

在Akka中实现主从/网格计算模式

主从模式是容错和并行计算的主要示例。 模式背后的想法是将工作划分为相同的子任务&#xff0c;然后将其委派给从属。 这些从节点或实例将处理工作任务&#xff0c;并将结果发送回主节点。 然后主节点将编译从所有从节点接收到的结果。关键是从节点仅知道如何处理任务&#xff…

java学习笔记总略

二、正文&#xff08;一&#xff09;Java1.接口和抽象类的区别①抽象类里可以有构造方法&#xff0c;而接口内不能有构造方法。②抽象类中可以有普通成员变量&#xff0c;而接口中不能有普通成员变量。③抽象类中可以包含非抽象的普通方法&#xff0c;而接口中所有的方法必须是…

react实现路由跳转_react实现hash路由

众所周知&#xff0c;目前单页面使用的路由有两种实现方式&#xff1a;hash 模式history 模式hash 模式路由原理&#xff1a;我们先来看hash模式&#xff0c;页面首次加载时需要在load事件中解析初始的URL&#xff0c;从而展示进入的页面。当 # 后面的哈希值发生变化时&#xf…

Java中的Google协议缓冲区

总览 协议缓冲区是一种用于结构化数据的开源编码机制。 它是由Google开发的&#xff0c;旨在实现语言/平台中立且可扩展。 在本文中&#xff0c;我的目的是介绍Java平台上下文中协议缓冲区的基本用法。 Protobuff比XML更快&#xff0c;更简单&#xff0c;并且比JSON更紧凑。 当…

匈牙利哦模板 二分匹配 完全匹配问题

匈牙利算法的核心思想就是 腾空间, 有条件 创造,没条件也要创造! bool find(int x){int i,j;for (j1;j<m;j){ //扫描每个被匹配的人 if (line[x][j]true && used[j]false) //如果有关系并且还没有标记过(这里标记的意思是这次查找曾试图改变过的归属问题&a…

ThinkPHP 中验证码的看不清切换

<!--HTML页面--> <!DOCTYPE html><html><head> <title></title></head><body><script type"text/javascript" src"__PUBLIC__/js/jquery-1.8.2.min.js"></script><form action"{:U(H…

mysql从表截取信息_mysql中循环截取用户信息并插入到目标表对应的字段中

操作环境&#xff1a;有表game_list&#xff0c;字段&#xff1a;uid&#xff0c;score1&#xff0c;score2&#xff0c;seat_id&#xff0c;last_update&#xff1b;传入参数为i_player_detail &#xff0c;传入的值为多个用户的id、之前分数、之后分数、座位号&#xff0c;每…