This Week in Grails (2012-27)

Tuesday, July 10th, 2012 10:18pm

The big news of this week was the Grails 2.1.0 release. No support yet for Groovy 2.0 – that will be available in Grails 2.2 – but this release greatly enhances the Maven support, adds the Grails Wrapper feature, and installs the cache plugin by default in new apps (note that the cache plugins all work with Grails 2.0 and higher).

I released some plugin updates this week: the app-info plugin (“Updates for the Grails App Info plugin” blog post here), the console plugin, and the spring-security-cas plugin. To coincide with the Grails 2.1 release, I also released the 1.0.0 versions of the cache, cache-ehcache, and cache-redis plugins.

Version 2.7.0 of the Groovy-Eclipse STS plugin was released this week. Check out the New and Noteworthy


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There were 4 new plugins released:

  • aws-sdk version 1.3.12. Use the Amazon Web Services infrastructure services
  • cargo-deploy version 0.1. Uses Cargo to deploy your application WAR file to an application server
  • jmesa version 2.0.4. Integrates the JMesa dynamic data table
  • mybatis version 0.0.1. Provides MyBatis support

and 17 updated plugins:

  • angularjs-resources version 1.0.1. Adds AngularJS resources to an application
  • app-info version 1.0.1. Provides a UI for inspecting and altering various aspects of the application’s configuration
  • avatar version 0.6.3. Provides a taglib for displaying avatars
  • birt-report version 4.2.0.0. Embeds reports created using the BIRT Report Engine into your application
  • build-test-data version 2.0.3. Enables the easy creation of test data by automatic inspection of constraints
  • cache version 1.0.0. Adds controller action, service method, and JSP fragment caching
  • cache-ehcache version 1.0.0. An Ehcache-based implementation of the Cache plugin
  • cache-redis version 1.0.0. A Redis-based implementation of the Cache plugin
  • console version 1.2. A web-based Groovy console for interactive runtime application management and debugging
  • dynamic-controller version 0.4. Supports controller mixins, where action closures are retrieved from various sources including existing controllers, files, database source, etc. Can also create full controllers dynamically
  • google-visualization version 0.5.3. Provides a taglib for the interactive charts of the Google Visualization API
  • gsp-resources version 0.4.1. Use the resources plugin to include static files like main.css.gsp, so dynamically built CSS and JS can be served as proper files instead of inlined in a non-cacheable GSP file
  • kickstart-with-bootstrap version 0.6.1b. Start your project with a good looking frontend, with adapted scaffolding templates for standard CRUD pages using Twitter Bootstrap
  • localizations version 1.4.4.2. Store i18n strings in a database
  • redis version 1.3.2. Provides integration with a Redis datastore
  • spring-security-cas version 1.0.3. Jasig CAS support for the Spring Security plugin
  • spring-security-saml version 1.0.0.M16. SAML 2.x support for the Spring Security Plugin

Interesting Tweets

Jobs



User groups and Conferences


Updates for the Grails App Info plugin

Thursday, July 05th, 2012 3:03pm

The app-info plugin wasn’t working in Grails 2.0+ because of an incompatibility between the Hibernate Tools jar and the version of Hibernate that Grails uses. So I split out the Hibernate-related functionality from the plugin into a to-be-released app-info-hibernate plugin, and once they release an updated version of Hibernate Tools I’ll be able to finish and release that. This also affected the db-reverse-engineer plugin but I was able to fix that with a hackish solution since that runs as a script (I fork a new process with a separate classpath) but that approach wasn’t feasible for this plugin.

The original blog post is still mostly valid but I wanted to point out some new features and make an updated test application available.

You install the plugin like any other, by including a dependency for it in BuildConfig.groovy, e.g.

plugins {
   ...

   compile ':app-info:1.0.1'
}

The plugin depends on the dynamic-controller plugin to configure what features are available, so you need to configure the active mixins in Config.groovy (omit any you don’t need):

grails.plugins.dynamicController.mixins = [
   'com.burtbeckwith.grails.plugins.appinfo.IndexControllerMixin':
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.Log4jControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.SpringControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.MemoryControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.PropertiesControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.ScopesControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'com.burtbeckwith.grails.plugins.appinfo.ThreadsControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController',

   'app.info.custom.example.MyConfigControllerMixin' :
      'com.burtbeckwith.appinfo_test.AdminManageController'
]

This configures a dynamic AdminManagerController and I like to map its urls to /admin/manage, so I add these lines to UrlMappings.groovy:

"/admin/manage/$action?"(controller: "adminManage")
"/adminManage/$action?"(controller: "errors", action: "urlMapping")

"403"(controller: "errors", action: "accessDenied")
"404"(controller: "errors", action: "notFound")
"405"(controller: "errors", action: "notAllowed")
"500"(controller: "errors", action: "error")

The first is the expected mapping, and the second “un-maps” the one that gets auto-created by the "/$controller/$action?/$id?" rule. It does this by using the urlMapping action in ErrorsController (see the test app for the source) to send a 404 error code. Since I’m using a controller for this, I also map the standard error codes to be able to have custom GSPs for each.

If you’re using the spring-security-core plugin you can then guard access to all the plugin’s actions with one mapping:

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/adminmanage/**': ['ROLE_ADMIN']
]

The plugin also includes a configuration demonstrating the new support for adding extra menu items (see GPAPPINFO-19) so the test app includes the app.info.custom.example.MyConfig class in src/groovy, the app.info.custom.example.MyConfigControllerMixin mixin in grails-app/controllerMixins, and the views/myconfig/configs.gsp GSP. This is all plugged in with this configuration in Config.groovy:

grails.plugins.appinfo.additional = [
   "My Config": [
      configs: "Configs"
   ]
]

There’s also a new thread dump mixin (see GPAPPINFO-20) and this is enabled by configuring ThreadsControllerMixin (see the grails.plugins.dynamicController.mixins config map above). The menu item is “Thread Dump” in the Info menu.

You can download the test application (it uses Grails 2.0.4) here. Once it’s running navigate to http://localhost:8080/appinfodemo/admin/manage/ and authenticate as admin/password to try it out.

This Week in Grails (2012-26)

Tuesday, July 03rd, 2012 11:12am

My apologies for not doing a post last week; I was traveling (doing two Groovy and Grails courses back-to-back) and didn’t have time.

The big news of the last two weeks is the Groovy 2.0 release. Lots of cool stuff there including static type checking, static compilation, modularity, and Invoke Dynamic support. Check out Cédric Champeau’s “Groovy 2.0 from an insider” post, Andre Steingress’ “Groovy 2.0: Love for Grails Command Objects” post, and this older post based on a 2.0 RC, Writing sentences with Groovy 2.0.

Grails 2.1 RC3 was released and the 2.1 GA release will be out soon. Test it now to get an early start on your upgrade and to help find any remaining issues.

Matt Raible and James Ward did a Play vs. Grails Smackdown at ÜberConf. The Grails version of the app did very well, especially considering all of the Play/Scala fanboy hype that we’ve had to put up with.

Netflix open sourced their Grails-based Asgard management and deployment app.
Asgard. They’re also hiring a Grails developer (see the Jobs section for the link and details).


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There were 3 new plugins released:

and 13 updated plugins:

  • ajaxflow version 0.2.3. Enables Ajaxified Webflows
  • bcrypt version 1.0. Performs bcrypt hashing
  • cucumber version 0.6.0. Test your Grails apps with Cucumber
  • grom version 0.2.4. Sends notifications on Windows, Linux, and Mac
  • gsp-resources version 0.4. Use the resources plugin to include static files like main.css.gsp, so dynamically built CSS and JS can be served as proper files instead of inlined in a non-cacheable GSP file
  • guard version 1.0.6. Provides a way to run integration tests without having to repeatedly bootstrap the environment
  • handlebars-resources version 0.3. Supports using Handlebars.js templates with the Grails Resources Plugin
  • infinispan version 1.0.1. Adds support for the JBoss Infinispan distributed cache
  • kickstart-with-bootstrap version 0.6.0. Start your project with a good looking frontend, with adapted scaffolding templates for standard CRUD pages using Twitter Bootstrap
  • spring-security-saml version 1.0.0.M15. SAML 2.x support for the Spring Security Plugin
  • uploadr version 0.5.11. HTML5 Drag and Drop file uploader
  • xwiki-rendering version 0.6. Convert texts using XWiki Rendering Framework
  • yammer-metrics version 2.1.2-2. Packages Coda Hale’s yammer metrics jars

Interesting Tweets

Jobs



User groups and Conferences

This Week in Grails (2012-24)

Tuesday, June 19th, 2012 6:39am

Groovy 2.0 RC3 was released this week.

Rob’s at it again with a cool updated variant on Grails scaffolding, this time using AngularJS. Check out the demo app here.

Plugin developers should be sure to upgrade to the latest version (2.0.3) of the release plugin. Peter updated it so the error messages are more helpful. Register it in BuildConfig.groovy like this (explicitly listing the release plugin’s rest-client-builder dependency so they’re both properly excluded with export = false):

plugins {
   build(':release:2.0.3', ':rest-client-builder:1.0.2') {
      export = false
   }
}

Spring Tool Suite (the new name for the IDE formerly known as Springsource Tool Suite) 3.0.0.M2 was released this week. Download here (click “Other Downloads >”). As of this version there will be two distributions, the traditional one and the “Groovy/Grails Tool Suite”. It’s a smaller version without all of the plugins in the other distribution (but you can manually install them) but it comes preconfigured for Groovy and Grails development: Groovy-Eclipse with Groovy 1.8, Grails IDE, tc Server integration, and runtimes for tc Server Developer Edition 2.7.0 and Grails 2.0.4.

Tim Yates is working on an interesting project.

Registration is now open for SpringOne2GX 2012, and the schedule should be updated later this week. Register by July 21st and save $400.


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There was one new plugin released:

  • address version 0.1. An address domain object that can be embedded in other domain object to save redefining it all the time

and 4 updated plugins:

  • facebook-sdk version 0.3.2. Allows your application to use the Facebook Platform and develop Facebook apps on Facebook.com or on web sites (with Facebook Connect)
  • release version 2.0.3. Publishes Grails plugins either to a public or private repository
  • vaadin version 1.5.4. Adds Vaadin (http://vaadin.com/) integration
  • zkui version 0.5.2. Seamlessly integrates ZK with Grails’ infrastructures; uses the Grails’ infrastructures such as GSP, controllers rather than zk’s zul as in ZKGrails plugin

Interesting Tweets

User groups and Conferences


This Week in Grails (2012-23)

Tuesday, June 12th, 2012 9:52am

GR8Conf EU was this week in Copenhagen, and it was a lot of fun. The organizers really raised the bar this year by brewing beer for the conference (and not one but two kinds). You can see most of the presentation slides here by clicking through to each talk.

Some of the organizers of the Greach conference were there and apparantly they’re planning on adding extending the size of this year’s conference, and all of the talks will be in English.

Of course there was a lot of activity on Twitter (search the #gr8conf hashtag):

One big item of note was that Griffon 1.0.0 was released live during one of Andres’ talks. Congrats to the Griffon team for this significant milestone. And coincidentally my copy of Griffon in Action arrived today.

Check out Mr. Haki’s conference report in three parts; University Day, Day One, and Day Two, and Andres Almiray’s conference blog post.

Not to be outdone by the Griffon team, the Gradle team announced today that they have
released version 1.0.


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There were 7 new plugins released:

  • authorise version 1.2. Provides a framework for authorising actions in Controllers, methods in Services and visible elements in GSPs
  • ember version 0.9.8.1. Provides resources definitions for Ember.js
  • errors version 0.7. Sets up some basic error handling for your application
  • handlebars-resources version 0.1. Supports using Handlebars.js templates with the Grails Resources Plugin
  • hd-image-utils version 0.3. High quality image manipulation plugin for scaling and cropping images. Uses the pure Java java-image-scaling library
  • mongo-file version 1.1.1. Provides a MongoFileService that saves, retrieves and deletes files from a MongoDB file store
  • shiro-openid version 0.3. Adds OpenID authentication to the Shiro plugin with a set of installable Shiro domain class and openid4java view templates

and 10 updated plugins:

  • avatar version 0.6.2. Provides a taglib for displaying avatars
  • bootstrap-file-upload version 2.1.1. Integrates Sebastian Tschan’s Jquery File Upload (https://github.com/blueimp/jQuery-File-Upload)
  • dojo version 1.6.1.11. Integrates the Dojo javascript toolkit
  • facebook-sdk version 0.3.0. Allows your application to use the Facebook Platform and develop Facebook apps on Facebook.com or on web sites (with Facebook Connect)
  • faker version 0.6. A port of Data::Faker from Perl, is used to easily generate fake data: names, addresses, phone numbers, etc.
  • jesque version 0.4.0. Groovier approach to using jesque
  • jesque-web version 0.4.0. Web interface to view and manage jesque queues, jobs and workers
  • jquery version 1.7.2. Integrates jQuery
  • portlets version 0.9.2. Aims to provide a simple way of developing JSR-168 portlets
  • sendgrid version 0.3. Allows the sending of Email via SendGrid’s services

Interesting Tweets

Jobs



User groups and Conferences


This Week in Grails (2012-22)

Monday, June 04th, 2012 2:28pm

Groovy 2.0 RC1 and RC2 were released this week. Lots of cool stuff there, including static type checking and static compilation, and support for InvokeDynamic. Grails 2.2 will use Groovy 2.0.

Stéphane Maldini created a demo app (source here) using “CloudFoundry, RabbitMQ, BackboneJS, Coffeescript, and the new 3 Events Bus plugins (platform-core, events-si and events-push)” based on Lauri Piispanen’s blog post.

I did a post this week on using AST transformations with the Spring Security plugin, Make your Spring Security @Secured annotations more DRY.

A couple more GR8Conf interviews:


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There was one new plugin released:

  • apache-pivot-grails version 1.0.5. Use Apache Pivot 2.x features on the Server side and forward Pivot jars to Clients for Applets and Java Web Start Applications

and 3 updated plugins:

  • openid version 0.4.4. Provides simple authentication using OpenID
  • resources version 1.2-RC1. A resource management and processing framework
  • simple-captcha version 0.9.0. Creates simple image CAPTCHAs that protect against automated completion and submission of HTML forms

Interesting Tweets

User groups and Conferences

Make your Spring Security @Secured annotations more DRY

Wednesday, May 30th, 2012 10:20pm

Recently a user on the Grails User mailing list wanted to know how to reduce repetition when defining @Secured annotations. The rules for specifying attributes in Java annotations are pretty restrictive, so I couldn’t see a direct way to do what he was asking.

Using Groovy doesn’t really help here since for the most part annotations in a Groovy class are pretty much the same as in Java (except for the syntax for array values). Of course Groovy now supports closures in annotations, but this would require a code change in the plugin. But then I thought about some work Jeff Brown did recently in the cache plugin.

Spring’s cache abstraction API includes three annotations; @Cacheable, @CacheEvict, and @CachePut. We were thinking ahead about supporting more configuration options than these annotations allow, but since you can’t subclass annotations we decided to use an AST transformation to find our versions of these annotations (currently with the same attributes as the Spring annotations) and convert them to valid Spring annotations. So I looked at Jeff’s code and it ended up being the basis for a fix for this problem.


It’s not possible to use code to externalize the authority lists because you can’t control the compilation order. So I ended up with a solution that isn’t perfect but works – I look for a properties file in the project root (roles.properties). The format is simple – the keys are names for each authority list and the values are the lists of authority names, comma-delimited. Here’s an example:

admins=ROLE_ADMIN, ROLE_SUPERADMIN
switchUser=ROLE_SWITCH_USER
editors=ROLE_EDITOR, ROLE_ADMIN

These keys are the values you use for the new @Authorities annotation:

package grails.plugins.springsecurity.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.codehaus.groovy.transform.GroovyASTTransformationClass;

/**
 * @author Burt Beckwith
 */
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@GroovyASTTransformationClass(
    "grails.plugins.springsecurity.annotation.AuthoritiesTransformation")
public @interface Authorities {
   /**
    * The property file key; the property value will be a
    * comma-delimited list of role names.
    * @return the key
    */
   String value();
}

For example here’s a controller using the new annotation:

@Authorities('admins')
class SecureController {

   @Authorities('editors')
   def someAction() {
      ...
   }
}

This is the equivalent of this controller (and if you decompile the one with @Authorities you’ll see both annotations):

@Secured(['ROLE_ADMIN', 'ROLE_SUPERADMIN'])
class SecureController {

   @Secured(['ROLE_EDITOR', 'ROLE_ADMIN'])
   def someAction() {
      ...
   }
}

The AST transformation class looks for @Authorities annotations, loads the properties file, and adds a new @Secured annotation (the @Authorities annotation isn’t removed) using the role names specified in the properties file:

package grails.plugins.springsecurity.annotation;

import grails.plugins.springsecurity.Secured;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.ast.AnnotatedNode;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.expr.ConstantExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.ListExpression;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.transform.ASTTransformation;
import org.codehaus.groovy.transform.GroovyASTTransformation;
import org.springframework.util.StringUtils;

/**
 * @author Burt Beckwith
 */
@GroovyASTTransformation(phase=CompilePhase.CANONICALIZATION)
public class AuthoritiesTransformation implements ASTTransformation {

  protected static final ClassNode SECURED =
       new ClassNode(Secured.class);

  public void visit(ASTNode[] astNodes, SourceUnit sourceUnit) {
    try {
      ASTNode firstNode = astNodes[0];
      ASTNode secondNode = astNodes[1];
      if (!(firstNode instanceof AnnotationNode) ||
          !(secondNode instanceof AnnotatedNode)) {
        throw new RuntimeException("Internal error: wrong types: " +
            firstNode.getClass().getName() +
            " / " + secondNode.getClass().getName());
      }

      AnnotationNode rolesAnnotationNode = (AnnotationNode) firstNode;
      AnnotatedNode annotatedNode = (AnnotatedNode) secondNode;

      AnnotationNode secured = createAnnotation(rolesAnnotationNode);
      if (secured != null) {
        annotatedNode.addAnnotation(secured);
      }
    }
    catch (Exception e) {
      // TODO
      e.printStackTrace();
    }
  }

  protected AnnotationNode createAnnotation(AnnotationNode rolesNode)
        throws IOException {
    Expression value = rolesNode.getMembers().get("value");
    if (!(value instanceof ConstantExpression)) {
      // TODO
      System.out.println(
         "annotation @Authorities value isn't a ConstantExpression: " +
         value);
      return null;
    }

    String fieldName = value.getText();
    String[] authorityNames = getAuthorityNames(fieldName);
    if (authorityNames == null) {
      return null;
    }

    return buildAnnotationNode(authorityNames);
  }

  protected AnnotationNode buildAnnotationNode(String[] names) {
    AnnotationNode securedAnnotationNode = new AnnotationNode(SECURED);
    List<Expression> nameExpressions = new ArrayList<Expression>();
    for (String authorityName : names) {
      nameExpressions.add(new ConstantExpression(authorityName));
    }
    securedAnnotationNode.addMember("value",
              new ListExpression(nameExpressions));
    return securedAnnotationNode;
  }

  protected String[] getAuthorityNames(String fieldName)
       throws IOException {

    Properties properties = new Properties();
    File propertyFile = new File("roles.properties");
    if (!propertyFile.exists()) {
      // TODO
      System.out.println("Property file roles.properties not found");
      return null;
    }

    properties.load(new FileReader(propertyFile));

    Object value = properties.getProperty(fieldName);
    if (value == null) {
      // TODO
      System.out.println("No value for property '" + fieldName + "'");
      return null;
    }

    List<String> names = new ArrayList<String>();
    String[] nameArray = StringUtils.commaDelimitedListToStringArray(
        value.toString())
    for (String auth : nameArray) {
      auth = auth.trim();
      if (auth.length() > 0) {
        names.add(auth);
      }
    }

    return names.toArray(new String[names.size()]);
  }
}

I’ll probably include this in the plugin at some point – I created a JIRA issue as a reminder – but for now you can just copy these two classes into your application’s src/java folder and create a roles.properties file in the project root. Any time you want to add or remove an entry or add or remove a role name from an entry, update the properties file, run grails clean and grails compile to be sure that the latest values are used.

This Week in Grails (2012-21)

Monday, May 28th, 2012 11:50am

Grails 2.1 RC2 was released this week and it has several fixes including some addressing issues found in last week’s RC1 release. Grails 2.0.4 was also released, along with 1.3.9 to address a security issue

Ted Naleid did a writeup of an approach to dealing with test pollution, where a test suite can pass in one run but fail in another if the tests run in a different order. This can be very frustrating and hard to fix, so this is a great resource.

GR8Conf is coming up soon (starts next week!) and there was one speaker interview this week:


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There was one new plugin released:

  • inflector version 0.1. Provides tags to simplify common text inflections, e.g. plural and singular words

and 17 updated plugins:

  • browser-detection version 0.4.1. Provides a service and tag library for browser detection
  • cache version 1.0.0.RC1. Adds request, service method, and taglib caching
  • cloud-foundry version 1.2.2. Integrates Cloud Foundry’s cloud deployment services to manage the running of Grails applications in the cloud from the command line
  • cloud-support version 1.0.11. Support plugin to help cloud plugins update service provider connection information from the cloud environment
  • flash-helper version 0.9.1. Simplifies and standardizes the process of adding/reading messages in the flash scope
  • google-visualization version 0.5.2. Provides a taglib for the interactive charts of the Google Visualization API
  • jslint version 0.5. Run JsLint on javascript files
  • localizations version 1.4.2. Store i18n strings in a database
  • quartz version 1.0-RC2. Schedules jobs to be executed with a specified interval or cron expression using the Quartz Enterprise Job Scheduler
  • quartz-monitor version 0.2. One clear and concise page that enables you to administer all your Quartz jobs
  • quartz2 version 0.2.3. Integration with Quartz 2 framework from quartz-scheduler.org
  • simple-captcha version 0.8.5. Creates simple image CAPTCHAs that protect against automated completion and submission of HTML forms
  • spring-security-facebook version 0.8. Plugin for Facebook Authentication, as extension to Grails Spring Security Core plugin
  • spring-security-ldap version 1.0.6. LDAP authentication support for the Spring Security plugin
  • spring-security-oauth version 2.0.1.1. Adds OAuth-based authentication to the Spring Security plugin using the OAuth plugin
  • stripe version 1.1. Use Stripe to process credit card transactions
  • translate version 1.3.0. Translates text from one language to another using the Microsoft Translator API

Interesting Tweets

User groups and Conferences

This Week in Grails (2012-20)

Tuesday, May 22nd, 2012 10:06am

Grails 2.1 RC1 was released this week. As always you should look at upgrading to 2.1 now to find issues earlier rather than later.

Please try out the cache plugins. They should be pretty stable, and we’ll have better support and documentation for migrating from the springcache plugin soon.

GR8Conf EU is in just a few weeks – be sure to get your ticket soon. There was one speaker interview this week:


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There was one new plugin released:

  • dustjs-resources version 0.2. Supports server-side compilation of .dust template files to their .js counterparts

and 10 updated plugins:

  • bootstrap-file-upload version 2.1.0. Integrates Sebastian Tschan’s Jquery File Upload (https://github.com/blueimp/jQuery-File-Upload)
  • eclipse-scripts version 1.0.6. Downloads and links sources and javadocs for dependencies from public repositories
  • export version 1.3. Export domain objects to a variety of formats (CSV, Excel, ODS, PDF, RTF and XML)
  • fitnesse version 2.0.4. Makes it possible to use the popular Open Source testing framework Fitnesse in combination with Grails.
  • functional-spock version 0.6. Allows you to write and run Spock specs under the functional test scope
  • google-visualization version 0.5.1. Provides a taglib for the interactive charts of the Google Visualization API
  • random version 0.2. Wraps the high-performance, statistically sound Uncommons Maths Pseudorandom Number Generators
  • redis version 1.3.1. Provides integration with a Redis datastore
  • release version 2.0.2. Publishes Grails plugins either to a public or private repository
  • routing version 1.2.2. Send and route messages to a wide variety of destination endpoints directly from your Controllers and Services using Camel

Interesting Tweets

User groups and Conferences


This Week in Grails (2012-19)

Tuesday, May 15th, 2012 12:06pm

We’re getting ready to release Grails 2.1, with a release candidate hopefully this week. The cache plugins I mentioned last week will be released around the same time, and the ‘core’ cache plugin will be a default plugin in BuildConfig.groovy. I released an update of the database-migration plugin to address some bugs that were keeping that from being a default plugin, so that will also be included by default in BuildConfig.groovy.

I’ve been working on a Grails book to be published this fall. The plan is that it will be an advanced book, and presume that you already have experience with Grails or another similar framework in Java or another language and are looking for more detail and best practices. It’s going to be available soon in an early-access digital format so you can follow the progress and help the book by finding mistakes and making suggestions.

A few more GR8Conf EU interviews:


If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.


Translations of this post:



Plugins

There were 6 new plugins released:

  • closure-templates-resources version 0.1. Supports server-side compilation of .soy template files to JavaScript files
  • jquery-mobile-metro version 0.1. Plugin jQuery mobile framework Metro UI theme resource files
  • jrimum-bopepo version 0.2. Allows you to create Boletos Bancarios for Banks of Brazil using the Jrimum Bopepo library
  • plastic-criteria version 0.1. Mock Grails Criteria for Unit Tests
  • split-test version 0.4. An A/B testing framework designed to work with Grails
  • spring-security-oauth version 2.0.1.0. Adds OAuth-based authentication to the Spring Security plugin using the OAuth plugin

and 14 updated plugins:

  • asynchronous-mail version 0.6. Send email asynchronously by storing them in the database and sending with a Quartz job
  • cache version 1.0.0.M2. Adds request, service method, and taglib caching
  • cache-ehcache version 1.0.0.M2. An Ehcache-based implementation of the Cache plugin
  • cache-redis version 1.0.0.M2. A Redis-based implementation of the Cache plugin
  • database-migration version 1.1. Official Grails plugin for database migrations
  • external-config-reload version 1.2.0. Polls for changes to external configuration files (files added to grails.config.locations), reloads the configuration when a change has occurred, and notifies specified plugins by firing the onConfigChange event in each
  • faker version 0.5. A port of Data::Faker from Perl, is used to easily generate fake data: names, addresses, phone numbers, etc.
  • hibernate-search version 0.6.1. Integrates Hibernate Search for domain classes
  • lesscss-resources version 1.3.0.3. Optimises the use of http://www.lesscss.org css files, compiling .less files into their .css counterprt, and place the css into the processing chain to be available to the other resource plugin features
  • pusher version 0.4. Wrapper for pusher.com REST api
  • spring-batch version 0.2.2. Provides the Spring Batch framework and convention based Jobs
  • spring-security-facebook version 0.7.4. Plugin for Facebook Authentication, as extension to Grails Spring Security Core plugin
  • spring-security-twitter version 0.4.3. Twitter authentication as extension to the Spring Security Core plugin
  • zkui version 0.5.1. Seamlessly integrates ZK with Grails’ infrastructures; uses the Grails’ infrastructures such as GSP, controllers rather than zk’s zul as in ZKGrails plugin

Interesting Tweets

Jobs



User groups and Conferences


Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 License.