Integration

By default, Madvoc action objects are created by MadvocController and they are not aware of anything else then Madvoc and servlet context. However, for any web application actions must somehow reference the outside world, e.g. service layer. Common need is to have Madvoc actions to be aware of some application context, managed by Spring or Petite, that also maintains business components.

Trivial solutions, such manual lookup of components from business container is out of question for serious application. The goal is to make injection automatically.

AnnotatedFieldsInterceptor

One solution is usage of interceptor that will inject bean references from business context into action before action invocation. For that Madvoc offers abstract AnnotatedFieldsInterceptor. It has to be implemented by providing custom annotation class that will be used for annotating action's fields. Interceptor would scan action class for such annotated fields (caching is included), performs name lookup and injects fetched bean into the action.

Petite integration

It is very easy to integrate Petite* with Madvoc, to make all actions, interceptors and results type aware of some Petite application context (typically, the service layer). It is just matter of using PetiteWebApplication instead of WebApplication:

    <web-app ...>

        ...
        <filter>
            <filter-name>madvoc</filter-name>
            <filter-class>jodd.madvoc.MadvocServletFilter</filter-class>
            <init-param>
                <param-name>madvoc.webapp</param-name>
                <param-value>jodd.madvoc.petite.PetiteWebApplication</param-value>
            </init-param>
        </filter>
        ...
    </web-app>

PetiteWebApplication creates and configures Petite container that is supposed to hold application context. It also registers Petite-aware variants of some Madvoc components, so actions, interceptors and result type handler will be created within this application context. Creating bean in Petite means that bean will be created, wired and initialized within Petite context, but not registered.

Madvoc uses Petite container internally; there is no reason to use it for application purposes. PetiteWebApplication provides different, separate instance, that serves as application context.

Petite container is maintained byPetiteWebApplication. By default, the container is created and simply auto-configured using full available class path at that time. However, it is easy to change this default behavior and even provide some external instance of Petite container.

Petite and session scope

To enable session scoped Petite beans, it is required to register the following listener:

    <web-app ...>
        ...
        <listener>
            <listener-class>
                jodd.servlet.RequestContextListener
            </listener-class>
        </listener>
        ...
    </web-app>

RequestContextListener store request in the current thread and all child threads, so it can be easily accessible. It also keep track of sessions.