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>