martedì 6 settembre 2011

Wicket + Spring: Un utile metodo

Un brevissimo post per introdurre un metodo molto utile per interfacciare Wicket con il contesto Spring.

Come sappiamo Spring è un contesto basato su classi Singletone. Un componente Wicket che inizializza una proprietà interna ad un Singletone Spring, non potrebbe essere dealloacato alla fine dell'utilizzo mandando presto in out-of-memory.
La soluzione sarebbe quella di utilizzare i bean del contesto solo dentro ai metodi del componente Wicket oppure creare un comodo metodo universale che passa dalla Wicket Application.

Questa seconda opzione è preferibile dato che un componente Wicket ha visibilità della Application che lo sta usando e quindi ne può lanciare facilmente un metodo.

Quindi nella nostra Wicket Application legata a Spring, inseriremo questo metodo:

public Object getSpringObject(String beanName) {
          ApplicationContext context = 
                             new ClassPathXmlApplicationContext("test.xml");
          return (Object) context.getBean(beanName);
    }

Questo metodo universale chiede un BEAN dal contesto dato una Stringa in ingresso. Il metodo ritorna un oggetto castato direttamente nel return.

Al componente Wicket che deciderà di usarlo basterà usare questa sintassi:

WicketApplicationExample wApp = (WicketApplicationExample) Application.get();
BeanExample gDS = (BeanExample) app.getSpringObject("idDelBean");


La prima istruzione serve a istanziare l'oggetto della Class Application di Wicket castato ovviamente sul nome della Classe della Wicket Application.
La seconda istruzione chiama il metodo di cui sopra chiedendo un BEAN dato l'ID che lo identifica nel contesto.

Nessun commento:

Posta un commento