第一版 CapeDwarf 发布!

发布者:    |      

经过一年的开发,我终于可以宣布第一版 CapeDwarf 发布了!

但首先,CapeDwarf 究竟是什么?:-)

正如我们的 jboss.org 页面所说,CapeDwarf 是一个使用 JBoss 和其他开源库实现的 Google AppEngine (GAE) API。它使得 GAE 应用程序可以在 JBoss 应用服务器上直接运行,无需修改。

该项目分为几个子项目

所有子项目都是“Maven化”的,目前您还需要在本地 Maven 仓库中拥有最新的 JBossAS 上游二进制文件。

我该如何尝试它?

下载 CapeDwarf 压缩包发行版 并解压缩到您首选的位置 - JBOSS_HOME。它包含当前的 JBossAS7 上游 master 快照二进制文件,以及 CapeDwarf JBossAS7 子系统和一些额外的模块(即库或 jar)。

现在只需进入 JBOSS_HOME/bin/ 目录并运行整个程序。

  • 在 OSX 上 ./standalone.sh -c standalone-capedwarf.xml -b your_ip
  • 在 Linux 上 ./standalone.sh -c standalone-capedwarf.xml
  • 在 Windows 上 standalone.bat -c standalone-capedwarf.xml

现在只需将应用程序放入 JBOSS_HOME/standalone/deployment/ 目录,您应该已经看到应用程序正在部署。或者您也可以使用新的 JBossAS7 管理控制台或 CLI 部署应用程序 - 请参阅 JBossAS7 文档了解如何操作。

12:49:21,651 INFO  [org.jboss.as.capedwarf.deployment.CapedwarfInitializationProcessor] (MSC service thread 1-12) Found GAE / CapeDwarf deployment: deployment "capedwarf-tests.war”

它有哪些“风味”?

随着模块化成为当下趋势,我们也提供了一种以完全模块化方式运行GAE应用程序的方法。这意味着什么?这意味着您无需打包所有必需的GAE jar / libs,只需在您的应用程序中简单地不包括它们即可——从而使应用程序分发更小。CapeDwarf将识别应用程序为GAE应用程序——通过appengine-web.xml描述文件,并将适当的模块 / jars添加到应用程序的类路径中。但这也存在一个小问题。

由于我们需要对GAE API jar进行一些字节码增强以覆盖某些服务实例化行为,而另一方面,根据许可证规定不允许提供修改后的二进制文件,您需要运行一个脚本在首次运行应用程序服务器之前进行字节码增强。该脚本位于通常的JBossAS bin/目录中,名为capedwarf-bytecode.sh或capedwarf-bytecode.bin。

将所有GAE库捆绑在一起的应用程序——这是通常的GAE方式,不需要运行此脚本,因为字节码增强将在运行时进行。

CapeDwarf究竟是如何工作的?

不过多深入细节,我只想简要提一下几个主要组件及其大致实现方式。

对于大多数事情,我们将JBoss的InfinispanHibernate Search项目发挥到极致。我们使用它们进行数据存储、缓存、搜索、前瞻性搜索、文件存储和blob存储。使用HornetQ的JMS实现任务队列。

Infinispan不仅仅是一个简单的缓存实现,而是一个完整的分布式任务框架的数据网格。结合Hibernate Search及其令人愉快的Lucene扩展,您将获得一个强大的可伸缩环境来处理GAE API试图隐藏但当然在底层解决的用户复杂问题。

关于管理控制台呢?

是的,我们也为每个应用程序提供管理控制台。虽然我们缺少一些功能,但我们确实尝试在初始版本中添加一些有用的功能。

您支持JPA / JDO吗?

JPA / JDO支持与任何GAE应用程序完全相同。我们走得更远以支持这一点,为DataNucleus项目提供补丁,并在我们的JBossAS7 CapeDwarf子系统中对JPA / JDO部署给予特殊关注。

GAE MapReduce库在CapeDwarf上运行吗?

目前我们有一个针对独立运行时的有效测试,但在集群环境中我们还有一些问题。提示:测试是存在的,但失败了,CapeDwarf是开源的,眨眼。;-)

您测试所有这些内容吗?如何测试?

我们当然测试了。;-)

我们非常自豪地尝试尽可能多地测试这一点。为此,我们做了一些有趣的事情,尽可能多地使用Arquillian

首先,您需要一个定制的JBossAS + CapeDwarf实例。您可以通过CapeDwarf-JBoss-AS子项目增强/修改现有的JBossAS实例,或使用CapeDwarf-Testsuite子项目中的JBossAS实例。或者当然使用您刚刚下载的定制分发。:-)

正如预期的那样,CapeDwarf(蓝色)中的每个子模块(每个子模块对应于GAE API拆分)都有自己的测试集。

如果您已经有一个运行的CapeDwarf-JBoss-AS实例,您可以使用“mvn clean install -Premote”运行这些测试。这使用JBossAS7 Arquillian远程容器来部署测试。

CapeDwarf-Testsuite子项目构建自己的JBossAS实例,然后使用JBossAS7管理Arquillian容器来运行CapeDwarf Blue的测试。

我们将所有这些设置为TeamCity构建(感谢JetBrains提供的许可证!),如果您需要测试您刚刚修改的CapeDwarf pull-request,请给我发电子邮件。:-)

可伸缩性或集群中的运行/测试?

整个CapeDwarf实现都试图实现可扩展性,当然GAE也是如此,避免出现争用点。当然,有些代码我们知道可以采用更好的方法。这绝对是我们最终发布前要做的。这也是社区帮助非常受赞赏的地方;指出问题或甚至为一些瓶颈问题贡献一些更好的实现。

目前,在Blue中有一个独立的模块包含集群测试。有关如何运行这些测试的README文件。

-Pcluster是Maven配置文件,用于启用这些测试。

但我们如何知道测试本身是否正常呢?

好问题。

我们在这里开发了一个仅针对GAE的Arquillian容器。

这意味着我们可以运行与真实GAE相同的测试集,并且所有(非实现详细)测试都应通过。顺便说一句:我们只有少数几个实现详细测试,其余的都是实现无关的

因此,“mvn clean install -Dappengine.sdk.root=您的GAE SDK位置”将运行Blue的测试,针对您的本地GAE。

我们还支持嵌入式和远程GAE Arquillian容器,但使用时需谨慎。:-)嵌入式(即在JVM中)相当糟糕,远程部署针对AppSpot,因此使用起来比较慢且不太稳定。

关于一些现有的GAE测试呢?

目前现有的公开GAE测试并不多。我们所能找到的唯一一个是GAE DataNucleus(DN)插件项目中的那些。

而且有一个很好的方法可以在CapeDwarf上运行这些测试。:-)

这些GAE DN测试是纯Maven驱动的JUnit测试,我们需要一个Arquillian测试来在JBossAS实例上运行它们。怎么办?既然我们已经在字节码上进行了修改,显然可以这样做。

我们添加了一个自定义Maven插件,该插件知道如何在编译后如何转换类。

然后它将一个普通的JUnit测试转换为一个Arquillian GAE DN测试

这样,GAE DN测试现在可以在CapeDwarf上运行,而不是默认的GAE API实现。

顺便说一句:我们通过了所有的非实现详细GAE DN测试;-)

OpenShift?

目前正在制作自定义的CapeDwarf OpenShift卡,因此您应该能够迅速在OpenShift和CapeDwarf上开发GAE应用程序。:-)

总结

CapeDwarf JIRA

CapeDwarf 用户论坛

CapeDwarf IRC

  • #capedwarf on Freenode

或者直接给我发电子邮件。

像我们开发CapeDwarf一样享受使用CapeDwarf,并让我们知道您可能遇到的任何问题或反馈。


返回顶部