Qual arquitetura usar nesse - por favor me ajudem!?

Prezados Amigos, estou projetando um sistema de automação comercial para supermercados em especial, e portanto estou com dúvida em alguns itens, vou listar os requisitos, dessa forma acredito que os Srs. terão como tirar minhas dúvidas fácil fácil.

  1. Requisitos Funcionais (Básico)

    1.1 Manter Produtos, Grupo de Produtos, Departamento,  Marca, Fornecedores, Empresas, Filiais, Compradores, Vendedores, Transportadores, PDV's.
    1.2 Requisição de Compra/Venda, Cotação, Pedido de Compra/Venda e de Bonificação.      
    1.3 Entrada de produtos no estoque por aquisição, bonificação. 
    1.5 Saida de Produtos(Envio de Mercadoria do estoque de Vendas para estoque de Trocas). Separação de Estoques/Armazenagem. Ex: Est1-Venda, Est2-Trocas, Est3-Amox, Est4-Brinde.
    1.6 Saida de Produtos(Venda), no Balcão/Emissão de NF/NFE, e no PDV/Cupom Fiscal.
    1.7 Saida de Produtos(Perda de Estoque, Materia Prima/Produção).
    1.8 Sistema deve fazer Sugestão de compras automático com base no histórico de venda. (Poderá também gerar o pedido automatico de acordo com sugestão)
    1.9    Histórico de Vendas dos Ultimos 3 Mesês, Preço da Ultima Compra, Ultimo Fornecedor do Produto, Resumo Mensal de Vendas.
    1.9.1  Saida por Transferência entre Filiais com Emissão de NF/NFE ( Ex: Transferir 100 Fardos de Arroz Cristal da Filial 1 para Filial 2).
    

OBS: Existe inúmeros requisitos funcionais, aqui eu coloquei somente alguns, para os Srs, ter uma noção do sistema.

  1. Requisitos Não Funcionais.

2.1 Banco de Dados:
MySQL no PDV e Oracle ou PostgreSQL na Matriz/Central.

2.2 Linguagem de programação:
Front End:
Aplicação Principal (Não é o PDV): Adobe Flex (Plataforma WEB) - MXML e Action Script
Aplicação PDV (Ponto de Vendas): Java (Plataforma Desktop - compativel com Linux e Windows). Usarei NetBeans

      Back End:      
                JAVA     

2.3 Link para comunicação entre Filial e Matriz.
MPLS ou VPN em cima de Internet com Velocidade minima de 512Kbps sem CIR na filial e 1MBps na Matriz (Isso é relativo).

2.4 Frameworks usado em todo projeto: Spring, Hibernate ou TopLink como implementação da JPA no PDV, na Aplicação principal quero usar JDBC puro mesmo, vou montar uma CAMADA DAO…e criar possibilidade para utilização de pelo menos uns 3 banco de dados: ORACLE, MySQL e PostGreSQL.

2.3 Arquitetura: (PESSOAL ONDE EU TENHO MAIS DÚVIDA). - Não quero e nem pretendo transmitir esses dados via arquivos Texto, tem que ser Banco a Banco…ja sofri muito com arquivo Texto.

   PDV => to pensando 3 Camadas (MVC).  mais com essa ideia de aplicação distribuida..agora fiquei na duvida quantas camadas, quais tecnologias para esse fim devo utilizar..
  
  Aplicação Principal => Não Sei ainda, aqui que entra minha dúvida. Segue abaixo as perguntas.

  
  Meu PDV será desenvolvido em na plataforma Desktop usando componentes Swing, e Esse PDV poderá está operando em diversas localidades do País. ou seja é envidente que iremos trabalhar em cima de uma VPN. Considerando que meu PDV irá gravar as vendas e outras operações como baixa de estoque ..etc. no banco de dados local que será o MySQL, como eu faço para transferir a venda  do PDV para o Banco de dados na Matriz? Qual tecnologia eu usaria para distribuir esse objetos de forma segura/transações e com eficiência/rapidez.  Poderia usar EJB? Spring? WebServices?. Alguem poderia me ajudar?

2.4 Tempo de Resposta deve ser no máximo 30 Segundos. Ou seja, Logo após fechar o cupom fiscal no PDV da filial… imediatamente o PDV tem que se conectar com a matriz, selecionar todos registros de venda no banco de dados MySQL local…enviar para o Servidor de Aplicação, não sei como ele vai enviar…rsrs. mais preciso que envie… logo, o metodo remoto terá que pegar esses registros que poderão está em um lista tipada ou não tipada, e iniciar as operações de inserção e atualização, como por exemplo…baixa de estoque…e registro de venda daqueles produtos que estão contido na lista. Outra coisa também, quando o usuario…alterar o preço de um produto na aplicação principal…de tempos em tempos o PDV irá invocar um metodo para pegar os produtos que foram alterados o seus preços…e em seguida…atualizar a tabela de produtos do banco de dados localmente. Galera é possivel fazer isso???

Algumas perguntas basicas…
2.5 Posso usar JBOSS como ApplicationServer ? ou GlassFish?

2.6 Com Spring Framework…eu consigo fazer o que o EJB Faz…tipo enquanto o cliente estiver transmitindo dados para o servidor …ele matem o estado da conexão.(StateFull…igual Firewall).

  1. Então o que vocês me aconselham…fazer?

…Estou a espera da resposta dos veteranos!

Atenciosamente,
Sebastião Fidêncio da Silva Pereira
Estudante do Curso de Tecnologia em Análise e Des. de Sistemas
Faculdade Anhanguera de Anápolis.

“Meu Sonho é desenvolver algo que seja útil para a sociedade Brasileira”

[quote]2.3 Link para comunicação entre Filial e Matriz.
MPLS ou VPN em cima de Internet com Velocidade minima de 512Kbps sem CIR na filial e 1MBps na Matriz (Isso é relativo). [/quote]

Neste ponto vc poderá ter vários momentos de instabilidade; não há o que fazer a não ser se prevenir contra estes momentos utilizando logs e controles que grarantam: a integridade, a qualidade e a atualização da informação.

[quote]PDV => to pensando 3 Camadas (MVC). mais com essa ideia de aplicação distribuida…agora fiquei na duvida quantas camadas, quais tecnologias para esse fim devo utilizar…
[/quote]

Concentre-se na arquitetura que vc irá aplicar no server (na matriz), descubra os prováveis serviços que serão necessários para atender as possíveis requisições dos clientes. Enquanto isso estude MVC, para entender que a sua solução deverá envolver muito mais do que isso; mvc será só mais um detalhe no conjunto.

[quote]Meu PDV será desenvolvido em na plataforma Desktop usando componentes Swing, e Esse PDV poderá está operando em diversas localidades do País. ou seja é envidente que iremos trabalhar em cima de uma VPN. Considerando que meu PDV irá gravar as vendas e outras operações como baixa de estoque …etc. no banco de dados local que será o MySQL, como eu faço para transferir a venda do PDV para o Banco de dados na Matriz? Qual tecnologia eu usaria para distribuir esse objetos de forma segura/transações e com eficiência/rapidez. Poderia usar EJB? Spring? WebServices?. Alguem poderia me ajudar?
[/quote]

Os 3 (Ebj, Spring, WebServices) são boas opções…mas eu consideraria o Spring (ainda não apliquei o Ejb em situações mais radicais) porque é leve, vamos dizer assim, além de vc poder utilizar Webservices com ele vc ainda pode utilizar outra opção de chamada remota através de xml de forma transparente ( ver Hessian or Burlap to remotely call services via HTTP aqui http://static.springsource.org/spring/docs/2.5.x/reference/remoting.html). Outro ponto importante a favor do Spring é que a teoria envolvida é bem menor, logo, vc irá estudar menos para obter um bom resultado (assim acredito).

Sim, é possivel. Uma idéia é utilizar threads para criar processamentos paralelos; enquanto o PDV está sendo executado, haverá outro processo sendo executado na intenção de atualizar a matriz.

Neste momento vc poderia considerar a utilização de mensagens (JMS) para atualizar os PDVs; quando a matriz atualizar os dados, uma mensagem poderia ser enviada informando o evento ocorrido disparando a atualização pelo client. Se os pontos de atualização forem poucos a própria mensagem poderia entregar as informações necessárias para a atualização do PDV. A aplicação de mensagens requer muita atenção e bastante leitura para o entendimento mas o resultado é interessante.

Para terminar, não poupe esforços na ao aplicar LOGs nos pontos estratégicos; vc irá precisar de ter o poder de rastrear qualquer informação de forma precisa e rápida porque normalmente estes sistemas costumam ser de dificil entendimento. Quando der algo errado, vc precisa ter como encontrar o problema rapidamente.

flws

Bacana sua Reposta, gostei demais, Porém a sua reposta abriu o leque para mais perguntas, segura ai:

Eu ainda não consigo pensar na minha mente a arquitetura, até porque não tenho diagramas de arquitetura feito, mas tem como você expor o basicamente o ponto de ligação das camadas. quem conversa com quem logico.rsrs.,

PDV - seria assim? me corriga se eu estiver errado - Projeto será feito no NetBeans 6.8

br.com.fitalsolution.bitvarejo.pdv.model.dao [DAO]

br.com.fitalsolution.bitvarejo.pdv.model.bean [Beans] - aqui ficarão regras especificas de negocio do PDV…

br.com.fitalsolution.bitvarejo.pdv.view [Ficarão os Formularios]

[Beans do software PDV] é bem provavel que eu use ORM aqui com JPA/Hibernate ou JPA/TopLink. ou vou Transact SQL mesmo…JDBC puro.

========================================================================

AppServer - Jboss ou GlassFish
br.com.fitalsolution.bitvarejo.negocioServico [Beans…De negocio que serão invocados pelo PDV…ou qualquer outra interface de aplicação…sei lar pode ser um coletor de preços…, ou seja, vai ser um componente de negocio exposto para ser usado/consumido] - Aqui que entraria o Webservices ou Remote do Spring?..

aqui ficarai no caso uma classe chamada por exemplo:

VendaServico.java -> essa classe possuiria metodos tipo: [essa classe implementaria uma interface remota ou local?]

public void gravarVenda(Obj obj)
{

}

O metodo gravarVenda seria chamado…atraves do servico WEB…?

Minhas classes de servicos seria mapeadas como POJO caso eu optasse em usar JPA? [mais nao quero usar]…

eu poderia colocar a anotação do spring…

@trasctional
nas minhas classes de serviços que entregaria meus objetos para serem persistido pela camada DAO?

E se por exemplo…no momento em que o servidor esta gravando a venda do PDV exemplo:

  1. Supomos que o PDV/Desktop… realize uma venda de 100,00.

  2. Logo os registros dessa venda são gravados em duas tabelas no MySQL do computador onde ta rodando o PDV supomos que seja linux ubuntu. Tabela Venda_Cabecalho e Venda Detalhe. ou seja…uma Venda pode ter N produtos…, e tambem grave na tabela de produtos o estoque atual… dos produtos vendidos. a e tera uma Flag…nos registros de venda que nao foram enviados para a matriz. tipo ENVIADO=S, OU ENVIADO=N. entendeu.

  3. Logo o Sistema ao inves de usar Timer… ele pode usar o que você citou…que é utilizar JMS. Nesse caso a aplicação Cliente que seria o PDV teria que enviar uma mensagem para o AppServer…ou o AppServer enviar uma mensagm para o cliente perguntando se tem venda pendente? Dai se houver venda pendente o cliente chama o metodo remoto atraves de RMI…ou webservices nao seria RMI né…seria ou tipo de chamada?

  4. Resumindo… Quando os registros de venda…que foram passado como parametro para o metodo remoto começasse a ser inseridos no banco de dados … e se a conexão caisse bem na hora… o cliente tinha que ficar sabendo posteriormente que a transação foi comitada…ai que entra minha duvida…tem como criar uma fila…de requisição/solicitação no servidor… tipo assim… a transação foi comitada no AppServer… mas o AppServer nao conseguiu notificar o Cliente que a transação foi comitada…com sucesso. e então tem como o AppServer guardar essa mensagem com segurança…e tentar posteriormente comunicar o cliente…dai se o cliente for comunicado então o cliente PDV irá alterar a Flag dos cupons/registros que foram comitados no servidor… é loucura isso ? ou seria possivel?

Eu procurando me livrar3 …de arquivos textos… por isso tenhos dúvidas. desculpa as vezes a minha ignorância, mas to aprendendo.

oi,

uma sugestão, não sei se ajuda, você está pensando em implementação junto com a arquitetura ou tecnologia que vai utilizar
tente fazer alguns protótipos que simulam o que vc precisa e faça alguns testes
acho que é melhor você pensar primeiro em termos de requisitos não funcionais - minha opinião - na minha visão você precisa de algo que supra o problema da rede e tb que seja rapido na atualização dos PDV’s

definida a arquitetura implemente ela de uma forma modular de tal forma que se depois esta não atender mais os requitos NF seja facil fazer o upgrade

sobre a sua aplicação principal do front end, ela vai ser apenas flex? poderia detalhar um pouco mais sobre ela?

não sei se ajudei alguma coisa :slight_smile:

Uma coisa que você não pode esquecer é que todo pdv deve emitir nf, mesmo que a ponte com fibra ótica do seu link de 30000 reais/mes desabe. Se não me engano, o fisco nem homologa se não tiver esse recurso. Acredito que você tenha que manter algum tipo de cache/cópia em cada pdv local, que sincronize com o server. Lembro que um colega que fez um pdv em delphi me comentou a respeito (passado).

Espero que ajude

Editado: pdf != pdv :slight_smile:

[quote=qmx]Uma coisa que você não pode esquecer é que todo pdv deve emitir nf, mesmo que a ponte com fibra ótica do seu link de 30000 reais/mes desabe. Se não me engano, o fisco nem homologa se não tiver esse recurso. Acredito que você tenha que manter algum tipo de cache/cópia em cada pdv local, que sincronize com o server. Lembro que um colega que fez um pdv em delphi me comentou a respeito (passado).

Espero que ajude

Editado: pdf != pdv :)[/quote]

qmx, com relação a emissão de NF grande no PDv…acho que só em são paulo…pelo menos aqui em goiás…emiti somente o cupom fiscal…no ECf…caso o cliente queira a NF.grande ou NFE então agente emiti na aplicação retaguarda. A Emissão de NFE/NF será feita pela aplicação desenvolvida em Flex…que estará rodando na WEB…no AppServer da Matriz., enquanto cada caixa em sua respectiva loja terá o seu banco de dados. não trataremos nenhum dado por intermedio de arquivos texto puro. txt ou xml. a idéia do projeto é que seja. de Banco de dados para Banco de Dados…, e a minha dúvida…e como transferir esses registros de forma segura…mantendo a atomicidade das informações. ou seja…envolvendo tudo isso dentro de transação…distribuida.

[quote=André Fonseca]oi,

uma sugestão, não sei se ajuda, você está pensando em implementação junto com a arquitetura ou tecnologia que vai utilizar
tente fazer alguns protótipos que simulam o que vc precisa e faça alguns testes
acho que é melhor você pensar primeiro em termos de requisitos não funcionais - minha opinião - na minha visão você precisa de algo que supra o problema da rede e tb que seja rapido na atualização dos PDV’s

definida a arquitetura implemente ela de uma forma modular de tal forma que se depois esta não atender mais os requitos NF seja facil fazer o upgrade

sobre a sua aplicação principal do front end, ela vai ser apenas flex? poderia detalhar um pouco mais sobre ela?

não sei se ajudei alguma coisa :slight_smile: [/quote]

André, verdadeiramente eu vejo que estou pensando nas duas faces da moeda ao mesmo tempo. Mas eu tomei essa iniciativa em virtude de muitas pessoas questionar o uso de transação distribuida para esse tipo de cenário, visto que muitas softwares house que trabalham com automação comercial ainda utilizam arquivos texto puro para realizar interoperabilidade entre software de frente de caixa ou PDV e a aplicação principal, que chamam de retaguarda, Não obstante, o motivo mais forte é saber se EJB, WebServices ou Spring seria melhor em termos de manter a segurança enquanto os dados estivesse sendo enviados para matriz. e o PDV fosse notificado em tudo. Ou seja é como se fosse um dialogo entre marido e mulher. Se o marido falar, Podes fazer isso? Se a mulher não o ouvir, ele vai continuar persistindo. até ela ouvir. Acatei inicialmente a ideia do fatomas. A André. estou também preocupado com a escalabilidade com certeza, e com relação a pergunta se a appprincial se vai ser em flex sim, vai ser!. será onde o pessoal do departamento comercial, financeiro no futuro, contabilidade, controle de estoque irá trabalhar. equanto o PDV será somente a operadora e fiscal de caixa.

foi mal, quis dizer cupom fiscal - ou qualquer coisa fiscal :slight_smile:

Oi!

Segue anexo um diagrama para ajudar a demonstrar como vejo as relações entre os processos no seu projeto.

A idéia do diagrama é apenas facilitar o entendimento entre os participantes do tópico, por conta disto, regras de modelagem foram deixadas de lado na intenção de fazer com que as idéias fluissem de forma mais livre.

Explanação sobre os pontos demonstrados no diagrama.

DBMS : Banco de dados

POJOS : Classes correspondente a sua estrutura de dados descrita no banco de dados.

REPOSITORIES : Repositorios (ver DDD) poderá ser utilizado DAO ao invés de repositorios; perceba que eles não são a mesma coisa. Exitem algumas
discuções aqui no GUJ sobre as diferenças e opção de se utilizar um, o outro ou ambos.

SERVICES : Serviços para atender as requisições direcionadas ao modelo.

WebServices / Rmi : São as opções de acesso externo (PDV ou outras empresas) ao seu modelo.

M V C : Forma resumida que representa as interfaces gráficas utilizadas pelos usuários para acessar o modelo.

SERVIDOR JMS: Servidor (TCP/IP) para troca de mensagens.

ATUALIZAÇÃO: Processo para atualização de dados ocorridos na MATRIZ.

EQUALIZAÇÂO: Processo dedicado a sincronização dos dados entre os PDVs e a MATRIZ.

Obs. A idéia do uso do JMS neste seu projeto requer bastante cautela / estudo pelos seguintes motivos:
a) Domínio da técnica.
b) Estabilidade do meio de comunicação.
c) Rastreabilidade (dificuldade em encontrar as causas de erro e inconsistencia na atualização)

flws


Oi!

Segue anexo um diagrama para ajudar a demonstrar como vejo as relações entre os processos no seu projeto.

A idéia do diagrama é apenas facilitar o entendimento entre os participantes do tópico, por conta disto, regras de modelagem foram deixadas de lado na intenção de fazer com que as idéias fluissem de forma mais livre.

Explanação sobre os pontos demonstrados no diagrama.

DBMS : Banco de dados

POJOS : Classes correspondente a sua estrutura de dados descrita no banco de dados.

dei uma lida boa…e começei a enteder… DDD na verdade é uma abordagem diferente de desenvolvimento…olhei nesse site


SERVICES : Serviços para atender as requisições direcionadas ao modelo.

WebServices / Rmi : São as opções de acesso externo (PDV ou outras empresas) ao seu modelo.

M V C : Forma resumida que representa as interfaces gráficas utilizadas pelos usuários para acessar o modelo.

SERVIDOR JMS: Servidor (TCP/IP) para troca de mensagens.

Nesse caso o PDV ficaria informado que o Servidor conseguiu Inserir os dados da venda…e atraves desses dados gerasse o financeiro caso o cliente comprou em cheque…ou promissoria…gerasse a escrita fiscal, movimento gerencial, estoque e contabil…Dessa forma o PDV, então sabendo que uma vez tudo ocorreu bem na matriz. atualizaria a flag dos cupons…exemplo uma coluna da tabela…de vendas… tipo Sincronizado para true…isso quer dizer que aquele registro foi enviado com sucesso para matriz.

Esse processo seria um serviço tambem?

[quote=fantomas]Obs. A idéia do uso do JMS neste seu projeto requer bastante cautela / estudo pelos seguintes motivos:
a) Domínio da técnica.
b) Estabilidade do meio de comunicação.
c) Rastreabilidade (dificuldade em encontrar as causas de erro e inconsistencia na atualização)
[/quote]

Por este motivo é que agora te pergunto. Eu posso implementar o Servidor de JMS dentro do Mesmo servidor de aplicação onde estará o serviço ou em um Servidor de Aplicação J2EE em outra máquina vamos se dizer assim?

tens um tutorial bom que ensine implementar isso, algo parecido com cenário requerido pelo meu projeto? Grato!

flws

Baseado no que entendi, foi isso mesmo que eu quiz dizer.
A idéia é que essa parte ao meu ver teria que possuir uma execução independente, mesmo estando na mesma máquina.

O que vc escreveu me fez pensar sobre como vc irá determinar o que irá ficar no client (PDV) e o que ficará no server (MATRIZ); bastante atenção neste momento.

[quote=sfidencio]dei uma lida boa…e começei a enteder… DDD na verdade é uma abordagem diferente de desenvolvimento…olhei nesse site



[/quote]

Toquei no assunto DDD para vc perceber a importancia do modelo no sistema, quero dizer que vc não é obrigado a utilizar repositórios e nem ORMs;

Poderia ser chamado assim, mas não seria igual aos que foi mostrado no diagrama; seria um processo executado de forma independente que iria utilizar os serviços locais e remotos para atingir a sincronização das bases.

Você pode fazer das duas maneiras, máquinas separadas ou em apenas uma máquina; os servidores de aplicação normalmente já vem com algumas coisas prontas para isso até o Spring traz algumas coisas. Em termos de código você não escreve muito, porque o servidor de mensagens já faz tudo. Você vai levar mais tempo tentando entender e definindo qual a melhor estratégia do que escrevendo código.

Infelizmente não tenho uma especifica, o que já fiz foi fazer download e ler o tutorial para aprender o pouco que sei; utilizei este aqui http://activemq.apache.org/, existem outras implementações esta não é a única.

P.S Este seu projeto é complexo (na minha opinião) e possui vários pontos que requer bastante atenção, calma e estudo; portanto muita calma nesta hora.

Espero ter ajudado…

flws

Pessoal valeu mesmo, e fatmos…suas repostas me foram úteis, que Deus abençõe!

Fatomas, eu fiquei com dúvidas ainda…e resolvir desenhar a arquitetura…e tentar te explicar melhor o que quero, observe, O QUE realmente almejo.

Algo assim na camada de serviço na matriz…funcionaria.

1.  package br.com.fitalsolution.Bitvarejo.Retaguarda.model.service; 
2.    
3.  import java.util.List; 
4.    
5.  import org.springframework.beans.factory.annotation.Autowired; 
6.  import org.springframework.stereotype.Service; 
7.  import org.springframework.transaction.annotation.Propagation; 
8.  import org.springframework.transaction.annotation.Transactional; 
9.    
10.  br.com.fitalsolution.Bitvarejo.Retaguarda.model.Entity.Cargo;  //Nesse caso aqui..poderia importa um JavaBean normal..e que aqui tamos usando o DDD
11.  br.com.fitalsolution.Bitvarejo.Retaguarda.model.Repository.CargoRepository;
12.    
13.  @Service(value="cargoService") 
14.  @Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class) 
15.  public class CargoServiceImpl implements CargoService { 
16.    
17.      private CargoRepository cargoRepository; 
18.    
19.      @Autowired 
20.      public void setCargoRepository(CargoRepository cargoRepository) { 
21.          this.cargoRepository = cargoRepository; 
22.      } 
23.    
24.      public Cargo save(Cargo p_cargo) throws Exception { 
25.          try { 
26.              this.cargoRepository.save(p_cargo); 
27.              return p_cargo; 
28.          } catch (Exception e) { 
29.              throw new Exception("Não foi possível salvar." +e.getCause()); 
30.          } 
31.      } 
32.    
33.      public void remove(Cargo p_cargo) throws Exception { 
34.          try { 
35.              this.cargoRepository.remove(p_cargo); 
36.          } catch (Exception e) { 
37.              throw new Exception("Não foi possível excluir." +e.getMessage()); 
38.          } 
39.      } 
40.    
41.      public Cargo findById(Cargo p_cargo) throws Exception { 
42.          try { 
43.              return this.cargoRepository.findById(p_cargo); 
44.          } catch (Exception e) { 
45.              throw new Exception("Não foi possível procurar pela ID."+e.getMessage()); 
46.          } 
47.      } 
48.    
49.      public List<cargo> getList() throws Exception { 
50.          try { 
51.              return this.cargoRepository.getList(); 
52.          } catch (Exception e) { 
53.              throw new Exception("Não foi possível listar."+e.getMessage()); 
54.          } 
55.      } 
56.  } 

Minha dúvida é também saber como acessar esses serviço/metodo ai atraves de uma aplicação swing…considerando que acima…está usando Spring e não EJB. Por favor Fatomas me explique.


pessoal preciso de respostas…por gentileza.

Oi sfidencio,

Vi o teu poste só agora  :? .

Então...a classe de serviços está ok.

Vou tentar montar outro post de forma mais didatica possível para te mostra como acessar o serviço via swing.

flws

[quote=fantomas]Oi sfidencio,

Vi o teu poste só agora  :? .

Então...a classe de serviços está ok.

Vou tentar montar outro post de forma mais didatica possível para te mostra como acessar o serviço via swing.

flws
[/quote]

Flw brother!?!

NO SERVER

Incluir no arquivo applicationContext.xml.

	<bean id="cargoService"
		class="br.com.fitalsolution.Bitvarejo.Retaguarda.model.service.CargoServiceImpl" />

	<bean id="rmiCargoService" class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="serviceName" value="cargo-service" />
		<property name="service" ref="cargoService" />
		<property name="serviceInterface"
			value="br.com.fitalsolution.Bitvarejo.Retaguarda.model.service.CargoService" />
		<property name="registryPort" value="63333" /> 
	</bean>

Atributos chaves:
class = Implementação da forma de comunicação, no caso RMI poderia ser outro (tem mais 2 que vem com o spring)
value = número da porta onde os serviços ficarão disponíveis

NO CLIENT

Incluir no arquivo applicationContext.xml.

	<bean id="cargoService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceUrl" value="rmi://999.999.9.999:63333/cargo-service" />
		<property name="serviceInterface"
			value="br.com.fitalsolution.Bitvarejo.Retaguarda.model.service.CargoService" />
	</bean>

Imaginando que vc tenha uma classe utilitária como esta, outro código semelhante que execute a carga do arquivo applicationContext.xml:

import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Classe utilitária para recuperar beans gerenciados pelo Spring.
 */
public final class ContextUtil {

	private static ContextUtil INSTANCE = null;

	private ApplicationContext ctx;

	/**
	 * Construtor.
	 */
	private ContextUtil() throws Exception {
		ctx = new ClassPathXmlApplicationContext("applicationContext.xml") {
			public ClassLoader getClassLoader() {
				return getClass().getClassLoader();
			}

			protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
				super.initBeanDefinitionReader(reader);
				//reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
				reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
				reader.setBeanClassLoader(getClassLoader());
			}
		};
	}

	/**
	 * Recupera uma instância da classe.
	 * 
	 * @return ContextUtils.
	 */
	public static ContextUtil getInstance() {
		if (INSTANCE == null) {
			try {
				INSTANCE = new ContextUtil();
			} catch (Exception e) {
				throw new IllegalArgumentException(e);
			}
		}
		return INSTANCE;
	}

	/**
	 * Recupera um bean gerenciado pelo Spring.
	 * 
	 * @param beanName
	 *            Nome do bean.
	 * @return Object.
	 */
	public Object getBean(String beanName) {
		return ctx.getBean(beanName);
	}

	/**
	 * Recupera um bean gerenciado pelo Spring.
	 * 
	 * @param <T>
	 *            Tipo da classe.
	 * @param clazz
	 *            Classe.
	 * @param beanName
	 *            Nome do bean.
	 * @return Objeto.
	 */
	@SuppressWarnings("unchecked")
	public <T> T getBean(Class<T> clazz) {
		StringBuilder sb = new StringBuilder(clazz.getSimpleName());
		sb.replace(0, 1, sb.substring(0, 1).toLowerCase());
		return (T) getBean(sb.toString());
	}

	/**
	 * Recupera o gerenciador do Spring.
	 * 
	 * @return ApplicationContext.
	 */
	public ApplicationContext getContext() {
		return ctx;
	}

	public void reload() {
		ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	}
}

Você poderia utilizar assim:

public final class CargoController {
	
	private CargoService service = ContextUtil.getInstance().getBean(CargoService.class); // <----<< OBTEM O PROXY DO SERVIÇO

	public void update() throws Exception {
		this.service.update(this.model.getCargo());
		this.load();
		this.view.refresh();
	}

Espero ter ajudado.

flws

Tente fazer 2 módulos (client e outro server) como protótipo, para vc isolar a àrea de estudo.

Se vc for construir uma coisa mais complexa tente ser o mais organizado possível.

Não deixe o seu applicationContext.xml virar bagunça, deixo-o bem organizado ou divida em arquivos menores.

Infelizmente xml pode se tornar bem chato de analizar se estiver desorganizado, especialmente este do spring.

flws

ok,vou testar…te retorno depois!