Comunicação entre JSP e Desktop

8 respostas
juniovitor

Olá pessoal,

Boa tarde!

Estou com dois sistemas prontos, posso dizer idênticos… um JSP e outro Desktop. Ambos estão usando o mesmo banco e tem as mesmas funções! a dúvida é: como faço o sistema WEB atuar sobre o meu sistema Desktop??

Exemplo:

Suponha que o meu sistema desktop tenha algum evento a realizar que foi agendado para daqui 4 horas… dessa forma, pela web eu preciso que em meu sistema JSP(que estará na web) eu consiga cancelar a realização deste evento.

Alguém poderia me ajudar??

Aguardo!

Abraço!

8 Respostas

berg.pb

Fala JunioVito… td bem…

A resposta para esta questão, vc mesmo deu: se as duas aplicações estão utilizando a mesma base de dados, então, é só vc colocar o agendamento dos eventos no BD. Assim, não importa quem estará acessando, web ou desk, vcs acessarão e poderão manipular a mesma informação…

Para ficar até mais fácil de administrar, dentro das duplas onde contêm o agendamento das tarefas, vc podera colocar um atributo com o nome ou a matrícula do usuário que fez a alteração e, ainda, colocar um atributo tipo ‘destino’, para informar de onde veio a alteração: desktop ou web.

Blz?
Qualquer coisa é só postar…
[]'s

RaulCarlin

Se seu sistema está bem divido em camadas, não teria problema, agora se não estiver…

Como são esses sistemas? Dê mais detalhes desse “evento”…

Eu por exemplo tenho um sistema Desktop e outro Web que se comunicam entre si pois os meus objetos de negócio estão disponibilizados via RMI, assim não tenho problemas pois os dois vão na mesma fonte…

juniovitor

RaulCarlin,

Bom dia… obrigado por responder…

O meu sistema está bem divido sim, estou utilizando arquitetura MVC.

Detalhes:

Esse evento que falo, é o seguinte: O meu sistema faz uma leitura de um sensor, e com este valor realiza um cálculo! depois de realizar este cálculo ele identifica se deve ou não acionar um motor. O que quero é: se eu tiver um acionamento deste motor agendado para startar, com meu sistema JSP eu consiga ignorar este start como também visualizar todos os dados, desde que ambos utiliza os mesmos dados!!!

Obrigado!

Aguardo!

RaulCarlin

Duas possíveis soluções:

1 - Que este motor seja um Servlet(exemplo, pode ser WS, RMI, EJB, alguma coisa remota) que, o seu cliente desktop se comunique via rede e starte ele, assim, o JSP consegue interrompe-lo se quiser, pois os dois estariam manipulando o mesmo objeto…

2 - Como o amigo já disse, faça com que fique disponível no banco de dados alguma informação de que esse motor será startado, assim, quando o seu JSP quiser interromper, ele altera este valor e aí quando o cliente desktop for iniciar, ele primeiro verifica se o valor é de um “motor que deve ser iniciado” ou que foi cancelado pela web(ai ele não inicia)…

Sei que a explicação tá meio tosca, mas é mais ou menos assim que eu faria… :slight_smile:

B

além das dicas acima, vc pode usar uma applet para aplicação do sensor e usar o recurso LiveConnect que permite a página se comunicar com o applet via javascript.

juniovitor

RaulCarlin,

Obrigado mais uma vez pela atenção!

Entendi o que você quis dizer…

Mas ainda estou meio perdido! não sei por onde começar! suponha-se que não queira parar o motor, vamos imaginar que eu só possa cancelar a partida dele e não pará-lo qdo estiver funcionando!!! o q fazer nessa situação?

Outro ponto é: eu sou meio aprendiz em java, talvez esteja totalmente errado, por favor me corrija… Se eu conseguisse acessar o banco de dados na web com o meu desktop, para mim ficaria fácil de resolver este problema! com apenas uma exclusão de registro, tudo se resolveria. Mas não sei como fazer isso!!! tem como um sistema desktop utilizar um banco q esteja na web?

Aguardo!

Abraço!

RaulCarlin

Claro! Sem problema algum…

A URL dos dois devem apontar pro mesmo banco, sem nada diferente…

juniovitor

Legal!

Mais uma vez muito obrigado!

Veja o código a seguir, essa é minha classe para conexão local, tem como eu alterá-la para essa conexão com um bd que esteja na web? senão, onde posso encontrar um exemplo prático, pois nunca fiz nada parecido!

Aguardo!

PACOTE: BD/Conf_BD.java

/****************************************************************/
package modelo.bd;


public interface Conf_BD {
    public static String DRIVER = "org.gjt.mm.mysql.Driver";
    public static String URL_BD = "jdbc:mysql://localhost:3306/db_kanguru_abril";
    public static String USUARIO = "root";
    public static String SENHA = "root";
}
/****************************************************************/

PACOTE: BD/Conexao.java

/****************************************************************/
package modelo.bd;


import java.sql.*;

public class Conexao 
{
 private Connection conn;
 private boolean seConectou;
 private String classeDriver,
 		urlBanco,
 		login,
 		senha;
 
 public Conexao()
 {
  conn = null;
  seConectou = false;
  classeDriver = "";
  urlBanco = "";
  login = "";
  senha = "";
 }
 
 public void conectar (String classeDriver, String urlBanco, 
                       String login,        String senha)
 {
  this.classeDriver = classeDriver;
  this.urlBanco = urlBanco;
  this.login = login;
  this.senha = senha;
  try 
  {
   Class.forName(classeDriver);
   conn = DriverManager.getConnection (urlBanco, login, senha);
   seConectou = true;
   System.out.println("A conexão foi um sucesso\n");
  }
  catch(ClassNotFoundException e)  
  {
   seConectou = false;
   System.out.println("Classe(s) não encontrada(s): ");
   e.printStackTrace();
  }
  catch(Exception e) 
  {
   seConectou = false;
   System.out.println("Falha na conexão com o BD");
   e.printStackTrace();
  }
 }
 
 //se desconecta do BD
 public void desconectar()
 {
  try
  {
   seConectou = false;
   conn.close();
  }
  catch(Exception e1)
  {
   System.out.println("ERRO: ao desconectar do BD");
   e1.printStackTrace();
  }
 }
 
 //testa se esta conectado ou nao ao BD
 public boolean estaConectado()
 {
  return seConectou;
 }
 
 //metodo de consulta
public ResultSet consulta(String strSql)
 {
  try
  {
   //criando o objeto Statement para que seja possivel enviar as consultas
   Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
   //objeto do ResulSet para receber o resultado da consulta
   ResultSet rs = stmt.executeQuery(strSql);
   return rs;	
  } 
  catch(SQLException erro)
  {
   System.err.println(erro.getMessage());	
   return null;
  }
 }
 
 //metodo de TRATAMENTO DE DADOS (insercao, exclusao, alteracao)
 public String tratDados(String strSql)
 {
  try
  {
   //criando o objeto Statement para que seja possivel enviar as consultas
   Statement stmt = conn.createStatement();
   //executar sql
   stmt.execute(strSql);
  } 
  catch(SQLException erro)
  {
   System.err.println(erro.getMessage());	
   return "Erro!";
  }
  return "Sucesso!";
 }
 
     public boolean executa(String strSql)
     {
      boolean resp = true;
      try
      {
       //criando o objeto Statement para que seja possivel enviar as consultas
       Statement stmt = conn.createStatement();
       //executar sql
       stmt.execute(strSql);
      } 
      catch(SQLException erro)
      {
       System.err.println(erro.getMessage());	
       resp = false;
      }	
      return resp;
     }

}

/****************************************************************/

FIM

Abraço!

Criado 25 de junho de 2008
Ultima resposta 27 de jun. de 2008
Respostas 8
Participantes 4