Você está aqui: Java ::: RMI - Remote Method Invocation ::: Passos Iniciais

Aprenda a escrever sua primeira aplicação RMI usando NetBeans

Quantidade de visualizações: 13851 vezes
Nesta dica mostrarei passo-a-passo como escrever um aplicação RMI bem simples usando a IDE NetBeans (aqui usei a versão 6.9.1). Note, contudo, que isso não o(a) liberará da tarefa de executar alguns comandos na janela do Prompt de comando. Desta forma, se você ainda não sabe como fazê-lo ou se as variáveis de ambiente PATH e CLASSPATH lhe dão arrepios, aproveite e reveja algumas de minhas dicas sobre o assunto antes de iniciar.

Sobre a aplicação

A aplicação RMI que escreveremos é realmente muito simples. Trata-se de uma calculadora que recebe dois inteiros e devolve sua soma. A aplicação cliente se conectará à aplicação servidor, enviará dois valores inteiros e o servidor devolverá a soma dos valores informados. Lembre-se de que usaremos apenas RMI, nada de sockets envolvidos nesta dica (somentes nos bastidores, é claro).

Escrevendo a aplicação RMI servidor

O primeiro passo para escrever a aplicação cliente é abrir o NetBeans. Em seguida vá até a opção Arquivo -> Novo Projeto. Na janela de novo projeto escolha Java de um lado e Aplicativo Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServidor" ao projeto e salve-o no diretório "C:\estudos_rmi" de forma que a pasta do projeto seja "C:\estudos_rmi\CalculadoraServidor". Clique o botão Finalizar.

Vamos começar criando a interface remota, que será compartilhada tanto pela aplicação servidor quanto pela aplicação cliente. Assim, vá na opção Arquivo -> Novo Arquivo. Na janela Novo arquivo escolha Java de um lado e Interface Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServerInterface" à interface e selecione o pacote "calculadoraservidor". Clique o botão Finalizar.

Altere o código do arquivo CalculadoraServerInterface.java para a versão mostrada abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package calculadoraservidor;

import java.rmi.*;

public interface CalculadoraServerInterface extends Remote{
    // método público que recebe dois valores inteiros e
    // retorna sua soma
    public int somar(int a, int b) throws RemoteException;
}

Aqui nós temos um método somar() que recebe dois inteiros e retorna sua soma. Vamos agora escrever uma classe que implementa esta interface. Vá na opção Arquivo -> Novo Arquivo. Na janela Novo arquivo escolha Java de um lado e Classe Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServerInterfaceImpl" à classe e selecione o pacote "calculadoraservidor". Clique o botão Finalizar.

Altere o código do arquivo CalculadoraServerInterfaceImpl.java para a versão mostrada abaixo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package calculadoraservidor;

import java.rmi.*;
import java.rmi.server.*;

public class CalculadoraServerInterfaceImpl extends UnicastRemoteObject
    implements CalculadoraServerInterface{

    public CalculadoraServerInterfaceImpl() throws RemoteException{
        // construtor padrão
    }

    // método público que recebe dois valores inteiros e
    // retorna sua soma
    public int somar(int a, int b) throws RemoteException{
        return a + b;
    }
}

Agora já podemos implementar o servidor e registrá-lo com o RMI server. Altere o código do arquivo Main.java para a seguinte versão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package calculadoraservidor;

import java.rmi.registry.*;

public class Main {
    public static void main(String[] args) {
       try {
           CalculadoraServerInterface csi = new CalculadoraServerInterfaceImpl();
           Registry registry = LocateRegistry.getRegistry();
           registry.rebind("CalculadoraServerInterfaceImpl", csi);
           System.out.println("Servidor Calculadora " + csi +
              " registrado e pronto para aceitar solicitações.");
       }
       catch (Exception ex) {
           System.out.println("Houve um erro: " + ex.getMessage());
       }
    }
}

Pronto! A aplicação servidor já está concluída. Pressione F6 para executá-la. Teremos o seguinte erro de tempo de execução:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

Houve um erro: Connection refused to host: 192.168.1.64; nested exception is: 
  java.net.ConnectException: Connection refused: connect

Isso aconteceu porque não iniciamos o RMI Registry. Para isso, abra uma janela de comando e dispare:

start rmiregistry

Isso fará com que uma nova janela de comando seja aberta. Não a feche. O RMI Registry está sendo executado nela. Volte à aplicação e pressione F6 novamente. Agora o erro de tempo de execução é:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

Houve um erro: RemoteException occurred in server thread; 
nested exception is: java.rmi.UnmarshalException: 
  error unmarshalling arguments; 
nested exception is: 
  java.lang.ClassNotFoundException: calculadoraservidor.CalculadoraServerInterface

Este erro ocorreu porque o RMI Registry não conseguiu encontrar nenhuma informação a respeito da interface CalculadoraServerInterface. Para contornarmos este problema, vamos apenas construir a aplicação (pressionando F11 ou acessando Executar -> Construir projeto principal) e executá-la a partir do jar gerado (CalculadoraServidor.jar). Assim, abra uma janela de terminal e vá até o diretório de sua localização:

cd C:\estudos_rmi\CalculadoraServidor\dist

e dispare:

java -jar CalculadoraServidor.jar

Mesmo erro, não? Pare o RMI (Ctrl + C), feche todas as janelas de comando e adicione o valor "C:\estudos_rmi\CalculadoraServidor\dist\CalculadoraServidor.jar;" à sua variável de CLASSPATH. Inicie o RMI novamente, abra uma nova janela de terminal, vá até o diretório "C:\estudos_rmi\CalculadoraServidor\dist" e execute o JAR novamente. Se tudo correu bem você terá o seguinte resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

Servidor Calculadora CalculadoraServerInterfaceImpl[UnicastServerRef [liveRef: [
endpoint:[192.168.1.64:4634](local),objID:[4124a53a:12e63b2ebea:-7fff, 383998976
7738511284]]]] registrado e pronto para aceitar solicitações.

Esta mensagem indica que o servidor RMI está 100% funcionando e pronto para atender às requisições do cliente. Hora de passarmos ao desenvolvimento do cliente.

Nota importante: Neste momento você já consegue executar a aplicação servidor a partir do NetBeans. Mas, é recomendável executá-la a partir do Prompt de comando, uma vez que a aplicação servidor deverá estar rodando quando a aplicação cliente for executada.

Escrevendo a aplicação RMI cliente

Vamos então escrever a aplicação RMI cliente. Vá até a opção Arquivo -> Novo Projeto. Na janela de novo projeto escolha Java de um lado e Aplicativo Java do outro. Clique o botão Próximo. Dê o nome "CalculadoraServidor" ao projeto e salve-o no diretório "C:\estudos_rmi" de forma que a pasta do projeto seja "C:\estudos_rmi\CalculadoraCliente". Clique o botão Finalizar.

Na aplicação cliente nós precisaremos referenciar a interface CalculadoraServerInterface, que é parte da aplicação servidor. Assim, clique com o botão direito em Biblitecas e escolha a opção Adicionar JAR/Pasta. Localize o diretório "C:\estudos_rmi\CalculadoraServidor\dist", selecione o JAR CalculadoraServidor.jar e clique o botão Open.

Agora modifique o Main.java para a seguinte versão:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

package calculadoracliente;

import java.rmi.registry.*;
import calculadoraservidor.*;

public class Main {
  public static void main(String[] args) {
    try {
      Registry registry = LocateRegistry.getRegistry("localhost");
      CalculadoraServerInterface c = (CalculadoraServerInterface)
        registry.lookup("CalculadoraServerInterfaceImpl");
      System.out.println("O objeto servidor " + c + " foi encontrado com sucesso.\n");

      // vamos efetuar uma soma?
      System.out.println("A soma de 2 + 5 é: " + c.somar(2, 5));
    }
    catch(Exception ex){
      System.out.println(ex);
    }
  }
}

A aplicação cliente pode ser executada a partir do NetBeans mesmo (com o RMI Registry ativo e a aplicação Servidor em execução, é claro). Basta pressionar F6 e teremos o seguinte resultado:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

O objeto servidor Proxy[CalculadoraServerInterface,
RemoteObjectInvocationHandler[UnicastRef [liveRef: 
[endpoint:[192.168.1.64:4649](remote),objID:[4d4c1a57:12e63bb67ba:-7fff, 
3392955188099866234]]]]] foi encontrado com sucesso.

A soma de 2 + 5 é: 7

Esta dica demonstra "pacientemente" como escrever sua primeira aplicação RMI usando a IDE NetBeans. Devido ao espaço restrito, não pude descrever o funcionamento detalhado de cada uma das partes envolvidas. Continue vendo minhas dicas sobre o assunto para aprofundar um pouco mais.

Link para compartilhar na Internet ou com seus amigos:

CSS ::: Dicas & Truques ::: Barras de Navegação, Menus e Dropdowns

Como criar uma barra de menus na horizontal usando CSS e o valor inline-block para a propriedade display

Quantidade de visualizações: 352 vezes
Nesta dica mostrarei como podemos criar uma barra de menus horizontal usando CSS. Para isso cada item de menu será um elemento <li>, contidos dentro de um elemento <ul>. O truque é definir o valor inline-block para a propriedade display de cada elemento <li>.

Veja a página HTML e CSS completa para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

<!doctype html>
<html>
<head>
  <title>Estudos CSS</title>
  
<style>
  #menu{
    background-color: #eeeeee; 
    list-style-type: none;
    text-align: center;
    margin: 0;
    padding: 0;
  }

  #menu li {
    display: inline-block;
    font-size: 20px;
    padding: 20px;
    text-decoration: none;
  }
  
  #menu li a{
    text-decoration: none;
  }
</style>

</head>
  
<body>

<h1>Exemplo de Barra de Menu Horizontal</h1>

<p>Veja como podemos usar o valor inline-block para
  a propriedade display do CSS para criar uma barra
  de menu na horizontal</p>

<ul id="menu">
  <li><a href="index.php">Início</a></li>
  <li><a href="servicos.php">Serviços</a></li>
  <li><a href="produtos.php">Produtos</a></li>  
  <li><a href="contatos.php">Contatos</a></li>
</ul>
  
</body>
</html>



Node.js ::: Dicas & Truques ::: Arquivos e Diretórios

Como obter o diretório de instalação do Node.js - O diretório de trabalho do Node.js

Quantidade de visualizações: 1803 vezes
Em algumas situações nós gostaríamos de obter o diretório de instalação, ou diretório de trabalho do Node.js. Isso pode ser feito por meio da variável __dirname ou da função cwd() do objeto process. Tanto a variável quanto a função process.cwd() fazem parte do core do Node.js e não precisam ser importados.

Veja abaixo um exemplo de um aplicação funcional que mostra o nome do diretório de trabalho:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// importamos o módulo HTTP
var http = require("http");
  
http.createServer(function(request, response){
  // Aqui nós enviamos o cabeçalho HTTP, com a resposta
  // 200 (OK) e o content type text/plain
  response.writeHead(200, {'Content-Type': 'text/plain'});
      
  // Vamos obter e mostrar o diretório de trabalho do Node.js
  var diretorio = __dirname;
  // poderíamos também usar
  // var diretorio = process.cwd();
  response.write('O diretório de trabalho é: ' + diretorio + '\n');
  // fechamos a resposta HTTP
  response.end();
}).listen(8081); // o HTTP server vai ouvir na posta 8081
   
// Que tal uma mensagem no console?
console.log('O servidor está ouvindo em http://127.0.0.1:8081/');

Depois de executar o servidor, abra seu navegador no endereço http://127.0.0.1:8081 e você terá o seguinte resultado:

O diretório de trabalho é: c:\estudos_nodejs


Python ::: Python Turtle ::: Formulários e Janelas

Como definir o título da janela do Python Turtle usando a função title()

Quantidade de visualizações: 1068 vezes
A função title() do Turtle é muito útil quando queremos definir o título da nossa aplicação Python Turtle. Tudo que temos a fazer é efetuar uma chamada a essa função fornecendo o título que queremos que seja exibido na barra de títulos.

Veja o código Python Turtle para o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

# vamos importar o módulo Turtle 
import turtle

# método principal
def main():
  # vamos criar a tela gráfica
  tela = turtle.Screen()
  
  # vamos definir o título da janela
  tela.title("Meu programa Python Turtle")

  # vamos definir o tamanho da janela
  tela.setup(600, 450)

  # entramos no loop de eventos
  tela.mainloop()

if __name__== "__main__":
  main()

Note que não é possível usar a função title() para retornar o título da janela. Caso você queira fazer isso, é melhor usar uma variável para guardar o título da janela e manipulá-la durante a execução do programa.


C++ ::: Dicas & Truques ::: Recursão (Recursividade)

Como calcular fatorial em C++ usando recursividade

Quantidade de visualizações: 9329 vezes
O fatorial de um determinado número, representado por n! equivale a multiplicar este número por seus antecessores. Assim, o fatorial de 4 (4!) pode ser calculado da seguinte forma:

4 x 3 x 2 x 1 = 24

Sempre que falamos de recursão, o cálculo de fatorial nos auxilia na exemplicação por ser relativamente fácil de se entender todas as etapas do processo. O código abaixo mostra uma função recursiva em C++ que calcula o fatorial de qualquer número. Tenha cuidado. Calcular o fatorial de um número maior que 10 pode tornar sua máquina extremamente lenta, além de, muitas vezes, não retornar os resultados esperados.

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

#include <iostream>

using namespace std;

// função recursiva para calcular o fatorial
// de um determinado número
int fatorial(int n){
  if(n == 0)
    return 1;
  else
    return n * fatorial(n - 1);
}

int main(int argc, char *argv[]){
  // vamos calcular o fatorial de 5
  int res = fatorial(5);

  // exibe o resultado
  cout << "O fatorial de 5 é: " << res << endl;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



Python ::: Dicas & Truques ::: Strings e Caracteres

Como retornar o código ASCII ou Unicode de um caractere em Python usando a função ord()

Quantidade de visualizações: 13091 vezes
Nesta dica vou mostrar como é possível usar a função ord() da linguagem Python para retornar o código ASCII ou Unicode de um determinado caractere (letra, dígito ou símbolo).

Veja o exemplo completo:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

def main():
  print("O codigo ASCII ou Unicode para o caractere A é",
    ord('A')) 
 
if __name__== "__main__":
  main()

Ao executarmos este código nós teremos o seguinte resultado:

O codigo ASCII ou Unicode para o caractere A é 65


Desafios, Exercícios e Algoritmos Resolvidos de Python

Veja mais Dicas e truques de Python

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 81 usuários muito felizes estudando em nosso site.