Last updated by 5 years ago

Page: Roadmap, Version:1

Grails Roadmap

1.1 Release Planning

Headline Features

  1. JPA Support
  2. JSP Tag Library Support
  3. DB Migrations
  4. Portlet Support
  5. Java Content Repository (JCR) Support
  6. Security API
  7. Mail Support
  8. Maven 2 Support (help test it!)
  9. Continuous Testing

Improvements to Core

The above features will require some re-work to core and hence are dependant on certain improvements mainly to the plug-in system

Refactor and split out Grails so individual parts are more re-usable
  • Standalone GORM
  • Standalone GSP
  • Standalone BeanBuilder (already possible but provide ComponentContextLoader)
Maybe provide a new plugin that can
  • Create a standard Spring MVC application without the rest of Grails, just GORM enabled?
  • Create a standard Spring MVC application without the rest of Grails but configured with BeanBuilder?
  • Create a standard Spring MVC application without the rest of Grailsbut with a GSP view?
  • Or any combination of the above?
Support for Global plugins

The plug-in mechanism needs to work not sure on a per app basis but on a global basis to, with a flag you should be able to install a plugin for all applications:

grails install-plugin -global jsecurity

Refactor and Split Grails core into real Grails plugins

Currently Grails core plug-ins are kept within jars, these need to be made real Grails plug-ins and they need to have their own jar files for example hibernate support should reside in

GRAILS_HOME/plugins/hibernate

The hibernate plugin will contains only the hibernate jars in GRAILS_HOME/plugins/hibernate/lib

Implement class loader isolation for plugins

Currently plugins are not isolated from each other which can lead to class loader conflicts, we should implement class loader isolation so that individual plugins don't conflict with each other

Some implications of this is you will no longer be able to have plugins that references classes directly within the plugin from web.xml. For this we should implement DelegatingServletFilter, DelegatingServlet etc. that are capable of delegating to particular plugins

Improve plug-in testing

Currently its hard to test plugins because its near impossible to mock artefacts, we should be able to, within a plugin, have a test/projects directory that contains real grails projects that can be bootstrapped and then tested with a new command such as:

grails test-project foo

Proper plugin eviction

Currently when you evict a core Grails plug-in it doesn't exclude the jar files for that plugin. We need to refactor LoaderConfiguration so that it is plugin aware to avoid jar conflicts

Automatic Plugin Discovery and Install

When you do

grails install-plugin jsecurity

For the first time it should write info into application.properties that the application is now dependant on this plugin

Then when you do grails run-app Grails should resolve the plug-in dependencies automatically using something like Ivy

Dependency Resolution for Plugins

As above Plugins should be able to declaritively specify their dependencies and have those automatically downloaded including any plugins that the plugin depends on (transitive dependency management)

Plugin Uninstall

We should provide a plugin uninstall command that removes the plugin and any resources it may have added to the provide and then executes an _Uninstall.groovy script if it exists in the plugin

Interactive mode

A new Grails interactive mode that you run with:

grails interactive

At which point you can type any command such as:

run-app
test-app
stop-app
create-controller foo
run-app

Without JVM restarts

Headline Feature TODO List

JPA Support
  • Write as a plugin, will need to evict Hibernate plug-in
  • Planned support includes most GORM like oeprations excluding criteria (no support in JPA)
  • Test against TopLink for compatibility
JSP Tag Library Support
  • Look at freemarker as an example of how this is done
  • JSP tags will require a <%@taglib %> directive unlike GSP tags
DB Migrations
  • Possible a Liquibase or GSQL DSL?
Portlet Support
  • Depends on JSP tag library support
Release History

Post Grails 1.0

  • Implement support for JPA
  • Implement generation of domain model from DB (Middlegen integration)
  • Add server-side scripting of client Javascript (javascript DSL)
  • Refactor scaffolding to make it more pluggable and extensible
  • Implement support for JSP custom tag libraries in GSP
  • Fork GSQL and use to add support for database migrations
  • Add XML-RPC support for Service classes
  • Implement Grails-AOP an AOP mechanism built on the Groovy MOP
  • Add scaffolding of user authentication code
  • Start to build up a UI component tag library