Fórum Salvar Dados em Banco de dados RMI #6956
22/06/2009
0
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
Curtir tópico
+ 0Posts
22/06/2009
Warley Coelho
Segue abaixo Link do projeto:
https://www.devmedia.com.br/imagens/discovirtual/211303/RMI/Projeto.rar
Sds...
Gostei + 0
22/06/2009
Henrique Weissmann
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
22/06/2009
Warley Coelho
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
22/06/2009
Henrique Weissmann
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
22/06/2009
Warley Coelho
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
22/06/2009
Henrique Weissmann
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
22/06/2009
Warley Coelho
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
22/06/2009
Henrique Weissmann
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
24/06/2009
Warley Coelho
Boa Tarde!!
Prezado Henrique;
O problema foi resolvido, obrigado pela ajuda.
Por gentileza poderia fechar o chamando.
Abraços
Warley Amaral
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)