Category Archives: DirectJNgine

DirectJNgine 1.3 alpha 1 adds support for Google’s AppEngine

Today I am releasing DirectJNgine 1.3 alpha 1. You can download it from http://code.google.com/p/directjngine/.

New in DJN 1.3: support for Google’s AppEngine

We are providing support for AppEngine, overcoming the limitations it has with respect to file handling and multithreading.

Check this post for information on how to make an existing DirectJNgine application AppEngine-friendly.

New in DJN 1.3: tested against ExtJs 3.2.0

New DirectJNgine released are tested against ExtJs 3.2.0.

Updated User’s Guide

We keep the documentation up to date: we have added a new Chapter, “9. Google AppEngine support” with detailed instructions on how to set up DirectJNgine to support AppEngine.

Other enhancements in DJN 1.3

– The only (!) bug found in DJN 1.2 has been fixed.

– I am using FindBugs to help ensure DJN is a high quality product.

DirectJNgine 1.2 final is out

Today I am releasing DirectJNgine 1.2 final. You can download it from http://code.google.com/p/directjngine/.

For detailed info, check the User’s Guide, which has been updated and has additional chapters devoted to the new functionality.

New in DJN 1.2: Support for stateful actions
It is possible to have session and application scoped actions, that will remember their state between requests.

To make an action stateful, use the @ActionScope annotation.

Take a look at the new chapter in the User’s Guide to get more information about stateful actions.

Sample code:


@ActionScope(scope=Scope.SESSION)
public class SessionStatefulActionTest {
  int count;
  String value;
  // ...
}

Once the SessionStatefulActionTest action is declared to be session scoped, it will be stored in the user session: this means that its count and value fields will be remembered across request belonging to the same user session.

New in DJN 1.2: Support for accessing the current session, etc. from within action methods
Now it is possible to get access to the current session, servlet context, servlet configuration, etc., from within action methods.
To do that, just use the new WebContext and WebContextManager classes.

Take a look at the new chapter in the User’s Guide to get more information about WebContext.

Sample code:


@DirectMethod
public WebContextInfo test_webContext() {
  WebContext context = WebContextManager.get();
  HttpSession session = context.getSession();
  ServletContext application = context.getServletContext();
    
  // Keep a counter of how many times we have called this method
  // in this session
  Integer callsInSession=(Integer)session.getAttribute("callsInSession");
  if( callsInSession == null ) {
    callsInSession = new Integer(0);
  }
  callsInSession = new Integer(callsInSession.intValue() + 1);
  session.setAttribute("callsInSession", callsInSession);

  // ...
}

You will probably find that using session/application scoped actions might be an easier way to accomplish your goals, though.

New in DJN 1.2: Support for multiple action instances
Now that actions can be stateful, it makes sense to have more than one action instance for a given Java class, each instance manging its own state.

Other additions/improvements

· All bugs reported against DJN 1.1 have been fixed.· We have added more tests, including those needed to ensure bug fixes work: we have crossed the one hundred automated tests barrier!

· We have moved to ExtJs 3.1.1 for testing to ensure that we remain up to date. While 3.1 and 3.0 should work fine, the “officially” supported version will be 3.1.1.

· Licensing has been “fixed”: we are LGPL v3 -the way it was intended to be from the beginning.

Code breaking changes
· The programmatic API has been modified so that poll methods belong to actions, instead of being global. This was a must to support stateful actions.

· The suggested workaround for handling “\n” and “\r” characters in DJN 1.1 does not work anymore: instead you should pass them “as-is”.

Tested browsers
· Internet Explorer 8 (8.0.6001.18702)

· Firefox 3.5.6 (Gecko 20100115)

· Safari 4.0.4 (531.21.10)

· Google Chrome 4.0.249.89

To all, thank you for your encouragement and criticism: I hope this new release of DJN helps you make bettter software.

DirectJNgine 1.2 RC 1 disponible

Hoy he publicado la RC1 de DirectJNgine 1.2.

El único cambio relevante con respecto a la beta 3 es que la versión oficialmente soportada de ExtJs pasa a ser la 3.1.1.

Los tests automatizados (¡ya contamos con 102!) se ejecutan a partir de ahora contra esta versión.

La versión final de DirectJNgine aparecerá probablemente la próxima semana: en este momento lo único pendiente es obtener feedback de usuarios utilizando otros entornos, especialmente Linux.

DirectJNgine 1.2 beta 3 ya está disponible

Hoy he hecho pública la beta 3 de DirectJNgine 1.2, un proyecto Open Source que se puede descargar desde http://code.google.com/p/directjngine/.

Para aquellos que no conozcais DirectJNgine (también llamada DJN), es una librería Java que permite llamar directamente a objetos Java desde Javascript vía Ajax.

Básicamente, uno escribe el siguiente código Java,

public class Action1 {
  @DirectMethod
  public String sayHello( String name) {
    return “Hello, ” + name + “. Nice to meet you!”;
  }
}

 y lo invoca desde Javascript como sigue:

Action1.sayHello( “Pedro”,
  function(p, response) {
    Ext.MessageBox.alert( “Greetings”, response.result );
  }
);

Tan simple como puede serlo.

DirectJNgine funciona como back-end de ExtJs, una librería de interface de usuario que quizá sea la más potente que se puede encontrar a día de hoy. Vale la pena verla en acción.

DirectJNgine se ha desarrollado en mi tiempo libre, aunque con los criterios con que llevamos a cabo los desarrollos profesionales. Por tanto no es una librería, sino un producto que cuenta con características poco comunes en proyectos Open Source de tamaño similar:

  • Incluye una guía de usuario actualizada en cada versión, de casi 50 páginas.
  • Cuenta con más de 100 tests automatizados, ya que se ha desarrollado utilizando desarrollo basado en tests, TDD.
  • Se testea contra Internet Explorer, Firefox, Safari, Chrome y Opera antes de cada release (final, beta o alpha).
  • Incluye más ejemplos que los protocolos implementados por el propio ExtJs para PHP, NET, etc.(!) .
  • Incluye características muy avanzadas orientadas a aplicaciones de alto rendimiento: soporte para peticiones batched atendidas por múltiples threads, minificación del código Javascript, unificación de múltiples APIs en un único archivo, etc.
  • Su licencia es LGPL v3, con lo que se puede usar en productos comerciales.

En el momento de escribir esto, el thread de DirectJNgine es el más visitado (¡más de 25.000 visitas!) y con más entradas de todos los existentes en el forum dedicado a ExtDirect, superando incluso a los protocolos implementados por el equipo de ExtJs.

¡Una lástima que tan solo sea un hobby!