http://capedwarf.org/CapeDwarf News2015-07-27T13:31:16+00:00http://capedwarf.org/news/2015/07/27/FinalFinally/Finally 2.0.0.Final version / release2015-07-27T13:31:16+00:002015-07-27T12:04:00+01:00Ales Justin
With no reported major issues with our CR releases, I finally tagged and released 2.0.0.Final.
Download it here:
http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.Final.zip
And the notes:
https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326875
Feedback welcome as always!
...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>With no reported major issues with our CR releases, I finally tagged and released 2.0.0.Final.</p>
</div>
<div class="paragraph">
<p>Download it here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.Final.zip">http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.Final.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the notes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326875">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326875</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2015/03/17/FinegrainedAuth/Fine-grained authentication configuration and fixed security constraint handling2015-07-27T13:31:16+00:002015-03-17T12:04:00+01:00Ales Justin
There was a small bug on how we handled security constraints — it should re-direct you to login page in case of non-authorized access.
This is now fixed. While we also added fine-grained configuration of authorization mechanism, and moved default to GAE/CapeDwarf mechanism.
I’ve also created new Docker image, with this release, under "alesj/capedwarf".
https://github.com/capedwarf/capedwarf-testsuite/blob/master/docker/Dockerfile
Download latest release:
http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR6.zip
And the notes:
https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326489
Feedback welcome as always!
...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>There was a small bug on how we handled security constraints — it should re-direct you to login page in case of non-authorized access.
This is now fixed. While we also added fine-grained configuration of authorization mechanism, and moved default to GAE/CapeDwarf mechanism.</p>
</div>
<div class="paragraph">
<p>I’ve also created new Docker image, with this release, under "alesj/capedwarf".</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/capedwarf/capedwarf-testsuite/blob/master/docker/Dockerfile">https://github.com/capedwarf/capedwarf-testsuite/blob/master/docker/Dockerfile</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Download latest release:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR6.zip">http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR6.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the notes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326489">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12326489</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2015/01/06/ManagedVMs/Managed VMs, warmup request, HTTP session handling and WildFly 8.2.0.Final2015-07-27T13:31:16+00:002015-01-06T12:04:00+01:00Ales Justin
It’s been a while since our last release. But that doesn’t mean we haven’t been busy.
With Google App Engine’s ManagedVMs getting more and more traction, we figured out we needed to support that too.
And voila, a new CapeDwarf Managed project was created.
But in order to not duplicate the code between Managed and Blue, some refactoring was required, hence the delay.
And along the way - while implementing Managed - we saw we were also missing a few things in Blue as well: warmup request and GAE-like HTTP session handling.
Also, we moved to WildFly 8.2.0.Final.
To cut the long story short, here is...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>It’s been a while since our last release. But that doesn’t mean we haven’t been busy.
With Google App Engine’s ManagedVMs getting more and more traction, we figured out we needed to support that too.
And voila, a new <a href="https://github.com/capedwarf/capedwarf-managed">CapeDwarf Managed</a> project was created.</p>
</div>
<div class="paragraph">
<p>But in order to not duplicate the code between Managed and Blue, some refactoring was required, hence the delay.
And along the way - while implementing Managed - we saw we were also missing a few things in Blue as well: warmup request and GAE-like HTTP session handling.</p>
</div>
<div class="paragraph">
<p>Also, we moved to WildFly 8.2.0.Final.</p>
</div>
<div class="paragraph">
<p>To cut the long story short, here is the latest Blue download:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR5.zip">http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR5.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the release notes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12325795">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12325795</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>More about Managed in the future blog post — asap!</p>
</div>
<div class="paragraph">
<p>Feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2014/09/23/ConcurrentTransactions/Concurrent transactions, their tests and fixes2015-07-27T13:31:16+00:002014-09-23T12:04:00+01:00Ales Justin
While playing with some Endpoints GAE example app, I noticed our non-XG transactions weren’t following the concurrent threads limits — only one transaction per entity group allowed. This quickly shows how you easily miss things when you don’t have proper tests.
In our case setting this concurrency contention is not as easy as it sounds. But … luckily at JBoss we have a tool called Byteman, which is exactly what we’re looking for (and it even came from initially testing concurrency on transactions).
And, as I expected from Aslak, Arquillian already had Byteman support integrated. OK, to be honest, it did need some minor...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>While playing with some Endpoints GAE example app, I noticed our non-XG transactions weren’t following the concurrent threads limits — only one transaction per entity group allowed. This quickly shows how you easily miss things when you don’t have proper tests.</p>
</div>
<div class="paragraph">
<p>In our case setting this concurrency contention is not as easy as it sounds. But … luckily at JBoss we have a tool called Byteman, which is exactly what we’re looking for (and it even came from initially testing concurrency on transactions).</p>
</div>
<div class="paragraph">
<p>And, as I expected from Aslak, Arquillian already had Byteman support integrated. OK, to be honest, it did need some minor changes to make it work as expected. :-)</p>
</div>
<div class="paragraph">
<p>Here is the latest download:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR4.zip">http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR4.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The release notes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12324925">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12324925</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the mentioned GAE TCK concurrent transactions tests:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/core/byteman/src/test/java/com/google/appengine/tck/byteman">https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/core/byteman/src/test/java/com/google/appengine/tck/byteman</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2014/08/05/NewCapeDwarf200CR3Release/New CapeDwarf 2.0.0.CR3, with few small tweaks2015-07-27T13:31:16+00:002014-08-05T12:04:00+01:00Ales Justin
With World Cup and summer vacation finally behind us, it’s time to do a new CapeDwarf release.
This time it only includes a few minor fixes, and of course a GAE version update.
Download is here:
http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR3.zip
And the few release notes:
https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12325061
Give it a spin, and feedback welcome as always!
...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>With World Cup and summer vacation finally behind us, it’s time to do a new CapeDwarf release.
This time it only includes a few minor fixes, and of course a GAE version update.</p>
</div>
<div class="paragraph">
<p>Download is here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR3.zip">http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR3.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the few release notes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12325061">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12325061</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Give it a spin, and feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2014/05/26/CapeDwarfGetsCronSupport/CapeDwarf (finally) gets cron support!2015-07-27T13:31:16+00:002014-05-26T13:04:00+01:00Ales Justin
I’m actually surprised on how I was able to miss the cron support for so long, or how come none of the users complained. :-)
It finally caught my attention when I needed it in one of my sandbox apps, that I realised that we have completely forgotten about it — though it’s been around forever.
When implementing something like cron support in Java, it’s probably the only logical choice to use Quartz. And that’s what we’ve done.
Of course there are some tricks to consider, specially around clustering support and GAE cron’s natural way of describing trigger times. But that’s where JGroups and existing...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>I’m actually surprised on how I was able to miss the cron support for so long, or how come none of the users complained. :-)</p>
</div>
<div class="paragraph">
<p>It finally caught my attention when I needed it in one of my sandbox apps, that I realised that we have completely forgotten about it — though it’s been around forever.</p>
</div>
<div class="paragraph">
<p>When implementing something like cron support in Java, it’s probably the only logical choice to use Quartz. And that’s what we’ve done.
Of course there are some tricks to consider, specially around clustering support and GAE cron’s natural way of describing trigger times. But that’s where JGroups and existing GAE Tools come in handy.</p>
</div>
<div class="paragraph">
<p>So, here is the latest CapeDwarf 2.0.0.CR2 distribution:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://download.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR2.zip">CapeDwarf_WildFly_2.0.0.CR2.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And the usual issues report:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12324465">2.0.0.CR2 release notes</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Give it a spin and any feedback welcome as always!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2014/03/26/YouveGotMailAndANewSite/You’ve got mail and a new site!2015-07-27T13:31:16+00:002014-03-26T13:04:00+01:00Ales Justin
As the title - taken from a cheesy romantic movie :-) - says, we now finally have proper mail API support on CapeDwarf.
We also moved our capedwarf.org site to Awestruct and Asciidoctor, plus adding a bunch of content to it — faq, docs, blogs, …
CapeDwarf now uses WildFly 8.0.0.Final underneath, which fixed some of the deployment’ concurrency handling issues.
The full release notes can be found here:
2.0.0.CR1 release notes
Download the full .zip distribution:
CapeDwarf_WildFly_2.0.0.CR1.zip
Feedback welcome!
...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>As the title - taken from a cheesy romantic movie :-) - says, we now finally have proper mail API support on CapeDwarf.</p>
</div>
<div class="paragraph">
<p>We also moved our <a href="http://www.capedwarf.org">capedwarf.org</a> site to Awestruct and Asciidoctor, plus adding a bunch of content to it — faq, docs, blogs, …</p>
</div>
<div class="paragraph">
<p>CapeDwarf now uses WildFly 8.0.0.Final underneath, which fixed some of the deployment’ concurrency handling issues.</p>
</div>
<div class="paragraph">
<p>The full release notes can be found here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12318737">2.0.0.CR1 release notes</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Download the full .zip distribution:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.CR1.zip">CapeDwarf_WildFly_2.0.0.CR1.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Feedback welcome!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/12/27/FinallyNewCapeDwarfReleaseThisTimeOnWildFly/Finally new CapeDwarf release, this time on WildFly!2015-07-27T13:31:16+00:002013-12-27T13:04:00+01:00Ales Justin
Yes, we finally moved the CapeDwarf runtime over to new WildFly codebase! It took time to get all the components aligned, all our provided patches merged and all issues resolved. But it was worth it!
Apart from new runtime with WildFly, we also switched to new Infinispan version 6.x and new UnderTow web server. With new Infinispan version 6.x you get much faster file store impl, while the move to UnderTow allowed us to implement Channel API on top of WebSockets.
The full release notes can be found here:
2.0.0.Beta1 release notes
Download the full .zip distribution:
CapeDwarf_WildFly_2.0.0.Beta1.zip
To name a few new features or resolved...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Yes, we finally moved the CapeDwarf runtime over to new WildFly codebase! It took time to get all the components aligned, all our provided patches merged and all issues resolved. But it was worth it!</p>
</div>
<div class="paragraph">
<p>Apart from new runtime with WildFly, we also switched to new Infinispan version 6.x and new UnderTow web server. With new Infinispan version 6.x you get much faster file store impl, while the move to UnderTow allowed us to implement Channel API on top of WebSockets.</p>
</div>
<div class="paragraph">
<p>The full release notes can be found here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12322159">2.0.0.Beta1 release notes</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Download the full .zip distribution:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_WildFly_2.0.0.Beta1.zip">CapeDwarf_WildFly_2.0.0.Beta1.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>To name a few new features or resolved issues - we finally have initial OAuth impl, we’re now using original Endpoints resources from GAE for our Endpoints support, <a href="https://github.com/luksa">Marko</a> found and fixed a nasty namespace bug in our Datastore, and we fixed a bunch of small issues exposed by the <a href="https://github.com/GoogleCloudPlatform/appengine-tck">GAE TCK</a>.</p>
</div>
<div class="paragraph">
<p>The old codebase based on JBossAS7 can be found under 1.0 branch in our GitHub repos.</p>
</div>
<div class="paragraph">
<p>Give this new release a spin. Feedback is welcome as always!</p>
</div>
<div class="paragraph">
<p>Happy holidays!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/09/11/ModulesEndpointsSQLGCSNewChannelImplAkaNewCapeDwarf100Beta6/Modules, Endpoints, SQL, GCS, new Channel impl, … aka new CapeDwarf 1.0.0.Beta62015-07-27T13:31:16+00:002013-09-11T15:44:00+01:00Ales Justin
As you can see from the title, and from a bit late release, we’ve again been very busy.
CapeDwarf 1.0.0.Beta6
Release Notes
Let’s just go over all new features.
Modules
Modules spec
There is a bit of limitation on our end here, as there is no (easy / nice) dynamic way (to my knowledge) to scale up / down virtual servers (at runtime during deployment phase) in JBossWeb that comes with JBossAS7 (which is what we use). In order to use Modules with CapeDwarf, you must use “standalone-capedwarf-modules.xml” configuration when you startup CapeDwarf AS instance.
You must also configure the number of virtual servers to match your...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>As you can see from the title, and from a bit late release, we’ve again been very busy.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta6.zip">CapeDwarf 1.0.0.Beta6</a></p>
</li>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12318736">Release Notes</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Let’s just go over all new features.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="modules">
<a class="anchor" href="#modules"></a>Modules</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://developers.google.com/appengine/docs/java/modules/">Modules spec</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>There is a bit of limitation on our end here, as there is no (easy / nice) dynamic way (to my knowledge) to scale up / down virtual servers (at runtime during deployment phase) in JBossWeb that comes with JBossAS7 (which is what we use). In order to use Modules with CapeDwarf, you must use “standalone-capedwarf-modules.xml” configuration when you startup CapeDwarf AS instance.</p>
</div>
<div class="paragraph">
<p>You must also configure the number of virtual servers to match your application’s modularization. See web subsystem configuration in “standalone-capedwarf-modules.xml” for more details.</p>
</div>
<div class="paragraph">
<p>(or simply ping me for any Modules questions - via forums, email, Twitter or Freenode IRC #capedwarf)</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/core/modules">Modules TCK tests</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="endpoints">
<a class="anchor" href="#endpoints"></a>Endpoints</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="https://developers.google.com/appengine/docs/java/endpoints/">Endpoints spec</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>We’ve managed to map GAE’s Endpoints annotations to JAXRS/RestEasy annotations, and
we also support custom serialization.</p>
</div>
<div class="paragraph">
<p>In our case / implementation we only need .api files as markers, and not to read any information from it — you can have a single .api dummy file if you like.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/core/endpoints">Endpoints TCK tests</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="sql">
<a class="anchor" href="#sql"></a>SQL</h2>
<div class="sectionbody">
<div class="paragraph">
<p>SQL was of course supported out-of-the-box for us.
We we just had to hack GAE’s Driver class to connect against selected DataSource:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/capedwarf/capedwarf-blue/blob/master/sql/src/main/java/org/jboss/capedwarf/sql/JndiDataSource.java">DataSource lookup</a></p>
</li>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/core/sql">SQL TCK tests</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="gcs">
<a class="anchor" href="#gcs"></a>GCS</h2>
<div class="sectionbody">
<div class="paragraph">
<p>FileService is being deprecated in favor of Google Cloud Storage (GCS) API. At the moment dev / local implementation of the GCS client library still goes against FileService implementation, so supporting this was easy, as we already fully implemented FileService API.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/ext/gcs-client">GCS TCK tests</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="channel">
<a class="anchor" href="#channel"></a>Channel</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We re-implemented Channel API.</p>
</div>
<div class="paragraph">
<p>Big thanks to <a href="https://github.com/chrisritter">@chrisritter</a> for kicking our butt to do this, and contributing a simple but cool chat app for testing purposes: <a href="https://github.com/chrisritter/simplechat">SimpleChat</a>.</p>
</div>
<div class="paragraph">
<p>Also thanks to <a href="https://github.com/kpiwko">Karel</a> for stepping up and fixing Arquillian Drone so we can finally automagically test this.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck/tree/master/tests/appengine-tck-channel">Channel TCK tests</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="javaone-2013">
<a class="anchor" href="#javaone-2013"></a>JavaOne 2013</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Don’t miss my presentation at JavaOne — Tuesday 24th September at 11:30am, Parc55.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2117">Implementing Your Own Google App Engine</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or my previously mentioned DC JBUG talk: <a href="http://www.meetup.com/DC-JBug/events/128068042/">http://www.meetup.com/DC-JBug/events/128068042/</a></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="blogs">
<a class="anchor" href="#blogs"></a>Blogs</h2>
<div class="sectionbody">
<div class="paragraph">
<p><a href="https://twitter.com/myfear">Markus Eisele</a> posted a nice overview of CapeDwarf:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://blog.eisele.net/2013/09/capedwarf-google-app-engine-on-java-ee.html">CapeDwarf - Google App Engine on Java EE</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Anyway, enjoy the new release! Feedback welcome as always.</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/07/10/CapeDwarfIsBackFromVacationAndConferencesNew100Beta5/CapeDwarf is back from vacation and conferences — new 1.0.0.Beta5!2015-07-27T13:31:16+00:002013-07-10T16:33:00+01:00Ales Justin
After successful Google I/O and Red Hat Summit presentations, and some vacation, it’s finally time to do a new release.
CapeDwarf 1.0.0.Beta5
Regarding the release issues, they’ve been mostly driven by TCK failures,
hence I’ll let the release notes speak for themselves.
Release notes
Note: for the Windows users, an issue I just discovered after releasing the .zip, and it’s unfortunately not as trivial as it looks like, hence I didn’t want to stale the release even more.
So the fix for this is coming in the next release.
capedwarf-bytecode.bat is broken
The simple workaround is to run the full AS start command: "standalone.bat -c standalone-capedwarf.xml".
(and a bit...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>After successful Google I/O and Red Hat Summit presentations, and some vacation, it’s finally time to do a new release.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta5.zip">CapeDwarf 1.0.0.Beta5</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Regarding the release issues, they’ve been mostly driven by TCK failures,
hence I’ll let the release notes speak for themselves.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12321677">Release notes</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Note: for the Windows users, an issue I just discovered after releasing the .zip, and it’s unfortunately not as trivial as it looks like, hence I didn’t want to stale the release even more.
So the fix for this is coming in the next release.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/browse/CAPEDWARF-186">capedwarf-bytecode.bat is broken</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The simple workaround is to run the full AS start command: "standalone.bat -c standalone-capedwarf.xml".
(and a bit more work if you wanna use GAE API jar as a module)</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="news-n-stuff">
<a class="anchor" href="#news-n-stuff"></a>News’n'stuff</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Apart from classic coding, it’s been busy three months with a lot of news and new things around CapeDwarf project.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="gae-tck">
<a class="anchor" href="#gae-tck"></a>GAE TCK</h2>
<div class="sectionbody">
<div class="paragraph">
<p>For those who missed my tweets about GAE TCK, here is the link again</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/GoogleCloudPlatform/appengine-tck">GAE TCK</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="blogs-articles">
<a class="anchor" href="#blogs-articles"></a>Blogs, articles</h2>
<div class="sectionbody">
<div class="paragraph">
<p>It looks like we’re getting more and more traction on the blog / article scene</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://googlecloudplatform.blogspot.com/2013/06/google-app-engine-running-in-private-cloud-with-capedrawf.html">Ludo’s blog, Google Cloud Platform</a></p>
</li>
<li>
<p><a href="http://www.h-online.com/open/news/item/Google-and-Red-Hat-bring-App-Engine-to-JBoss-1894797.html">The H Open</a></p>
</li>
<li>
<p><a href="http://www.informationweek.com/cloud-computing/platform/google-enhances-cloud-platform-to-ease-l/240157220">InformationWeek</a></p>
</li>
<li>
<p><a href="http://blogs.gartner.com/yefim_natis/2013/07/05/google-and-red-hat-an-intriguing-partnership/">Yefim Natis, Gartner</a></p>
</li>
<li>
<p><a href="https://plus.google.com/110401818717224273095/posts/Uoj3pmhbCkH">Peter Magnusson, Google</a></p>
</li>
<li>
<p><a href="http://adtmag.com/articles/2013/07/09/capedwarf-partnership.aspx?m=2">ADT</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="conferences-talks">
<a class="anchor" href="#conferences-talks"></a>Conferences, talks</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Since JavaOne notifications are out, I can happily say that my <em>Implementing your own Google App Engine</em> talk got accepted.
And I’ll prolong my US stay with <a href="http://www.meetup.com/DC-JBug/events/128068042/">my visit to DC JBUG</a>. Welcome to drop by!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/04/22/CapeDwarf100Beta4IsOut/CapeDwarf 1.0.0.Beta4 is out!2015-07-27T13:31:16+00:002013-04-22T12:41:00+01:00Ales Justin
Continuing with our monthly releases, we’re happy to announce new 1.0.0.Beta4 release.
http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta4.zip
Quick rundown of release notes
all logging data was moved into separate cache,
enabled metadata handling,
default cache is now “SYNC” by default (which made MapReduce tests very happy :-)),
we put back legacy factory transformers - which means older GAE API versions now again work to some extent,
Velocity is jarjar-ed - so it doesn’t conflict with your version anymore,
we support static files handling - you don’t hit your filters and listeners anymore,
datastore queries now run sync as well, cluster wide - thanks Sanne, Dan and Infinispan co.,
and a bunch of other small...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Continuing with our monthly releases, we’re happy to announce new 1.0.0.Beta4 release.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta4.zip">http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta4.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12321455">Quick rundown of release notes</a></p>
</div>
<div class="ulist">
<ul>
<li>
<p>all logging data was moved into separate cache,</p>
</li>
<li>
<p>enabled metadata handling,</p>
</li>
<li>
<p>default cache is now “SYNC” by default (which made <a href="https://code.google.com/p/appengine-mapreduce/">MapReduce</a> tests very happy :-)),</p>
</li>
<li>
<p>we put back legacy factory transformers - which means older GAE API versions now again work to some extent,</p>
</li>
<li>
<p>Velocity is jarjar-ed - so it doesn’t conflict with your version anymore,</p>
</li>
<li>
<p>we support static files handling - you don’t hit your filters and listeners anymore,</p>
</li>
<li>
<p>datastore queries now run sync as well, cluster wide - thanks <a href="https://github.com/Sanne">Sanne</a>, <a href="https://github.com/danberindei">Dan</a> and <a href="http://infinispan.org">Infinispan co.</a>,</p>
</li>
<li>
<p>and a bunch of other small tweaks.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><a href="https://developers.google.com/events/io/">Google I/O 2013</a></p>
</div>
<div class="paragraph">
<p>CapeDwarf team will be at this year’s Google I/O’ Sandbox!
Make sure you drop by for a chat, demo and a nice T-shirt.</p>
</div>
<div class="paragraph">
<p>Also be careful you don’t miss the exciting surprise announcement!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/03/12/BusyBusyBusyNew100Beta3CapeDwarfReleaseFinallyOut/Busy busy busy - new 1.0.0.Beta3 CapeDwarf release finally out!2015-07-27T13:31:16+00:002013-03-12T16:23:00+01:00Ales Justin
Download it here:
http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta3.zip
As you can see from the JIRA release notes, it’s been super busy 2 months.
https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12320952
Another new sub-project: CapeDwarf Shared.
https://github.com/capedwarf/capedwarf-shared
It’s where we keep the shared code between our GAE API implementation (Blue) and JBossAS integration.
There has been a lot of detail polishing on Blobstore, Logging and TaskQueue.
And we also added BlackList / WhiteList support, getting even closer to GAE behavior this way.
Also big thanks to Bart and Wouter for the patches and feedback.
And yes, we finally simplified how you start the whole thing - thanks Lazo.
./capedwarf.sh or capedwarf.bat (in JBOSS\_HOME/bin/) will do
As always, feedback welcome!
...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Download it here:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta3.zip">http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta3.zip</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>As you can see from the JIRA release notes, it’s been super busy 2 months.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12320952">https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12320952</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Another new sub-project: CapeDwarf Shared.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/capedwarf/capedwarf-shared">https://github.com/capedwarf/capedwarf-shared</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>It’s where we keep the shared code between our GAE API implementation (Blue) and JBossAS integration.</p>
</div>
<div class="paragraph">
<p>There has been a lot of detail polishing on Blobstore, Logging and TaskQueue.
And we also added BlackList / WhiteList support, getting even closer to GAE behavior this way.</p>
</div>
<div class="paragraph">
<p>Also big thanks to <a href="https://github.com/bartv">Bart</a> and <a href="http://distrinet.cs.kuleuven.be/people/showMember.do?memberID=u0059687">Wouter</a> for the patches and feedback.</p>
</div>
<div class="paragraph">
<p>And yes, we finally simplified how you start the whole thing - thanks <a href="https://github.com/matejonnet">Lazo</a>.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>./capedwarf.sh or capedwarf.bat (in JBOSS\_HOME/bin/) will do</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>As always, feedback welcome!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2013/01/14/CapeDwarfOptimizationsAndBugFixesAka100Beta2/CapeDwarf optimizations and bug fixes aka 1.0.0.Beta22015-07-27T13:31:16+00:002013-01-14T12:04:00+01:00Ales Justin
With first CapeDwarf release out of the way, it’s now time to address initial user issues. Since setting up CapeDwarf environment has become so simple — just unzip the distribution, and CapeDwarf already running on OpenShift, we got a few useful feedbacks; keep ‘em coming!
Quick look at profiling showed we’re too eager on our logging. GAE has a LogService, hence we need to tap into JBoss Application Server logging in order to properly catch all application’ logs. But if you do this too eagerly, you might end-up catching all logs — which is exactly what happened here. Well, this is now all fixed, resulting...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>With <a href="http://in.relation.to/Bloggers/FirstCapeDwarfRelease">first CapeDwarf release out of the way</a>, it’s now time to address initial user issues. Since setting up CapeDwarf environment has become so simple — just unzip the distribution, and CapeDwarf already running on <a href="https://openshift.redhat.com/community/blogs/google-app-engine-on-your-own-paas">OpenShift</a>, we got a few useful feedbacks; keep ‘em coming!</p>
</div>
<div class="paragraph">
<p>Quick look at profiling showed we’re too eager on our logging. GAE has a LogService, hence we need to tap into JBoss Application Server logging in order to properly catch all application’ logs. But if you do this too eagerly, you might end-up catching all logs — which is exactly what happened here. Well, this is now all fixed, resulting in huge performance boost on GAE logging now.</p>
</div>
<div class="paragraph">
<p>As expected, another very useful source of information are actual user applications. Either users themselves tried to deploy the app and failed or we actually got our hands on their .war binaries. This helped flush out some OAuth, JDO, threading, backends and web components initialization bugs.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="api-versioning">
<a class="anchor" href="#api-versioning"></a>API Versioning</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Something I forgot to mention in previous CapeDwarf blog, and it’s quite important, is that at the moment, we only support latest version of GAE API (and/or any that is 100% compatible with it; at the time of writing this blog, this is GAE 1.7.4).</p>
</div>
<div class="paragraph">
<p>So, if you haven’t yet updated to the latest GAE API version, you might run into some issues. In order to flush them out easily, I created a new CapeDwarf sub-project over the holidays.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/capedwarf/capedwarf-versions">CapeDwarf Versions</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>As you can see, this allows for Blue tests to run against selected GAE API version.</p>
</div>
<div class="paragraph">
<p>I also added initial support for API versioning to CapeDwarf AS integration, <em>but</em> the actual support is not there (yet) — due to how we intend to support this. Each non-latest GAE API version requires a new CapeDwarf Blue branch, from which you get the compatible binaries to distribute them with CapeDwarf distribution. Then you simply place these compatible binaries into JBoss Application Server’ modules/ dir - under org/jboss/capedwarf/\<version\> directory. But this is more of a task for contributors, as we encourage people to update their GAE API jars.</p>
</div>
<div class="paragraph">
<p>Also a slight update on MapReduce tests in cluster. They work, but you have to make CapeDwarf’ default cache execute operations SYNC, instead of ASYNC. We have a workaround for this in place now.</p>
</div>
<div class="paragraph">
<p>To cut the long story short, here is the new 1.0.0.Beta2 release:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta2.zip">CapeDwarf 1.0.0.Beta2</a></p>
</li>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12318738">JIRA release ref</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Feedback welcome as always!!</p>
</div>
</div>
</div>
http://capedwarf.org/news/2012/12/04/FirstCapeDwarfRelease/First CapeDwarf Release!2015-07-27T13:31:16+00:002012-12-04T15:20:00+01:00Ales Justin
After a year in the making, I’m finally able to announce first CapeDwarf release!
http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta1.zip
JIRA release ref
But first, what exactly is CapeDwarf?
As our jboss.org page says, it’s a Google App Engine (GAE) API implemented with JBoss and other open source libraries. Making it possible to run unmodified GAE applications directly in JBoss application server.
The project is split into few sub-projects:
CapeDwarf Blue - heart of the project aka actual GAE API implementation (https://github.com/capedwarf/capedwarf-blue)
CapeDwarf JBoss-AS - JBossAS7 extension / subsystem (https://github.com/capedwarf/capedwarf-jboss-as)
CapeDwarf Testsuite - testing environment (https://github.com/capedwarf/capedwarf-testsuite)
All of the sub-projects are “Mavenized”, and at the moment you also need latest JBossAS upstream binaries in...
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>After a year in the making, I’m finally able to announce first CapeDwarf release!</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta1.zip">http://downloads.jboss.org/capedwarf/CapeDwarf_AS7_1.0.0.Beta1.zip</a></p>
</li>
<li>
<p><a href="https://issues.jboss.org/secure/ReleaseNote.jspa?projectId=12311321&version=12318735">JIRA release ref</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="but-first-what-exactly-is-capedwarf">
<a class="anchor" href="#but-first-what-exactly-is-capedwarf"></a>But first, what exactly is CapeDwarf?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>As <a href="http://www.jboss.org/capedwarf">our jboss.org page</a> says, it’s a Google App Engine (GAE) API implemented with JBoss and other open source libraries. Making it possible to run <em>unmodified</em> GAE applications directly in JBoss application server.</p>
</div>
<div class="paragraph">
<p>The project is split into few sub-projects:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>CapeDwarf Blue - heart of the project aka actual GAE API implementation (<a href="https://github.com/capedwarf/capedwarf-blue">https://github.com/capedwarf/capedwarf-blue</a>)</p>
</li>
<li>
<p>CapeDwarf JBoss-AS - JBossAS7 extension / subsystem (<a href="https://github.com/capedwarf/capedwarf-jboss-as">https://github.com/capedwarf/capedwarf-jboss-as</a>)</p>
</li>
<li>
<p>CapeDwarf Testsuite - testing environment (<a href="https://github.com/capedwarf/capedwarf-testsuite">https://github.com/capedwarf/capedwarf-testsuite</a>)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>All of the sub-projects are “Mavenized”, and at the moment you also need latest JBossAS upstream binaries in your local Maven repository.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>JBossAS - <a href="https://github.com/jbossas/jboss-as/">https://github.com/jbossas/jboss-as/</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="how-exactly-do-i-try-this">
<a class="anchor" href="#how-exactly-do-i-try-this"></a>How exactly do I try this?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Download <a href="http://www.jboss.org/capedwarf/downloads">CapeDwarf zip distribution</a> and unpack it to your prefered location - JBOSS\_HOME. It contains current JBossAS7 upstream master snapshot binaries, plus CapeDwarf JBossAS7 subsystem and a few extra modules (aka libs or jars).</p>
</div>
<div class="paragraph">
<p>Now simply go to JBOSS\_HOME/bin/ directory and run the whole thing.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>on OSX ./standalone.sh -c standalone-capedwarf.xml -b your\_ip</p>
</li>
<li>
<p>on Linux ./standalone.sh -c standalone-capedwarf.xml</p>
</li>
<li>
<p>on Windows standalone.bat -c standalone-capedwarf.xml</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Now just drop the app to JBOSS\_HOME/standalone/deployment/ dir and you should already see the app being deployed.
Or you could use new JBossAS7 Admin Console or CLI to deploy the app - see JBossAS7 docs on how to do this.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay"><code>12:49:21,651 INFO [org.jboss.as.capedwarf.deployment.CapedwarfInitializationProcessor] (MSC service thread 1-12) Found GAE / CapeDwarf deployment: deployment "capedwarf-tests.war”</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="in-what-flavors-does-it-come">
<a class="anchor" href="#in-what-flavors-does-it-come"></a>In what “flavors” does it come?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>As being modular is the way to go these days, we also provide a way to run GAE apps in fully modular fashion. What does this mean? It means that instead of packing all required GAE jars / libs, you can simply not include them in your app - making the app distribution smaller this way. It is CapeDwarf that will recognize the app being a GAE app - via appengine-web.xml descriptor file, and add appropriate modules / jars to you app’ classpath. But this comes with a small gotcha.</p>
</div>
<div class="paragraph">
<p>As we need to do some bytecode enhancement to GAE API jar in order to override some services instantiation behavior, while on the other hand you’re not allowed to ship with modified binaries as per license, you will need to run a script to do this bytecode enhancement before running the application server for the first time. The script is located in usual JBossAS bin/, capedwarf-bytecode.sh or capedwarf-bytecode.bin.</p>
</div>
<div class="paragraph">
<p>Apps that bundle all GAE libs - which is the usual GAE way, do not need to run this script, as the bytecode enhancement will take place during runtime.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="how-exactly-does-capedwarf-work">
<a class="anchor" href="#how-exactly-does-capedwarf-work"></a>How exactly does CapeDwarf work?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Without going too much into details, let me just mention few main components and how they are roughly implemented.</p>
</div>
<div class="paragraph">
<p>For most of the stuff, we take JBoss’ <a href="http://www.jboss.org/infinispan">Infinispan</a> and <a href="http://www.hibernate.org">Hibernate Search</a> projects to their limits. We use them for datastore, memcache, search, prospective search, filestore and blobstore. JMS with <a href="http://www.jboss.org/hornetq">HornetQ</a> is used to implement taskqueue.</p>
</div>
<div class="paragraph">
<p>Where Infinispan is not just plain cache implementation, but a whole data grid with good distributed task framework. Combine that with Hibernate Search and its nice Lucene extensions, you get a powerful clusterable environment to tackle complex problems that GAE API tries to hide from the user, but of course solve it underneath.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="what-about-admin-console">
<a class="anchor" href="#what-about-admin-console"></a>What about admin console?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Yes, we also support admin console for each app.
While we do lack features, we did try to add some useful functionality to this initial version.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="do-you-support-jpa-jdo">
<a class="anchor" href="#do-you-support-jpa-jdo"></a>Do you support JPA / JDO?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>JPA / JDO support is exactly the same as in any GAE app. We went an extra mile to support this, providing patches to <a href="http://www.datanucleus.org">DataNucleus</a> project, and taking special care of JPA / JDO deployments in our JBossAS7 CapeDwarf subsystem.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="does-gae-mapreduce-lib-run-on-capedwarf">
<a class="anchor" href="#does-gae-mapreduce-lib-run-on-capedwarf"></a>Does GAE MapReduce lib run on CapeDwarf?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>At the moment we have a working test for standalone runtime, where we still have some issues in clustered environment. Hint: the test exists, but fails, and CapeDwarf is open source, wink.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="do-you-test-all-of-this-and-how">
<a class="anchor" href="#do-you-test-all-of-this-and-how"></a>Do you test all of this? And how?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We most certainly do.</p>
</div>
<div class="paragraph">
<p>We take great pride in trying to test this as much as possible.
And there is a bunch of interesting things we do to make this happen, trying to squeeze <a href="http://www.arquillian.org">Arquillian</a> as much as possible.</p>
</div>
<div class="paragraph">
<p>You first need a custom JBossAS \+ CapeDwarf instance.
You can either enhance / modify an existing JBossAS instance with CapeDwarf-JBoss-AS sub-project or you can use the JBossAS instance from CapeDwarf-Testsuite sub-project.
Or of course use the custom distribution you just downloaded.</p>
</div>
<div class="paragraph">
<p>As expected, each sub-module (a sub-module per GAE API split) in CapeDwarf (Blue) has its own set of tests.</p>
</div>
<div class="paragraph">
<p>If you already have a running CapeDwarf-JBoss-AS instance, you can run these tests against it with “mvn clean install -Premote”. This uses JBossAS7 Arquillian Remote container to deploy the tests.</p>
</div>
<div class="paragraph">
<p>CapeDwarf-Testsuite sub-project builds its own JBossAS instance, and then uses JBossAS7 Managed Arquillian container to run the CapeDwarf Blue’ tests.</p>
</div>
<div class="paragraph">
<p>We have all of this setup as TeamCity builds (thanks JetBrains for the license!),
so drop me an email if you need to test some CapeDwarf pull-request you just hacked.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="scalable-or-running-testing-in-a-cluster">
<a class="anchor" href="#scalable-or-running-testing-in-a-cluster"></a>Scalable or running / testing in a cluster?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Whole CapeDwarf implementation tries to be scalable, as is of course GAE, avoiding a single point of contention. There are of course pieces of code where we know could use better approach. And this is definitely something we’ll do before Final release. Which is also where community help is highly appreciated; to either point out the issues or perhaps even contribute some better implementations to some bottleneck problems.</p>
</div>
<div class="paragraph">
<p>At the moment we have separate module in Blue which contains cluster tests. There is a README on how to exactly run those tests.</p>
</div>
<div class="paragraph">
<p>-Pcluster is the Maven profile to enable those tests.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="but-how-do-we-know-that-the-tests-itself-are-ok">
<a class="anchor" href="#but-how-do-we-know-that-the-tests-itself-are-ok"></a>But how do we know that the tests itself are OK?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Good question.</p>
</div>
<div class="paragraph">
<p>What we did here is develop an Arquillian container just for GAE.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/alesj/arquillian-container-gae">https://github.com/alesj/arquillian-container-gae</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>So what this means is that we can run the <em>same</em> set of tests against real GAE,
and all of the (non-impl detailed) tests should pass.
btw: we only have a handful of impl details tests, all others are impl agnostic</p>
</div>
<div class="paragraph">
<p>So “mvn clean install -Dappengine.sdk.root\=Your GAE SKD location” runs Blue’ tests against your local GAE.</p>
</div>
<div class="paragraph">
<p>We also support embedded and remote GAE Arquillian container, but these are to be used with care. Embedded - aka inJVM - is quite hacky, where remote deploys against AppSpot hence it’s a bit slow and less stable to use.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="what-about-some-existing-gae-tests">
<a class="anchor" href="#what-about-some-existing-gae-tests"></a>What about some existing GAE tests?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>There aren’t many existing public GAE tests out there.
The only ones we could find are the ones in GAE DataNucleus (DN) plugin project.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="http://code.google.com/p/datanucleus-appengine/">http://code.google.com/p/datanucleus-appengine/</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And there is a nice hack on how to make these tests run against CapeDwarf.</p>
</div>
<div class="paragraph">
<p>These GAE DN tests are pure Maven driven JUnit tests, where we need an Arquillian tests to run them against JBossAS instance. What to do? As we’re already bytecode hacking things, it’s obvious what can be done.</p>
</div>
<div class="paragraph">
<p>We add a custom Maven plugin which knows how to transform classes just after they are compiled:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/alesj/maven-transformer-plugin">https://github.com/alesj/maven-transformer-plugin</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>And it turns a plain JUnit test into an Arquillian GAE DN test:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/alesj/arquillian-transformer/blob/master/src/main/java/org/jboss/maven/arquillian/transformer/AppEngineDataNucleusTransformer.java">https://github.com/alesj/arquillian-transformer/blob/master/src/main/java/org/jboss/maven/arquillian/transformer/AppEngineDataNucleusTransformer.java</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>This now makes GAE DN tests run against CapeDwarf instead of default GAE API impl.</p>
</div>
<div class="paragraph">
<p>btw: we pass all of the non-impl detailed GAE DN tests</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="openshift">
<a class="anchor" href="#openshift"></a>OpenShift?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A custom CapeDwarf OpenShift cartridge is in the making as we speak, so you should be able to develop GAE apps against OpenShift and CapeDwarf in no time.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wrap-up">
<a class="anchor" href="#wrap-up"></a>Wrap-up</h2>
<div class="sectionbody">
<div class="paragraph">
<p>CapeDwarf JIRA:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://issues.jboss.org/browse/CAPEDWARF">https://issues.jboss.org/browse/CAPEDWARF</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>CapeDwarf User forum:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://community.jboss.org/en/capedwarf">https://community.jboss.org/en/capedwarf</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>CapeDwarf IRC:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>#capedwarf on Freenode</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Or shoot me an email directly.</p>
</div>
<div class="paragraph">
<p>Enjoy using CapeDwarf as we enjoy developing it, and do let us know any issues or feedback you might have.</p>
</div>
</div>
</div>