Você está aqui: Java ::: RMI - Remote Method Invocation ::: Passos Iniciais |
Aprenda a escrever sua primeira aplicação RMI usando NetBeansQuantidade 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 displayQuantidade 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.jsQuantidade 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 recursividadeQuantidade 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 |
JavaScript - Como remover os espaços no final de uma string em JavaScript usando uma função trim_final() personalizada |
Códigos Fonte |
Software 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 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 |