网址大全2345色综合导航安徽seo网络优化师
news/
2025/9/22 20:35:56/
文章来源:
网址大全2345色综合导航,安徽seo网络优化师,颜色广告,沈阳建设工程项目审批netbeans 源文件这是一个偶然的帖子。 我一直在研究交易CDI观察者#xff0c;并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是#xff0c;这种方法不能很好地工作#xff0c;我仍在弄清楚#xff0c;使用普通的嵌入式GlassFish时问题出在哪里。 同时并尝试使用嵌入式GlassFish对它进行一些集成测试。 但是令人惊讶的是这种方法不能很好地工作我仍在弄清楚使用普通的嵌入式GlassFish时问题出在哪里。 同时我转到了Arquillian 。 去年我仔细查看了Arquillian 1.0.0.Alpha4之后是时候看看这些家伙为1.0.0决赛准备了什么。 有些东西发生了一些变化我很惊讶只在网上找到一些基本的例子。 这就是我开始写这篇文章的主要原因。 要获得所有这三种技术一起工作的更完整示例。 入门 首先获得最新的NetBeans 7.1的新副本。 几周后就出来了看起来真的很好。 如果愿意您可以下载Java EE版本的副本该版本随附预先捆绑的最新GlassFish OSS Edition 3.1.1。 安装并启动它。 还要grep MySQL Community Edition的副本并安装它。 返回NetBeans通过新的项目向导设置新的Maven Web应用程序。 我们将其称为“ simpleweb”并告诉它在GF 3.1.1上运行如果尚未运行则应在服务创建之前创建Services Server GlassFish实例或者在项目设置期间创建它。 实施您的应用程序 即使这不是测试驱动的我还是喜欢使用这种方法因为我仍然相信这是您在项目中发现的最常见的情况。 您已经准备好运行很多东西并且正在寻找某种自动集成测试。 因此假设您有一个非常基本的实体我们将其称为“ com.mycompany.simpleweb.entities.AuditLog”。 您可以使用NetBeans新实体向导创建它。 实体创建过程中的第三步是提供程序和数据库设置。 定义一个新的数据源并将其命名为“ jdbc / auditlog”。 作为连接规范请使用MySQL J驱动程序并且我假设您已经建立了一个数据库并正在运行假设这被称为auditlog。 测试连接并完成向导。 如果您使用向导则将获得一些免费礼物。 除了事实您现在在源代码树中有AuditLog实体您还可以在src / main / resources中找到一个META-INF / persistence.xml文件并在src / main / setup中找到一个glassfish-resources.xml。 稍后需要这样做请记住这一点。 向您的实体添加一些其他属性。 现在我添加“字符串帐户”。 并且不要忘记定义一个Version字段“ Timestamp timestamp”。 还有一点点命名查询来获取所有AuditLogs的列表也是很好的 NamedQuery(name findAllAuditLogs,
query SELECT OBJECT (e) FROM AuditLog e)Version
private Timestamp timestamp; 如果使用向导请确保检查pom.xml。 该向导在提供的范围中添加了一些eclipselink依赖项因此在这里应该没有太大的区别。 接下来是添加com.mycompany.simpleweb.service.AuditRepositoryService EJB。 这应该负责AuditLog实体上的所有CRUD操作。 向其中添加一些代码以插入AuditLog PersistenceContext
private EntityManager em;public void writeLog(String account) {AuditLog log new AuditLog();log.setAccount(account);em.persist(log);} 还有更多代码来查找表中的条目总数 public int findAll() {TypedQueryAuditLog query em.createNamedQuery(AuditLog.findAllAuditLogs, AuditLog.class);return query.getResultList().size();} 目前为止就这样了。 添加基本测试依赖项 接下来我们将添加一些非常基本的测试依赖项。 打开您的项目pom.xml文件然后将Arquillian的以下部分添加到您的项目中 repositoryidJBoss/idnameJBoss Repository/nameurlhttps://repository.jboss.org/nexus/content/groups/public//url/repository
dependencymanagement dependenciesdependencygroupidorg.jboss.arquillian/groupidartifactidarquillian-bom/artifactidversion1.0.0.Final-SNAPSHOT/versionscopeimport/scopetypepom/type/dependency/dependencies
/dependencymanagement
dependenciesdependencygroupidorg.jboss.arquillian.container/groupidartifactidarquillian-glassfish-embedded-3.1/artifactidversion1.0.0.Final-SNAPSHOT/versionscopetest/scope/dependencydependencygroupidorg.jboss.arquillian.junit/groupidartifactidarquillian-junit-container/artifactidscopetest/scope/dependency
/dependencies 除此之外您还需要嵌入式Glassfish依赖项。 dependencygroupidorg.glassfish.extras/groupidartifactidglassfish-embedded-all/artifactidversion3.1/versionscopetest/scope
/dependency 我们还需要MySQL J驱动程序 dependencygroupidmysql/groupidartifactidmysql-connector-java/artifactidversion5.1.18/versionscopetest/scope
/dependency 配置Arquillian 在所有必要的依赖关系就绪之后我们需要进一步配置Arquillian。 这是通过arquillian.xml完成的该文件必须放在src / test / resources文件夹中您可能之前需要在NetBeans外部创建它并且应如下所示 arquillian xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemalocationhttp://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian-1.0.xsdengineproperty namedeploymentExportPathtarget/arquillian/property/enginecontainer defaulttrue qualifierglassfishconfigurationproperty namesunResourcesXmlsrc/main/setup/glassfish-resources.xml/property /configuration/container
/arquillian engine参数告诉Arquillian将测试存档的打包版本放置到target / arquillian文件夹中。 这对于解决问题非常有用。 容器限定符将测试运行程序指向由实体创建向导创建的glassfish-resources.xml。 全做完了。 我想建议的一件事是制作persistence.xml的副本并将其放置到重命名为test-persistence.xml之类的test / resources文件夹中。 我认为最好的做法是可以选择配置测试JPA而配置JPA则不同于生产JPA。 作为一个简单的例子我们希望在测试过程中看到更多日志记录输出因此复制的版本还应包含所需的参数。 我还想将用于测试的表生成策略更改为拖放表 property nameeclipselink.ddl-generation valuedrop-and-create-tables /
property nameeclipselink.logging.level.sql valueFINEST /
property nameeclipselink.logging.parameters valuetrue / 让我们看一下测试。 添加一个测试用例 让我们添加一个测试。 对于NetBeans这很容易右键单击EJB然后选择“工具创建JUnit测试”。 选择JUnit 4.x并接受名称建议“ com.mycompany.simpleweb.service.AuditRepositoryServiceTest”。 现在您的项目有了一个新的“ Test Packages”文件夹。 如您所见测试是错误的。 NetBeans假定您要基于嵌入式EJBContainer进行测试。 不错的猜测但我们想在此处添加一些Arquillian。 删除EJBContainer导入并将类剥离为此 RunWith(Arquillian.class)
public class AuditRepositoryServiceTest {
} 现在是时候使用ShrinkWrap定义测试的部署档案了。 测试的部署存档是使用带有Arquillian的Deployment批注的静态方法定义的。 Deploymentpublic static JavaArchive createTestArchive() {return ShrinkWrap.create(JavaArchive.class, test.jar).addPackage(AuditLog.class.getPackage()).addPackage(AuditRepositoryService.class.getPackage()).addAsManifestResource(new ByteArrayAsset(beans.getBytes()),ArchivePaths.create(beans.xml)).addAsManifestResource(test-persistence.xml,ArchivePaths.create(persistence.xml));} 在添加了应包含的软件包之后添加了一个空的beans.xml现在应该足够了并添加了test-persistence.xml作为名为persistence.xml的清单资源。 大。 最后一件事是定义测试本身。 EJB
AuditRepositoryService repository;Testpublic void insertLog() throws Exception {repository.writeLog(Markus);int numberOfLogs repository.findAll();Assert.assertEquals(1, numberOfLogs);} 我们正在插入一个简单的测试实体并从数据库中获取计数该计数通过assertEquals检查。 就这样。 启动您的测试。 右键单击AuditRepositoryServiceTest类然后选择“测试文件Strg F6。 检查发生了什么 输出窗口显示起始GlassFish的Std.out。 如果进一步检查输出将会看到JDBC连接池和JDBC资源已创建 信息命令添加资源结果PlainTextActionReporterSUCCESS描述添加资源AdminCommandnull JDBC连接池mysql_auditlog_rootPool创建成功。 JDBC资源jdbc / auditlog已成功创建。 并部署了“测试”应用程序 信息WEB0671在[/ test]处加载应用程序[test] 17.01.2012 10:12:39 org.glassfish.deployment.admin.DeployCommand执行 INFO测试成功部署了6.461毫秒。 扫描输出确实会指向一些EclipseLink东西但是附加的sql日志记录似乎无效。 这是因为EclipseLink需要知道将输出指向哪个记录器。 通常日志输出将重定向到自动发现的服务器记录器。 到目前为止我们没有进行任何日志记录配置仅依赖于Java Logging的默认值。 因此让我们添加一些日志记录配置。 将一个空的logging.properties文件放入src / test / resources并向其中添加一些简单的行 handlers java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.formatter java.util.logging.SimpleFormatter java.util.logging.ConsoleHandler.level FINEST 将maven sure-fire插件添加到pom.xml的build部分 plugingroupidorg.apache.maven.plugins/groupidartifactidmaven-surefire-plugin/artifactidversion2.11/versionconfigurationincludesincludecom/mycompany/simpleweb/service/*/include/includessystempropertyvariablesjava.util.logging.config.file${basedir}/src/test/resources/logging.properties/java.util.logging.config.file/systempropertyvariables/configuration/plugin 如果现在执行清理和构建则会看到所需的日志输出显示在NetBeans构建输出中。 有限插入音频日志ID帐户时间戳值 绑定 [1马库斯2012-01-17 110254.0] 实际上如果您使用Strg F6您仍然只会看到INFO级别的消息。 要解决此问题您需要更改NetBeans运行操作设置。 右键单击您的项目然后选择“属性”。 选择“操作”和“测试文件”。 将以下内容作为新行添加到“设置属性”区域中 java.util.logging.config.file src / test / resources / logging.properties 现在您还可以通过一次测试查看所需的日志级别输出。 就是这样 您可以下载完整的示例maven项目作为ZIP文件 并带有提到的类并进行一些操作。 玩得开心 即使上面的帖子旨在成为一个更复杂的演示事实证明我还是错过了设置方面的一个大问题。 当您开始向实体引入增强功能时一切工作都很好。 仅举几例延迟加载更改跟踪获取组等。 JPA提供者喜欢称其为“增强”通常将其称为“编织”。 编织是一种操作已编译Java类的字节码的技术。 EclipseLink JPA持久性提供程序使用编织来增强提到的内容的JPA实体并进行内部优化。 编织可以在运行时加载实体时动态执行也可以在编译时通过对Entity .class文件进行后处理来静态执行。 通常建议使用动态编织因为它易于配置并且不需要对项目的构建过程进行任何更改。 您可能已经从EclipseLink看到了一些更好的日志输出如下所示 […] –开始weaver类转换器处理类[com / mycompany / simpleweb / entities / AuditLog]。 […] –编织的持久性PersistenceEntity[com / mycompany / simpleweb / entities / AuditLog]。 […] –编织变更跟踪ChangeTracker[com / mycompany / simpleweb / entities / AuditLog]。 […] –编织懒惰间接使用ValueHolder[com / mycompany / simpleweb / entities / AuditLog]。 […] –编织提取组FetchGroupTracker[com / mycompany / simpleweb / entities / AuditLog]。 […] –结束weaver类转换器处理类[com / mycompany / simpleweb / entities / AuditLog]。 Arquillian和嵌入式GlassFish的问题 想象一下您以昨天博客中的示例为例将简单的String account属性更改为如下所示 ManyToOne(cascade CascadeType.PERSIST, fetch FetchType.LAZY)private Person person; 这正是上述情况之一您的JPA提供程序需要在执行之前对类文件进行一些增强。 如果不修改项目将导致一些非常讨厌的异常 异常描述访问不存在的编织_vh_方法[_persistence_get_person_vh]时将发生NullPointerException。 未正确编织该类–对于EE部署请检查application.xml部署描述符中的模块顺序并验证包含持久性单元的模块是否在使用该持久性单元的任何其他模块之前。 […] 内部异常java.lang.NoSuchMethodExceptioncom.mycompany.simpleweb.entities.AuditLog._persistence_get_person_vh 映射org.eclipse.persistence.mappings.ManyToOneMapping [person] 描述符RelationalDescriptorcom.mycompany.simpleweb.entities.AuditLog – [DatabaseTableAUDITLOG] 在org.eclipse.persistence.exceptions.DescriptorException.noSuchMethodWhileInitializingAttributesInMethodAccessorDescriptorException.java:1170 在org.eclipse.persistence.internal.descriptors.MethodAttributeAccessor.initializeAttributesMethodAttributeAccessor.java:200 […] 表示缺少某些内容。 而这种缺失的方法是由编织过程引入的。 如果您反编译编织的实体则可以看到JPA提供程序在抱怨什么。 这是增强型实体类的外观。 这只是编织过程引入到您的代码中的增强方法之一。 public WeavedAttributeValueHolderInterface _persistence_get_person_vh(){_persistence_initialize_person_vh();if(_persistence_person_vh.isCoordinatedWithProperty() || _persistence_person_vh.isNewlyWeavedValueHolder()){Person person1 _persistence_get_person();if(person1 ! _persistence_person_vh.getValue())_persistence_set_person(person1);}return _persistence_person_vh;} 动态与静态编织 显然默认的动态编织不适用于上述设置。 为什么 编织是一个被宠坏的孩子。 它仅在要编织的实体类仅存在于应用程序类加载器中时才起作用。 嵌入式GlassFishArquillian和maven sure-fire-plugin的结合使这一点有些混乱故事的结尾是您的实体完全没有任何增强。 比较这个不错的讨论以获得更详细的解释。 如果动态波动不起作用则必须使用称为静态编织的后备。 静态意味着在构建过程中对实体进行后处理。 有了maven项目这听起来很容易。 让我们寻找这样的东西。 您可能会发现的第一件事是StaticWeaveAntTask 。 第二件事可能是Craig的eclipselink-staticweave-maven-plugin 。 让我们从StaticWeaveAntTask开始。 您必须使用maven-antrunner-plugin来进行介绍。 从左到右复制课程并进行大量的争吵以使您的课程路径牢牢掌握。 Laird Nelson在为所有三个大型JPA提供程序EclipseLinkOpenJPAHibernate提供示例配置原型方面做得很出色您可以尝试一下。 有关正在发生的事情的详细说明可以在他的博客中找到 。 感谢莱尔德的指示 不要误会我的意思这是一种有效的方法但是我根本不喜欢它。 主要是因为它给构建带来了巨大的复杂性并且看到了太多的项目甚至没有管理正常Maven项目所需的技能这对我来说根本不是解决方案。 我尝试了Craig Day完成的静态编织插件。 向simpleweb添加静态编织 因此让我们从昨天的项目中打开pom.xml并引入新的插件 pluginartifactIdeclipselink-staticweave-maven-plugin/artifactIdgroupIdau.com.alderaan/groupIdversion1.0.1/versionexecutionsexecutiongoalsgoalweave/goal/goalsphaseprocess-classes/phase/execution/executions/plugin 做完了 现在您的类已经编好了如果您通过插件配置引入一些日志记录您实际上可以看到您的实体类会发生什么。 该插件可通过repo1.maven.org获得。 我遇到的唯一问题是引入的对EclipseLink 2.2.0的依赖关系不是或当然不能通过同一存储库获得因此您可能需要使用正确的存储库和依赖关系为自己构建它。 您可以通过插件的Google代码页来获取源代码。 不要忘记将编织属性添加到您的test-persistance.xml中 property nameeclipselink.weaving valuestatic / [更新2012年1月19日] Craig发布了该插件的新1.0.2版本该版本解决了EclipseLink依赖项的问题。 现在您可以简单地包括所需的EclipseLink版本作为插件的依赖项。 还需要正确的EclipseLink Maven存储库。 具有配置的日志级别的完整示例如下所示 repositoryideclipselink/idnameRepository hosting the eclipselink artifacts/nameurlhttp://www.eclipse.org/downloads/download.php?r1nf1file/rt/eclipselink/maven.repo//url/repository[...]pluginartifactIdeclipselink-staticweave-maven-plugin/artifactIdgroupIdau.com.alderaan/groupIdversion1.0.2/versionexecutionsexecutiongoalsgoalweave/goal/goalsphaseprocess-classes/phaseconfigurationlogLevelALL/logLevel/configuration/execution/executionsdependenciesdependencygroupIdorg.eclipse.persistence/groupIdartifactIdeclipselink/artifactIdversion2.3.1/version/dependency/dependencies/plugin 参考 具有NetBeans的Arquillian嵌入式GlassFishJPA和MySQL数据源和具有NetBeans的Arquillian嵌入式GlassFishJPA和MySQL数据源–来自我们JCG合作伙伴 Markus Eisele在企业软件开发和Java博客上的第二部分。 翻译自: https://www.javacodegeeks.com/2012/01/arquillian-with-netbeans-glassfish.htmlnetbeans 源文件
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910290.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!