Projeto - Desenvolvimento Java

17 respostas
black_fire

Estou iniciando um novo projeto onde estarei usando a tecnologia Java para desenvolvê-lo. Estou pessando em usar a estrutura que eu demonstro abaixo.
Esta estrutura está correta? Estou usando o conceito corretamente?

Um abraço para todos…


O caminho que o fluxo abaixo faz é mais ou menos assim:
:arrow: 1: Browser faz uma solicitação para um servlet
:arrow: 2: Servlet identifica qual a ação solicitada e valida a seção do usuário e identifica se ele tem permisão para efetuar a consulta
:arrow: 3: Um servlet é disparado conforme a ação solicitada
:arrow: 4: Servlet faz as validações necessárias
:arrow: 5: Cria-se um XML com os dados e a consulta a ser executada
:arrow: 6: Classe Java, específica para o Db solicitado traduz o XML em chamadas válidas para o banco
:arrow: 7: Envia o retorno para o servlet do item 4
:arrow: 8: Servlet chama uma página JSP informando o resultado da ação
:arrow: 9: Esta página exibe os resultados.
Ufa…

----------------------
                   |  Interface com o   |
                   |       Usuário      |
                   |--------------------|
                   |  JSP OU VELOCITY   |
                   |     JAVASCRIPT     |
                   ----------------------
                              |
                              |
                   ----------------------
                   | Controle de seção  |
                   | identific. da ação |
                   |  Encaminha a ação  |
                   |--------------------|
                   |       SERVLET      |
                   ----------------------
                              |
          ---------------------------------------
          |                   |                 |
 ------------------  ------------------  ------------------
 |      Ação 1    |  |      Ação 2    |  |      Ação 3    |
 |----------------|  |----------------|  |----------------|
 |     SERVLET    |  |     SERVLET    |  |     SERVLET    |
 ------------------  ------------------  ------------------
          |                   |                 |
 ------------------  ------------------  ------------------
 |  Envia Ação 1  |  |  Envia Ação 2  |  |  Envia Ação 3  |
 |----------------|  |----------------|  |----------------|
 |       XML      |  |       XML      |  |       XML      |
 ------------------  ------------------  ------------------
          |                   |                 |
          ---------------------------------------
                              |
                   ----------------------
                   |  Traduz o XML para |
                   |    chamdas SQL     |
                   |   Conforme o DB    |
                   |    selecionado     |
                   |--------------------|
                   |    CLASSE JAVA     |
                   ----------------------
                              |
                   ----------------------
                   |   BANCO DE DADOS   |
                   |--------------------|
                   |     SQL SERVER     |
                   |       ORACLE       |
                   |      INTERBASE     |
                   |      POSTEGREE     |
                   |         ETC        |
                   ----------------------

17 Respostas

cv1

Eu nao entendi o que vc ganha fazendo as consultas em XML… vc esta usando algum banco de dados XML (Xindice, por exemplo)?

black_fire

Estou usando o xml pois independente do banco que o cliente queira usar, os servlets que efetuarão as consultas serão sempre os mesmos e as consultas serão sempre executadas da mesma forma, a única coisa que vou ter que fazer é uma classe diferente para cada banco, de outra forma, sempre que eu for mudar minha base de dados terei que mudar o codigo dos servlets também:
Exemplo:
Chamadas do Servlet:

<Consulta>
   <HEADER>
       <FUNCAO>VERPASS</FUNCAO>
   </HEADER>
   <DADOS>
       <ITEM LOGIN="lramos" PASS="20030785" />
   </DADOS>
</Consulta>

:arrow: 1: Independente do banco o servlet sempre vai fazer a chamada de validação do login da mesma forma porém quando ele chama a função de uma classe para validar o login informando o xml esta classe será expecífica pra um determinado banco de dados, fazendo a chamda de uma procedure por exemplo.
:arrow: 2: Posso criar componente para efetuar algumas tarefas específica do sistema, deixando que outra ferramentas de desenvolvimento acessem sem que seja necessário que eu abra a base de dados para o kra.
Vamos supor que a empresa comprou um novo software e é necessário integrar o login com o login do meu sistema.
É super simples, eu passo o modelo do XML que ele tem que enviar para uma deteminada url e o xml que ele vai receber de resposta…

Betinhum

Fora do assunto: black_fire, :shock: no seu avatar não teria q ter escrito programador? :twisted: ou o cara não chega nem a ser programador? fica só no ‘progrador’? :?:

cv1

black_fire, nao querendo cortar o seu barato, mas acho que esse modelo de desenvolvimento nao funciona muito legal nao… aqui vao alguns dos motivos que eu tou conseguindo pensar agora (dá um tempo tambem, sao 9 da manha num sabado, eu acabei de chegar da balada :D)

:arrow: Voce ainda vai ter que programar dialeto por dialeto cada base de dados diferente… isso ja existe, com o Hibernate, entao pq nao usar o que ja tem pronto? :wink:

:arrow: Se eu entendi direito, vc esta passando esse XML pra uma outra camada, possivelmente em outra JVM, possivelmente em outra maquina. Note que isso gasta recursos meio que desenecessarios, sendo que pelo menos essa camada (acesso a banco de dados e persistencia em geral) ja existe de forma simplificada com ferramentas como o Hibernate ou qqer implementacao de JDO, ou de forma distribuida, com EJBs CMP :wink:

:arrow: Se eu entendi direito, tambem, o seu XML chama stored procedures. Uma interjeicao: AAAAAAAAAAAAARGH! :smiley:

Se vc vai chamar stored procedures, entao a sua independencia de banco de dados ja meio que morreu por aqui, nao? :wink:

black_fire

Legal, mas exatamente como eu poderia estar montando um projeto independente do banco de dados?

“cv”:
Se eu entendi direito, vc esta passando esse XML pra uma outra camada, possivelmente em outra JVM, possivelmente em outra maquina. Note que isso gasta recursos meio que desenecessarios, sendo que pelo menos essa camada (acesso a banco de dados e persistencia em geral) ja existe de forma simplificada com ferramentas como o Hibernate ou qqer implementacao de JDO, ou de forma distribuida, com EJBs CMP)

Na vedada o tratamento do xml fica na mesma máquina e a chamada de procedures por exemplo não é o xml que faz e sim a classe montada para aquele banco de dados:

Tinha imaginado mais ou menos o seginte:
:arrow: Quando a camada que trata o xml recebe uma chamada ela vai efetuar as suas ações dependendo do banco de dados para o qual ela foi projetada.
No caso de procedure eu teria que ter pocedures que executam as mesmas funções em cada um dos bancos que eu vá disponibilizar, ou no caso de bancos estáticos esta inteligência estaria no dentro da classe mesmo.

Vou dar uma vasculhada aki para ver se eu saco o que é esse hibernate.
Valeu pela força…

:?: seria mais ou menos isso então?

---------------------- 
                   |  Interface com o   | 
                   |       Usuário      | 
                   |--------------------| 
                   |  JSP OU VELOCITY   | 
                   |     JAVASCRIPT     | 
                   ---------------------- 
                              | 
                              | 
                   ---------------------- 
                   | Controle de seção  | 
                   | identific. da ação | 
                   |  Encaminha a ação  | 
                   |--------------------| 
                   |       SERVLET      | 
                   ---------------------- 
                              | 
          --------------------------------------- 
          |                   |                 | 
------------------  ------------------  ------------------ 
|      Ação 1    |  |      Ação 2    |  |      Ação 3    | 
|----------------|  |----------------|  |----------------| 
|     SERVLET    |  |     SERVLET    |  |     SERVLET    | 
------------------  ------------------  ------------------ 
          |                   |                 | 
          --------------------------------------- 
                              | 
                   ----------------------         ---------------------- 
                   |   Efetua as ações  |         |         XML        | 
                   |   Conforme o DB    |---------|     de consultas   |
                   |    selecionado     |         ----------------------
                   |--------------------|                    |
                   |    CLASSE JAVA     |         ---------------------- 
                   ----------------------         | Outras ferramentas |
                              |                   | de desenvolvimento |
                   ----------------------         ---------------------- 
                   |   BANCO DE DADOS   |
                   |--------------------|
                   |     SQL SERVER     |
                   |       ORACLE       |
                   |      INTERBASE     |
                   |      POSTEGREE     |
                   |         ETC        |
                   ----------------------
Betinhum

Vc consertou ou era ilusão de ótica? :?:

Acho q estou ficando louco… :shock:

black_fire

eu arrumei :twisted: … hehehe… 8)

Rafael_Steil

Mas voce esta querendo usar XML simplesmente para propoprcionar “independencia transparente” entre os diversos banco de dados? Nenhum outro motivo ou razao a mais?

Rafael

black_fire

Isso mesmo, minha intenssão é utilizar o XML para padronizar as chamadas de ações o proporcionar um integração total com outros sistemas. sempre haveria uma camada entre o banco de dados e o XML e esta camada será específica para um determinado banco.
Por exemplo, suponhamos que esta classe chame-se AcaoDB.class, haveria um AcaoDB.class para o SQLServer, um para o MySql, um para o Oracle, um para o Interbase e etc.
Suponhamos que o cliente queira usar o SQLServer, vou ter um Script SQL para rodar no banco e a classe AcaoDB.class para o SqlServer
ou se o cliente resolver usar o Oracle, vou ter um outro Script SQL específico para o Oracle e uma outra classe AcaoDB.class.

Ou melhor ainda, dentro do próprio AcaoDB.class posso ter uma verificação se os objetros de banco necessários existem, se não a própria classe poderia criá-los.

Haveria tambem um servlet que estaria aguardando um post com um conteúdo xml, este servlet teria como função uma integração com outro sitemas que necessitem de informações.
Suponhamos que a empresa adquira um novo sofware em :snipersmile: .Net (urgh…), ou em :snipersmile: VB (eca…), não seria necessário utilizar um acesso direto ao banco, assim seria dado um post com o xml para o servlet e este retornaria os dados também em xml.

Ufa, acho que seria mais ou menos isso, desculpe o tamanho da msg, me empolgei … :shock:

Mas o cv ja me jogou um balde de água gelada. :cry:

Estou vendo que outra solução poderia estar substituindo esta ação…

cv1

Agua gelada nao, eu tou eh querendo te salvar de ter de trilhar o caminho mais dificil, sendo que ja tem tanto software bom por ai, so esperando pra ser usado :wink:

Essa descricao dos XMLs para integracao de sistemas que vc deu por exemplo, me parecem um otimo uso pra WebServices… e vc pode usar o Apache Axis pra isso (mais info com o urubatan, provavelmente) :smiley:

No mais, acabou de sair uma noticia sobre o LDBC, que, se eu entendi bem, resolve o seu problema de acessar multiplos bancos de dados usando o mesmo dialeto :smiley:

Ei-lo:

http://www.guj.com.br/servlet/guj?PARSE=true&MAMUTE_ACTION=br.com.guj.action.ListStory&MAMUTE_TEMPLATE=ShowStory&LIST_STORY=single&StoryId=258&PAGE=1

K

Abstracao de banco de dados ja tem muitas implementacoes. Acho que vale a pena voce dar uma pesquisada legal antes de comecar a escrever codigo. Posso te dar algumas sugestoes de arcaboucos que eu conheco:

[list]
torque -> Utiliza um xml que define as entidades para gerar (compile time) uma serie de arquivos .java (4 por entidade). (http://db.apache.org/torque)
ojb -> Utiliza um xml (nao gera codigo) que descreve qual attributo de qual classe deve ser persistente (http://db.apache.org/ojb)
hibernate -> nunca usei mas ouvi falar bem
JDBC -> hehe, este dispensa explicacoes.
[/list]

O esquema de XML que voce descreve lembra muito XML-RPC (WebServices se baseia nisto, nao?). Mas isto so vale a pena (quando vale) para chamar metodos que nao podem ser chamados dentro da VM, tipo um programa fora da VM binario, ou em outro host.

Ja para fazer o esquema dos actions, experimenta o turbine ou o struts. Eles ja tem um esquema todo implementado para MVC com servlets.

PS: Sou meio jakarta fan, entao sou bem suspeito. Mas gostava de ojb antes dele ser do apache :wink:

black_fire

:arrow: Blz, andei vasculhando aki no forum e vi que os fontes aki do site podem ser baixados e se não me engano o conceito que foi utilizado é mais ou menos o mesmo que pretendo utilizar sem a implementação de XML.

:idea: Para fechar com chave de ouro este debate tenho só mais duas dúvidas:

:?: Tanto o Velocit quanto o Struts são apenas gerenciadores de layout ou ou Velocity é para uma determinada coisa e Struts para outra?

:?: Esta é mais para o cv, mas é lógico que qualquer resposta é bem vinda (descupe se a pergunta parece meio idiota … :oops: …). Persistencia de banco de dados: É um termo utilizado para manipulação de dados, é uma outra forma específica de utilizar os bancos de dados ou não tem nada a ver com o que eu disse.

Valeu galera pela força…
Um grande abraço para todos… :lol: 8)

K

O velocity eh um framework de templates.
O struts eh um framework para desenvolver webapplications usando MVC.

Um objeto persistente eh um objeto que tem seu estado persistido de alguma forma. Ou seja, se voce desliga o computador ou a JVM, quando ligar ela de novo o objeto esta “persistente” e continua como estava antes.

Persistencia de banco de dados eh persistencia feita utilizando um banco de dados para persistir o estado do objeto.

black_fire

Agora eu saquei, quando vc usa a persistencia vc mata aquele problema de perder dados no meio de um cadastro.

:idea: Pesando porcamente, seria o mesmo que durante um processo de cadastro por exemplo cada campo que o usuário vai digitando eu vou salvando os dados em um txt. caso haja a perda de conexão do meio do processo, quando o usuário retornar posso prosseguir do ponto onde foi terminada a conexão.
Isso seria uma espécie de persistencia. Correto?

Valeu pessoal, agora acho que peguei legal o caminho e vou por a mão na massa.

Um grande abraço para todos e valeu a força.

cv1

Rodrigo,

Persistencia de dados eh manter seus dados seguros caso a maquina tenha que ser desligada. Só isso :slight_smile:

Banco de dados faz persistencia? Sim, claro… arquivo texto? Yep… objetos serializados em um arquivo? Tambem… manter tudo em memoria? Nao - se um dia vc precisar reiniciar a maquina, vc perde os dados, certo? :smiley:

cv1

Leia mais sobre o Velocity:

http://jakarta.apache.org/velocity

E leia mais sobre o Struts:

http://jakarta.apache.org/struts

Garanto que lá tem descrições muito melhores do que as nossas meras respostas aqui :smiley:

K

Isto mesmo. O que voce descreveu geralmente eh implementado como “persistent session”. Tipo a sessao do usuario eh persistente. Isto da pra fazer ate em (eca!) php :slight_smile:

Em ejb isto se chama “Stateful SessionBean”. Tipo, uma sesao que tem um estado que eh gravado. O contrario seria o Stateless SessionBean.

[]s

Criado 30 de agosto de 2003
Ultima resposta 2 de set. de 2003
Respostas 17
Participantes 5