Facade

Pessoal

Estou desenvolvendo uma aplicacao utilizando o struts, e apos ler o artigo tirando o maximo do struts, cheguei a seguinte implementacao.

Criei uma BaseAction que sera padrao para as acoes de insercao, exclusao, consulta no meu formulario. Segue o codigo

public class BaseAction extends LookupDispatchAction{
private final static String SUCCESS = “success”;

protected Map getKeyMethodMap() {
    Map map = new HashMap();
    map.put("gravar","grava");
    return map;
}

public ActionForward grava(ActionMapping mapping,
        ActionForm form, HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    // 1
    DynaActionForm f = (DynaActionForm) form;
    PrincipalActionMapping pmapping = (PrincipalActionMapping) mapping;

// 2
ActionErrors errors = f.validate(mapping,request);
if (errors.isEmpty()) {
// 3
Object voGenerico = Class.forName(pmapping.getValueObject()).newInstance();

// 4
BeanUtils.copyProperties(voGenerico,f);
// 5. Pega interface Façade registrada em escopo de aplicação

        IFacade plc = (IFacade) request.getSession().getServletContext().
                getAttribute(IConstantes.INTERFACE_PERSISTENCIA);

// 6. Grava
plc.grava(voGenerico);
} else
request.setAttribute(Globals.ERROR_KEY,errors);
return mapping.findForward(SUCCESS);

}

Bem, pelo que entendi lendo o artigo, essa action funcionará genericamente para todos os meus cadastros, onde os ValueObjects sao definidos no meu struts-config xml, até ai tudo bem.

Estou encontrando problemas na implementacao da interface Facade.

Como eu faco para implementar essa interface, lembrando que esta action deve ser generica, ou seja, funcionar para todos os meus cadastros.

Algum de voces ja implementaram algo parecido? Como poderia fazer essa implementacao. Exemplos seriam muito bem vindos.

Obrigado

Cara eu implementaria isso que vc quer desta forma

Eu configuraria os DynaActionForm referende a os objetos VO direto por exemplo

[quote]

[/quote]

Isso já te pouparia este trecho de codigo

[quote]DynaActionForm f = (DynaActionForm) form;
Object voGenerico = Class.forName(pmapping.getValueObject()).newInstance();
BeanUtils.copyProperties(voGenerico,f); [/quote]

Vc já pegaria o VO com as propriedades setadas direto, assim

[quote]DynaActionForm dyna = (DynaActionForm) form
Object voGenerico = (Object)dyna.get(“produto”);[/quote]

E não usuario um interface facade e sim um DAO parametrizado, isso se vc estiver usando o Java 5 !!

exemplo:
public class DAO{

public gravar( obj){
session.save(obj);
}

}

Aqui vai um link de um exemplo de como usar o struts assim
http://www.devmedia.com.br/eventos/webdays2006/downloads/Struts_Juliano.rar

e para o DAO parametrizado na revista Mundo Java deste mês no artigo sobre hibernate tem um bom exemplo e o codigo fonte está no site da revista.

falow…

valeu cara…

Eu fiz dessa forma pq foi era assim q tava no exemplo do artigo, vou tentar fazer como vc falou…

Valeu Mesmo