去年我在伦敦的 JUDCon 上使用修改版的 kitchensink 快速入门 给出了 OGM 和 OpenShift 的 简介。时间已经过去了,是时候给这个演示进行更新了。
感谢 Sanne,代码已更新以使用最新的应用程序服务器(AS 7.1.1.Final Brontes)和自然地最新的 OGM 和 搜索 版本。另一个变化是现在 Infinispan 不仅用于通过 OGM 持久化实体数据,而且也用于通过 Infinispan 目录提供者 存储Lucene索引(请参阅示例项目的 persistence.xml)。Sanne 还添加了一些新测试,展示了 Arquillian 和捆绑应用程序的不同方法。绝对值得一看!
就我个人而言,我检查了项目设置并做了一些更改。原始演示假设您需要在机器上安装本地应用程序服务器作为先决条件。然后它使用 jboss-as-maven-plugin 来部署 web 应用程序。不幸的是,这个插件不允许我启动和停止服务器,如果 Arquillian 测试已经下载了一个 AS 实例,那么要求本地安装似乎是多余的(是的,我可以在本地实例上运行测试,但考虑到例如持续集成,我想要管理/控制整个环境)。
最终我决定再次尝试使用cargo插件。那里已经发生了许多变化,它不仅支持JBoss 7.x,还提供了一个所谓的工件安装程序,允许将应用服务器作为管理Maven依赖项下载。相关的pom.xml设置如下
... <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.2.1</version> <configuration> <container> <containerId>jboss71x</containerId> <artifactInstaller> <groupId>org.jboss.as</groupId> <artifactId>jboss-as-dist</artifactId> <version>7.1.1.Final</version> </artifactInstaller> </container> </configuration> <executions> <execution> <id>install-container</id> <phase>initialize</phase> <goals> <goal>install</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.3</version> <executions> <execution> <id>copy-modules</id> <phase>initialize</phase> <goals> <goal>execute</goal> </goals> <configuration> <source> def toDir = new File(project.properties['jbossTargetDir'], 'modules') def fromDir = new File(project.basedir, '.openshift/config/modules') log.info('Copying OGM module from ' + fromDir + ' to ' + toDir) ant.copy(todir: toDir) { fileset(dir: fromDir) { exclude(name: 'README') } } </source> </configuration> </execution> </executions> </plugin> ...|
我在initialize阶段使用cargo:install来将应用服务器安装到目标目录。这样,我可以在测试执行之前和/或通过简单的方式启动应用程序之前安装自定义模块(通过gmaven插件)。
$ mvn package cargo:run
酷吧?
所有代码都可以在GitHub的ogm-kitchensink上找到。关于主要Maven目标的更多信息,请参阅README。
享受吧,Hardy