Spring HttpInvoker + Swing

0 respostas
khaoz

Estou tentando utilizar o spring httinvoker com um cliente swing+genesis sem sucesso.

No meu servidor eu tenho:

Cidade.java: meu modelo com as anotações do hibernate
CidadeService.java: interface
CidadeServiceImpl.java: Implementa a interface CidadeService.java e utiliza o DaoFactory para manipular os dados.

Dentro da pasta WEB-INF eu tenho o remoting-servlet.xml onde tenho o beans com id cidadeService configurado para a classe CidadeServiceImpl e também informo que irei utilizar o HttpInvokerServiceExporter.
No web.xml esta configurado o DispatcherServlet.
Tudo isso de acordo com a documentação do spring.

No cliente eu tenho:

Cidade.java: meu modelo sem as anotações do hibernate
CidadeService.java: interface
CidadeView.java: a gui swing
CidadeForm.java: Aqui eu sincronizo a CidadeView.java com a Cidade.java e chamo a CidadeService.java para comunicar com o servidor e gravar os dados.

Dentro da pasta src (defalut package do projeto netbeans) eu tenho um beans.xml onde eu configurei o bean CidadeForm com uma property cidadeService referenciando cidadeService.

Quando eu chamo o método adiciona do CidadeForm.java eu recebo um NullPointerException. É um erro um tanto quanto óbvio pois eu esperava que o spring criasse e injetasse a classe CidadeService no CidadeForm. Porém me parece que esse comportamento só ocorre automaticamente no servidor. Procurando na internet encontrei referências sobre utilizar o ApplicationContext e BeansFactory explicitamente, só que quando tento fazer isso em um construtor da classe CidadeForm entra em loop infinito e "quebra tudo".

Alguém já trabalhou dessa forma e poderia me dar uma luz ? Espero te conseguido expor bem a situação. Segue o código do CidadeServie, CidadeServiceImpl e CidadeForm, bem como do remoting-servlet.xml, web.xml e beans.xml:

CidadeService.java:

package giulianisanches.cadastros.service;

import giulianisanches.cadastros.model.Cidade;

public interface CidadeService {

    public void adiciona(Cidade cidade);
}

CidadeServiceImpl.java:

package giulianisanches.cadastros.service;

import giulianisanches.cadastros.model.Cidade;
import giulianisanches.dao.DaoFactory;

public class CidadeServiceImpl implements CidadeService {

    private DaoFactory factory;

    public CidadeServiceImpl() {
        super();
    }

    public CidadeServiceImpl(DaoFactory factory) {
        this();
        this.factory = factory;
    }
    public void adiciona(Cidade cidade) {
        this.factory.beginTransaction();
        this.factory.getCidadeDao().adiciona(cidade);
        this.factory.commit();
    }
}

CidadeForm.java:

package giulianisanches.cadastros.form;

import giulianisanches.cadastros.model.Cidade;
import giulianisanches.cadastros.service.CidadeService;
import net.java.dev.genesis.annotation.Action;
import net.java.dev.genesis.annotation.Form;

@Form
public class CidadeForm {

    private String nome;
    private Cidade cidade;
    private CidadeService cidadeService;

    public CidadeForm() {
       this.cidade = new Cidade();
    }

    public void setCidadeService(CidadeService cidadeService) {
        this.cidadeService = cidadeService;
    }

    public String getNome() {
        return cidade.getNome();
    }

    public void setNome(String nome) {
        cidade.setNome(nome);
    }

    @Action
    public void gravar() {
        cidadeService.adiciona(this.cidade);
    }
}

remoting-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="cidadeService"
        class="giulianisanches.cadastros.service.CidadeServiceImpl">
    </bean>

    <bean name="/CidadeService"
        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="cidadeService"/>
        <property name="serviceInterface"
            value="giulianisanches.cadastros.service.CidadeService"/>
    </bean>
</beans>

beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean class="giulianisanches.cadastros.form.CidadeForm">
        <property name="cidadeService" ref="cidadeService"/>
    </bean>

    <bean id="httpInvokerProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <property name="serviceUrl"
            value="http://localhost:8080/remoting/CidadeService"/>
        <property name="serviceInterface"
            value="giulianisanches.cadastros.service.CidadeService"/>
        <property name="httpInvokerRequestExecutor">
            <bean class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor"/>
        </property>
    </bean>
</beans>
Criado 11 de janeiro de 2009
Respostas 0
Participantes 1