Salvar Dados em Banco de dados RMI
Bom dia!!
Prezados estou com projeto de RMI, porem não consigo fazer com que os Dados sejam salvos no Banco de Dados.
Preciso fazer as seguintes alterações
- Inserir;
- Localizar;
- Editar;
- Excluir;
Estarei utilizando métodos RMI para atualizar as classes clientes.
Como faço para enviar o projeto para q seja mais fácil a visualização dos erros?
package teste;
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.awt.event.KeyEvent;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Toolkit;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JButton;
import com.sun.corba.se.impl.encoding.CodeSetConversion.BTCConverter;
import Banco.Conexao;
import Banco.Cprodutos;
import Est.Model.*;
import Est.Servidor.*;
import java.util.ArrayList;
public class Produto extends JFrame {
private static final long serialVersionUID = 1L;
protected static final int YES_NO_OPTION = 0;
protected static final int QUESTION_MESSAGE = 0;
/*
* Declaração das Variáves
*/
private JPanel jContentPane = null;
private JPanel jPanel = null;
private JLabel jLProdCodigo= null;
private JLabel jLProdNome = null;
private JLabel jLProdUnid = null;
private JLabel jLProdPreco = null;
private JLabel jLProdMin = null;
private JLabel jLProdMax = null;
private JTextField jTFProdCodigo = null;
private JTextField jTFProdNome = null;
private JTextField jTFProdPreco = null;
private JTextField jTFProdUnid = null;
private JTextField jTFProdMin = null;
private JTextField jTFProdMax = null;
private JButton jBSalvarProduto = null;
private JButton jBEditarProduto = null;
private JButton jBLocalizaProduto = null;
private JButton jBExcluProduto = null;
/*
* Inicialização variável para habilitar botões da interface
*/
private int controle=1;
private double valor;
InterfaceEstoque estoque;
Cprodutos cproduto;
Conexao conn;
/*
* Atributos de campos e Label
*/
private JPanel getJPanel() {
if (jPanel == null) {
jLProdCodigo = new JLabel();
jLProdCodigo.setBounds(new Rectangle(13, 15, 50, 16));
jLProdCodigo.setText("Codigo:");
jLProdNome = new JLabel();
jLProdNome.setBounds(new Rectangle(13, 40, 50, 16));
jLProdNome.setText("Nome:");
jLProdPreco = new JLabel();
jLProdPreco.setBounds(new Rectangle(195, 65, 50, 16));
jLProdPreco.setText("Preço:");
jPanel = new JPanel();
jLProdUnid = new JLabel();
jLProdUnid.setBounds(new Rectangle(13, 65, 50, 16));
jLProdUnid.setText("Unidade:");
jLProdMin = new JLabel();
jLProdMin.setBounds(new Rectangle(13, 90, 60, 16));
jLProdMin.setText("Est.Mím.:");
jLProdMax = new JLabel();
jLProdMax.setBounds(new Rectangle(195, 90, 60, 16));
jLProdMax.setText("Est.Máx.:");
jPanel.setLayout(null);
jPanel.add(jLProdCodigo, null);
jPanel.add(jLProdNome, null);
jPanel.add(jLProdPreco, null);
jPanel.add(jLProdUnid, null);
jPanel.add(jLProdMin, null);
jPanel.add(jLProdMax, null);
jPanel.add(getJTFProdCodigo(), null);
jPanel.add(getJTFProdNome(), null);
jPanel.add(getJTFProdUnid(), null);
jPanel.add(getJTFProdMin(), null);
jPanel.add(getJTFProdMax(), null);
jPanel.add(getJTFProdPreco(), null);
jPanel.add(getJBSalvarProduto(), null);
jPanel.add(getJBEditarProduto(), null);
jPanel.add(getJBLocalizaProduto(), null);
jPanel.add(getJBExcluProduto(), null);
}
return jPanel;
}
/*
* Definição do campo tipo texto Código Produto
*/
private JTextField getJTFProdCodigo() {
if (jTFProdCodigo == null) {
jTFProdCodigo = new JTextField();
jTFProdCodigo.setBounds(new Rectangle(75, 13, 87, 20));
}
return jTFProdCodigo;
}
/*
* Definição do campo tipo texto Nome Produto
*/
private JTextField getJTFProdNome() {
if (jTFProdNome == null) {
jTFProdNome = new JTextField();
jTFProdNome.setBounds(new Rectangle(75, 38, 270, 20));
}
return jTFProdNome;
}
/*
* Definição do campo tipo texto Preço Produto
*/
private JTextField getJTFProdPreco() {
if (jTFProdPreco == null) {
jTFProdPreco = new JTextField();
jTFProdPreco.setBounds(new Rectangle(257, 63, 87, 20));
}
return jTFProdPreco;
}
/*
* Definição do campo tipo texto Unidade Produto
*/
private JTextField getJTFProdUnid() {
if (jTFProdUnid == null) {
jTFProdUnid = new JTextField();
jTFProdUnid.setBounds(new Rectangle(75, 63, 87, 20));
}
return jTFProdUnid;
}
/*
* Definição do campo tipo texto Estoque Mínimo Produto
*/
private JTextField getJTFProdMin() {
if (jTFProdMin == null) {
jTFProdMin = new JTextField();
jTFProdMin.setBounds(new Rectangle(75, 88, 87, 20));
}
return jTFProdMin;
}
/*
* Definição do campo tipo texto Estoque Máximo Produto
*/
private JTextField getJTFProdMax() {
if (jTFProdMax == null) {
jTFProdMax = new JTextField();
jTFProdMax.setBounds(new Rectangle(257, 88, 87, 20));
}
return jTFProdMax;
}
/*
* Função Botão Salvar, Registra a conecção com o BD e envia dados a serem salvos
*/
private JButton getJBSalvarProduto() {
if (jBSalvarProduto == null) {
jBSalvarProduto = new JButton();
jBSalvarProduto.setBounds(new Rectangle(12, 130, 70, 22));
jBSalvarProduto.setText("Salvar");
jBSalvarProduto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
Registry registroLocal = LocateRegistry.getRegistry("localhost",5000);
Mensageiro mensageiroLocal = (Mensageiro) registroLocal.lookup( "local" );
Prod produto = new Prod();
produto.setProdCod(jTFProdCodigo.getText());
produto.setProdNome(jTFProdNome.getText());
produto.setProdUnid(jTFProdUnid.getText());
produto.setProdPreco(Double.parseDouble(jTFProdPreco.getText()));
produto.setProdMin(Double.parseDouble(jTFProdMin.getText()));
produto.setProdMax(Double.parseDouble(jTFProdMax.getText()));
cproduto.CadastrarProduto(produto);
mensageiroLocal.cadastrarProduto(produto);
//Após inserir o produto no banco local, recuperar do banco o código do produto;
int codigoProduto = 11;
Estoque e1 = new Estoque(codigoProduto, produto.getProdMin(), produto.getProdMax(),0);
ArrayList<Estoque> list = new ArrayList<Estoque>();
list.add(e1);
boolean resultado = estoque.InserirProduto(list);
if (resultado){
System.out.println("Produto inserido no estoque");
}
else{
System.out.println("Erro ao inserir o produto no estoque");
}
//Editar
Estoque e2 = new Estoque(2,0,100,0);
estoque.UpdateProduto(e2);
//Remover
Estoque e3 = new Estoque();
e3.setIdProduto(5);
ArrayList<Estoque> list2 = new ArrayList<Estoque>();
list2.add(e3);
estoque.RemoverProduto(list2);
} catch (AccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (valor==1)
{
jBLocalizaProduto.setEnabled(true);
jBEditarProduto.setEnabled(false);
jBExcluProduto.setEnabled(false);
limparcampos();
}
}
});
}
return jBSalvarProduto;
}
protected byte[] Prod(String ProdNome) {
// TODO Auto-generated method stub
return null;
}
/**
* This method initializes jBEditarProduto
*
* @return javax.swing.JButton
*/
private JButton getJBEditarProduto() {
if (jBEditarProduto == null) {
jBEditarProduto = new JButton();
jBEditarProduto.setBounds(new Rectangle(97, 130, 71, 21));
jBEditarProduto.setText("Editar");
jBEditarProduto.setEnabled(false);
jBEditarProduto.setMnemonic(KeyEvent.VK_UNDEFINED);
jBEditarProduto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
controle=2;
jTFProdCodigo.setEnabled(true);
jTFProdNome.setEnabled(true);
jTFProdUnid.setEnabled(true);
jTFProdPreco.setEnabled(true);
jTFProdMin.setEnabled(true);
jTFProdMax.setEnabled(true);
jBEditarProduto.setEnabled(false);
}
});
}
return jBEditarProduto;
}
/**
* This method initializes jBLocalizaProduto
*
* @return javax.swing.JButton
*/
private JButton getJBLocalizaProduto() {
if (jBLocalizaProduto == null) {
jBLocalizaProduto = new JButton();
jBLocalizaProduto.setBounds(new Rectangle(175, 130, 90, 22));
jBLocalizaProduto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String Produto = JOptionPane.showInputDialog("Informe o Nome do Produto:");
controle = 2;
try {
Registry registroLocal = LocateRegistry.getRegistry("localhost",5000);
Mensageiro mensageiroLocal = (Mensageiro) registroLocal.lookup( "local" );
Registry registroCompras = LocateRegistry.getRegistry("localhost",5001);
Mensageiro mensageiroCompras = (Mensageiro) registroCompras.lookup( "compras" );
Registry registroEstoque = LocateRegistry.getRegistry("localhost",5002);
Mensageiro mensageiroEstoque = (Mensageiro) registroEstoque.lookup( "estoque" );
Registry registroVendas = LocateRegistry.getRegistry("localhost",5003);
Mensageiro mensageiroVendas = (Mensageiro) registroVendas.lookup( "vendas" );
Prod produto = new Prod();
produto.setProdNome(jTFProdNome.getText());
produto.setProdUnid(jTFProdUnid.getText());
produto.setProdPreco(Double.parseDouble(jTFProdPreco.getText()));
produto.setProdMin(Double.parseDouble(jTFProdMin.getText()));
produto.setProdMax(Double.parseDouble(jTFProdMax.getText()));
} catch (AccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NotBoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(valor==1)
{
jBEditarProduto.setEnabled(true);
jBExcluProduto.setEnabled(true);
jBLocalizaProduto.setEnabled(false);
jTFProdCodigo.setEnabled(false);
jTFProdNome.setEnabled(false);
jTFProdUnid.setEnabled(false);
jTFProdPreco.setEnabled(false);
jTFProdMax.setEnabled(false);
jTFProdMin.setEnabled(false);
}
else
JOptionPane.showMessageDialog(null,"Produto não Encontrado!!");
}
});
jBLocalizaProduto.setText("Localizar");
}
return jBLocalizaProduto;
}
/**
* This method initializes jBExcluProduto
*
* @return javax.swing.JButton
*/
private JButton getJBExcluProduto() {
if (jBExcluProduto == null) {
jBExcluProduto = new JButton();
jBExcluProduto.setBounds(new Rectangle(275, 129, 73, 22));
jBExcluProduto.setEnabled(false);
jBExcluProduto.setText("Excluir");
jBExcluProduto.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int resposta = JOptionPane.showConfirmDialog(null, "Confirma a Exclusão do Registro?",
"Sistema", YES_NO_OPTION, QUESTION_MESSAGE);
if (resposta==0)
{
try {
Registry registroLocal = LocateRegistry.getRegistry("localhost",5000);
Mensageiro mensageiroLocal = (Mensageiro) registroLocal.lookup( "local" );
Prod produto = new Prod();
produto.setProdNome(jTFProdNome.getText());
produto.setProdUnid(jTFProdUnid.getText());
produto.setProdPreco(Double.parseDouble(jTFProdPreco.getText()));
produto.setProdMin(Double.parseDouble(jTFProdMin.getText()));
produto.setProdMax(Double.parseDouble(jTFProdMax.getText()));
mensageiroLocal.cadastrarProduto(produto);
} catch (AccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NotBoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if (valor==1)
{
jBExcluProduto.setEnabled(false);
jBEditarProduto.setEnabled(false);
jTFProdCodigo.setEnabled(true);
jTFProdNome.setEnabled(true);
jTFProdUnid.setEnabled(true);
jTFProdPreco.setEnabled(true);
jTFProdMax.setEnabled(true);
jTFProdMin.setEnabled(true);
JOptionPane.showMessageDialog(null,"Dados Atualizados...");
}
else
JOptionPane.showMessageDialog(null,"Exclusão Cancelada..");
}
});
}
return jBExcluProduto;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Produto thisClass = new Produto();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* This is the default constructor
*/
public Produto() {
super();
initialize();
Registry registroEstoque;
try {
registroEstoque = LocateRegistry.getRegistry("localhost",5001);
estoque = (InterfaceEstoque) registroEstoque.lookup( "ServicoEstoque" );
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn = new Conexao();
cproduto = new Cprodutos();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(368, 206);
this.setContentPane(getJContentPane());
this.setTitle("Cadastro de Produtos");
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int)(dim.width-this.getWidth())/2;
int y = (int)(dim.height-this.getWidth())/2;
this.setLocation(x,y);
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJPanel(), BorderLayout.CENTER);
}
return jContentPane;
}
public void limparcampos()
{
jTFProdCodigo.setText("");
jTFProdNome.setText("");
jTFProdUnid.setText("");
jTFProdPreco.setText("");
jTFProdMin.setText("");
jTFProdMax.setText("");
}
}
Warley Coelho
Curtidas 0
Respostas
Warley Coelho
22/06/2009
Segue abaixo Link do projeto:
https://www.devmedia.com.br/imagens/discovirtual/211303/RMI/Projeto.rar
Sds...
GOSTEI 0
Henrique Weissmann
22/06/2009
Warlei,
por favor, me envie todos os logs de saida da sua aplicação para que eu possa analisá-los e, a partir dai, ver o que pode estar dando errado, ok?
Aguardo seu retorno.
por favor, me envie todos os logs de saida da sua aplicação para que eu possa analisá-los e, a partir dai, ver o que pode estar dando errado, ok?
Aguardo seu retorno.
GOSTEI 0
Warley Coelho
22/06/2009
Bom dia!!
Caro Henrique;
Disponibilizei o projeto no Disco virtual em https://www.devmedia.com.br/imagens/discovirtual/211303/RMI/Projeto.rar, no caso vc estava precisando era dos erros que apresentam no console?
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at teste.Produto.<init>(Produto.java:469)
at teste.Produto$5.run(Produto.java:453)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 14 more
GOSTEI 0
Henrique Weissmann
22/06/2009
Warlei,
com base no log que você me enviou, segue uma lista de itens a serem verificados em sua aplicação:
* No servidor o serviço encontra-se em execução?
* Caso o serviço no servidor se encontre em execução, há algum firewall bloqueando a porta de comunicação?
* O host localhost pode ser um problema. Já vi casos em que o nome localhost encontrava-se alterado nas configurações de DNS do computador. Nestes casos, tente enviar o seu chamado para o IP 127.0.0.1 (que corresponde ao localhost) ou mesmo o IP do seu computador e verifique o resultado.
No caso do Windows, você deve verificar também nesta terceira hipótese o arquivo lmhosts para ver se algo foi alterado. Caso tenha sido (e você não encontre uma linha definindo o nome lmhosts), você pode adicioná-lo manualmente (não tenho certeza se é necessário reiniciar o computador, sendo assim eu o reiniciaria neste caso)
Mais informações sobre o arquivo LMHOSTS podem ser encontradas aqui: http://www.guiadohardware.net/termos/lmhosts
Verifique estes itens e em seguida entre em contato conosco novamente para que possamos dar prosseguimento a este caso.
com base no log que você me enviou, segue uma lista de itens a serem verificados em sua aplicação:
* No servidor o serviço encontra-se em execução?
* Caso o serviço no servidor se encontre em execução, há algum firewall bloqueando a porta de comunicação?
* O host localhost pode ser um problema. Já vi casos em que o nome localhost encontrava-se alterado nas configurações de DNS do computador. Nestes casos, tente enviar o seu chamado para o IP 127.0.0.1 (que corresponde ao localhost) ou mesmo o IP do seu computador e verifique o resultado.
No caso do Windows, você deve verificar também nesta terceira hipótese o arquivo lmhosts para ver se algo foi alterado. Caso tenha sido (e você não encontre uma linha definindo o nome lmhosts), você pode adicioná-lo manualmente (não tenho certeza se é necessário reiniciar o computador, sendo assim eu o reiniciaria neste caso)
Mais informações sobre o arquivo LMHOSTS podem ser encontradas aqui: http://www.guiadohardware.net/termos/lmhosts
Verifique estes itens e em seguida entre em contato conosco novamente para que possamos dar prosseguimento a este caso.
GOSTEI 0
Warley Coelho
22/06/2009
Boa Tarde!
Prezado Henrique;
* O servidor de serviço encontra-se em execução - OK!
* O firewall não está bloqueando a porta de comunicação - OK!
* Fiz a alteração do host localhost para 127.0.0.1 e o erro persiste.
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at teste.Produto.<init>(Produto.java:469)
at teste.Produto$5.run(Produto.java:453)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 14 more
O arquivo lmhosts não consegui indentificar.
# Copyright (c) 1993-1999 Microsoft Corp.
#
# Este ‚ um exemplo de arquivo LMHOSTS utilizado pelo TCP/IP do Microsoft
# Windows.
#
# Este arquivo cont‚m os mapeamentos de endere‡os IP para os nomes (NetBIOS)
# dos computadores. Cada entrada deve estar em uma linha separada. O endere‡o
# IP deve ser colocado na primeira coluna seguido pelo nome do computador
# correspondente. O endere‡o IP e o nome do computador devem estar separados
# por pelo menos um espa‡o ou caractere de tabula‡ao. O caractere "#" ‚
# usado geralmente para indicar o in¡cio de um coment rio (veja as exce‡oes
# abaixo).
#
# Este arquivo ‚ compat¡vel com os arquivos LMHOSTS do TCP/IP do Microsoft
# LAN Manager 2.x., e oferece as seguintes extensoes:
#
# #PRE
# #DOM:<dom¡nio>
# #INCLUDE <nome_de_arquivo>
# #BEGIN_ALTERNATE
# #END_ALTERNATE
# \0xnn (aceita caracteres nao imprim¡veis)
#
# Qualquer entrada no arquivo que seja seguida pelos caracteres "#PRE" ser
# carregada previamente no cache de nomes. Por padrao, as entradas nao sao
# carregadas previamente e sao analisadas somente ap¢s falhas na resolu‡ao de
# nomes dinƒmica.
#
# Qualquer entrada no arquivo que seja seguida por "#DOM:<dom¡nio>" ser
# associada ao dom¡nio especificado por <dom¡nio>. Isso afeta a forma como os
# servi‡os Localizador e Logon atuam nos ambientes TCP/IP. Para carregar
# previamente o nome do host associado … entrada #DOM, ‚ necess rio adicionar
# tamb‚m a cl usula #PRE … linha. O dom¡nio sempre ‚ carregado previamente,
# apesar de nao ser exibido quando o cache de nomes ‚ exibido.
#
# A especifica‡ao de "#INCLUDE <nome_de_arquivo>" for‡a o software RFC
# NetBIOS (NBT) a procurar e analisar o <nome_de_arquivo> como se fosse
# local. <nome_de_arquivo> ‚ geralmente um nome UNC, permitindo que um
# arquivo lmhosts central seja mantido em um servidor. Sempre ‚ necess rio
# fornecer um mapeamento para o endere‡o IP de um servidor antes do #INCLUDE.
# Esse mapeamento deve conter a cl usula #PRE. Al‚m disso, o compartilhamento
# "public" no exemplo abaixo deve estar na lista LanManServer de
# "NullSessionShares" para que m quinas clientes possam ler o arquivo LMHOSTS.
# Simplesmente adicione "public" … lista que se encontra na chave do Registro
# \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares.
#
# As palavras-chave #BEGIN_ e #END_ALTERNATE permitem agrupar v rias
# senten‡as #INCLUDE. Um £nico #INCLUDE que tenha ˆxito far com que todo
# o grupo tamb‚m o tenha.
#
# Finalmente, caracteres nao imprim¡veis podem ser incorporados a esses
# mapeamentos, primeiro colocando-se aspas nos nomes NetBIOS e, em seguida,
# utilizando-se a nota‡ao \0xnn para especificar um valor hexadecimal para
# um caractere nao imprim¡vel.
#
# O seguinte exemplo ilustra todas essas extensoes:
#
# 102.54.94.97 rino #PRE #DOM:conexao de rede #C.D. do grupo de rede
# 102.54.94.102 "nomeaplic \0x14" #servidor aplic especiais
# 102.54.94.123 popular #PRE #servidor de origem
# 102.54.94.117 srvlocal #PRE #devido ao include
#
# #BEGIN_ALTERNATE
# #INCLUDE \\srvlocal\public\lmhosts
# #INCLUDE \\rino\public\lmhosts
# #END_ALTERNATE
#
# No exemplo acima, o servidor "nomeaplic" cont‚m um caractere especial em
# seu nome, os nomes de servidores "popular" e "servlocal" sao previamente
# carregados e o nome do servidor "rino" ‚ especificado para que possa ser
# utilizado para um posterior #INCLUDE no arquivo lmhosts central se
# o sistema "localsrv" nao estiver dispon¡vel.
#
# Note que o arquivo inteiro ‚ analisado, insive os coment rios, sempre
# que ele ‚ verificado. Por isso, deve-se manter o menor n£mero poss¡vel
# de coment rios para se aumentar o desempenho. Sendo assim, nao ‚
# recomend vel se adicionar entradas de arquivos lmhosts ao final do arquivo.
Prezado Henrique;
* O servidor de serviço encontra-se em execução - OK!
* O firewall não está bloqueando a porta de comunicação - OK!
* Fiz a alteração do host localhost para 127.0.0.1 e o erro persiste.
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at teste.Produto.<init>(Produto.java:469)
at teste.Produto$5.run(Produto.java:453)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 14 more
O arquivo lmhosts não consegui indentificar.
# Copyright (c) 1993-1999 Microsoft Corp.
#
# Este ‚ um exemplo de arquivo LMHOSTS utilizado pelo TCP/IP do Microsoft
# Windows.
#
# Este arquivo cont‚m os mapeamentos de endere‡os IP para os nomes (NetBIOS)
# dos computadores. Cada entrada deve estar em uma linha separada. O endere‡o
# IP deve ser colocado na primeira coluna seguido pelo nome do computador
# correspondente. O endere‡o IP e o nome do computador devem estar separados
# por pelo menos um espa‡o ou caractere de tabula‡ao. O caractere "#" ‚
# usado geralmente para indicar o in¡cio de um coment rio (veja as exce‡oes
# abaixo).
#
# Este arquivo ‚ compat¡vel com os arquivos LMHOSTS do TCP/IP do Microsoft
# LAN Manager 2.x., e oferece as seguintes extensoes:
#
# #PRE
# #DOM:<dom¡nio>
# #INCLUDE <nome_de_arquivo>
# #BEGIN_ALTERNATE
# #END_ALTERNATE
# \0xnn (aceita caracteres nao imprim¡veis)
#
# Qualquer entrada no arquivo que seja seguida pelos caracteres "#PRE" ser
# carregada previamente no cache de nomes. Por padrao, as entradas nao sao
# carregadas previamente e sao analisadas somente ap¢s falhas na resolu‡ao de
# nomes dinƒmica.
#
# Qualquer entrada no arquivo que seja seguida por "#DOM:<dom¡nio>" ser
# associada ao dom¡nio especificado por <dom¡nio>. Isso afeta a forma como os
# servi‡os Localizador e Logon atuam nos ambientes TCP/IP. Para carregar
# previamente o nome do host associado … entrada #DOM, ‚ necess rio adicionar
# tamb‚m a cl usula #PRE … linha. O dom¡nio sempre ‚ carregado previamente,
# apesar de nao ser exibido quando o cache de nomes ‚ exibido.
#
# A especifica‡ao de "#INCLUDE <nome_de_arquivo>" for‡a o software RFC
# NetBIOS (NBT) a procurar e analisar o <nome_de_arquivo> como se fosse
# local. <nome_de_arquivo> ‚ geralmente um nome UNC, permitindo que um
# arquivo lmhosts central seja mantido em um servidor. Sempre ‚ necess rio
# fornecer um mapeamento para o endere‡o IP de um servidor antes do #INCLUDE.
# Esse mapeamento deve conter a cl usula #PRE. Al‚m disso, o compartilhamento
# "public" no exemplo abaixo deve estar na lista LanManServer de
# "NullSessionShares" para que m quinas clientes possam ler o arquivo LMHOSTS.
# Simplesmente adicione "public" … lista que se encontra na chave do Registro
# \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares.
#
# As palavras-chave #BEGIN_ e #END_ALTERNATE permitem agrupar v rias
# senten‡as #INCLUDE. Um £nico #INCLUDE que tenha ˆxito far com que todo
# o grupo tamb‚m o tenha.
#
# Finalmente, caracteres nao imprim¡veis podem ser incorporados a esses
# mapeamentos, primeiro colocando-se aspas nos nomes NetBIOS e, em seguida,
# utilizando-se a nota‡ao \0xnn para especificar um valor hexadecimal para
# um caractere nao imprim¡vel.
#
# O seguinte exemplo ilustra todas essas extensoes:
#
# 102.54.94.97 rino #PRE #DOM:conexao de rede #C.D. do grupo de rede
# 102.54.94.102 "nomeaplic \0x14" #servidor aplic especiais
# 102.54.94.123 popular #PRE #servidor de origem
# 102.54.94.117 srvlocal #PRE #devido ao include
#
# #BEGIN_ALTERNATE
# #INCLUDE \\srvlocal\public\lmhosts
# #INCLUDE \\rino\public\lmhosts
# #END_ALTERNATE
#
# No exemplo acima, o servidor "nomeaplic" cont‚m um caractere especial em
# seu nome, os nomes de servidores "popular" e "servlocal" sao previamente
# carregados e o nome do servidor "rino" ‚ especificado para que possa ser
# utilizado para um posterior #INCLUDE no arquivo lmhosts central se
# o sistema "localsrv" nao estiver dispon¡vel.
#
# Note que o arquivo inteiro ‚ analisado, insive os coment rios, sempre
# que ele ‚ verificado. Por isso, deve-se manter o menor n£mero poss¡vel
# de coment rios para se aumentar o desempenho. Sendo assim, nao ‚
# recomend vel se adicionar entradas de arquivos lmhosts ao final do arquivo.
GOSTEI 0
Henrique Weissmann
22/06/2009
Warley,
executando o seu código, me deparei com a seguinte mensagem de erro:
java.rmi.NotBoundException: ServicoEstoque
at sun.rmi.registry.RegistryImpl.lookup(Unknown Source)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown So
que aponta para a linha 469 da sua classe Produto (no cliente) cujo conteúdo é:
estoque = (InterfaceEstoque) registroEstoque.lookup( "ServicoEstoque" );
Verificando a classe Servidor (pacote servidor), percebi que você está registrando o serviço como
ContratoProduto servico = new ContratoProdutoImp();
Registry registry = LocateRegistry.createRegistry(5001);
registry.bind("produto",servico);
System.out.println ("Servidor Compras Iniciado...");
ou seja, ao registrar o serviço no seu servidor RMI com outro nome, o cliente não consegue encontrá-lo e, consequentemente, também não consegue abrir uma conexão com o mesmo.
Encontrei na Internet uma introdução a RMI muito interessante que você pode acessar no endereço abaixo:
http://www.javacoffeebreak.com/articles/javarmi/javarmi.html
executando o seu código, me deparei com a seguinte mensagem de erro:
java.rmi.NotBoundException: ServicoEstoque
at sun.rmi.registry.RegistryImpl.lookup(Unknown Source)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown So
que aponta para a linha 469 da sua classe Produto (no cliente) cujo conteúdo é:
estoque = (InterfaceEstoque) registroEstoque.lookup( "ServicoEstoque" );
Verificando a classe Servidor (pacote servidor), percebi que você está registrando o serviço como
ContratoProduto servico = new ContratoProdutoImp();
Registry registry = LocateRegistry.createRegistry(5001);
registry.bind("produto",servico);
System.out.println ("Servidor Compras Iniciado...");
ou seja, ao registrar o serviço no seu servidor RMI com outro nome, o cliente não consegue encontrá-lo e, consequentemente, também não consegue abrir uma conexão com o mesmo.
Encontrei na Internet uma introdução a RMI muito interessante que você pode acessar no endereço abaixo:
http://www.javacoffeebreak.com/articles/javarmi/javarmi.html
GOSTEI 0
Warley Coelho
22/06/2009
Henrique;
O trabalho consiste em modulos, eu fique com a parte de produto e tenho q disponibilizar acesso para outros modolos como, compras, Estoque e Vendas.
As classes compras e Estoque estão sendo enviada atraves de ArrayList, mas se for comentada a parte de Estoque está ocorrendo o erro, estou conseguindo cadastrar no estoque os produtos. Mas no meu proprio banco não consigo.
Sds...
GOSTEI 0
Henrique Weissmann
22/06/2009
Warley,
no código fonte que analisei por enquanto só encontrei o problema que citei no post anterior: o cliente está pedindo o serviço "ServicoEstoque" que não se encontra registrado no servidor (porque no mesmo está sendo registrado como "produto").
Não cheguei a tentar persistir os dados em um banco de dados porque não tenho a sua estrutura de tabelas para que eu pudesse ver a execução do mesmo após a conexão do cliente com o servidor.
no código fonte que analisei por enquanto só encontrei o problema que citei no post anterior: o cliente está pedindo o serviço "ServicoEstoque" que não se encontra registrado no servidor (porque no mesmo está sendo registrado como "produto").
Não cheguei a tentar persistir os dados em um banco de dados porque não tenho a sua estrutura de tabelas para que eu pudesse ver a execução do mesmo após a conexão do cliente com o servidor.
GOSTEI 0
Warley Coelho
22/06/2009
Boa Tarde!!
Prezado Henrique;
O problema foi resolvido, obrigado pela ajuda.
Por gentileza poderia fechar o chamando.
Abraços
Warley Amaral
GOSTEI 0