Personalización de la implementación predeterminada

La signatura de la función getNextTask en la interfaz curam.core.hook.task.impl.InboxActions es la siguiente:

package curam.core.hook.task.impl;  

@ImplementedBy(InboxActionsImpl.class)
public interface InboxActions {

  public long getNextTask(String userName);
   
   .
   .
   .
   .
}

La implementación predeterminada de la función se especifica en la clase curam.core.hook.task.impl.InboxActionsImpl

package curam.core.hook.task.impl;  

public class InboxActionsImpl implements InboxActions {

  public long getNextTask(String userName) { 
    // El código de la implementación predeterminada va aquí...
  }

  . 
  .
  .
  .
}

Para personalizar getNextTask, el método deberá implementarse en la nueva clase personalizada creada anteriormente que extiende la clase de implementación predeterminada curam.core.hook.task.impl.InboxActionsImpl .

package custom.hook.task.impl;  

public class CustomInboxActionsImpl extends InboxActionsImpl {

  public long getNextTask(final String userName) { 
    // El código personalizado de la implementación va aquí...
  }
  
}

Para asegurarse de que la aplicación ejecute la nueva clase personalizada en lugar de la implementación predeterminada, deberá escribirse una nueva clase custom.hook.task.impl.Module.java que extienda com.google.inject.AbstractModule con el método configure implementado como se muestra en el ejemplo siguiente:

package custom.hook.task.impl; 
 
public class Module extends com.google.inject.AbstractModule {
  protected void configure() {
    bind(
      curam.core.hook.task.impl.InboxActions.class).to(
        custom.hook.task.impl.CustomInboxActionsImpl.class);
    }
}

Por último, el nombre de clase custom.hook.task.impl.Module deberá insertarse en la columna ModuleClassName de la tabla de base de datos ModuleClassName. Puede insertarse agregando una fila adicional al archivo ModuleClassName.DMX o directamente en la tabla de base de datos si fuera necesario.

Con este enfoque, cuando la aplicación se vuelva a desplegar, el sistema invocará la versión personalizada de la función getNextTask en lugar de la implementación predeterminada.