eu estou desenvolvendo um applet que tera que executar o comando Runtime (para pegar o resultado da execucao de um programa em C) na maquina onde o applet estara armazenado para acesso via http.
Eu preciso de RMI para executar este comando por http???pq eu estou tentando executar o applet mas a execucao do programa em C so funciona na maquina onde o applet esta armazenado(no servidor )???
meu codigo para executar o comando é
executaComando(“cd /home/ane”);
executaComando("./verEqpto"); // o comando ./verEqpto executa programa em linguagem C.
public String executaComando(String comando)
Runtime mycmd = Runtime.getRuntime(); // declara uma variavel
DataInputStream piped = new DataInputStream( mycmd.exec(comando).getInputStream() );
//executa esta variavel. exec que vai executar o comando q
//vc deu e vai armazernar eum uma variavel piped de dados de saida, q é como se foce uma string
while ( (line = piped.readLine())!=null ) //dentro do while ele vai lendo ate o fim todos os dados forneceidos pelo comando executado
{ output = output.concat(line + “\n”);
}
A tecnologia de RMI - Remote Method Invocation, é uma tecnologia que procura ser usada com o intuito de disponibilizar serviços presentes em um determinado objeto de maneira remota. A visibilidade e forma de utilização desse serviço podem ser conhecidas através de uma interface, que extende a classe Remote. Nessa interface ficam declarados os métodos disponíveis para serem invocados remotamente. Uma das vantagens da utilização de RMi se deve ao fato dessa invocação ser realizada exatamente da mesma maneira que você faz para invocar um método de um objeto local, ou seja, não remoto. Com isso, acho que podemos concluir que não é bem isso que você deseja fazer…
Pois bem, um applet é executado na máquina cliente dentro de um modelo de segurança conhecido como SandBox. Isso restringe bastante as operações que podem ser realizadas por um applet para evitar que um applet malicioso possa danificar a máquina cliente, sem que o mesmo tenha conhecimento disso. Para que você possa executar qualquer tipo de acesso, ou software na máquina cliente, é necessário que você assine seu applet digitalmente, tornando assim o mesmo capaz de ter acesso a máquina do cliente, caso ele lhe de permissão.
Eu já assinei o applet, mas a execucao do programa em C so funciona na maquina onde o applet esta armazenado(no servidor).
Precisa fazer + alguma coisa depois de assinar o applet?? Tenho algumas duvidas quanto a assinatura do applet:
Depois de assinar o applet o cliente precisa importa-lo??
ou somente eu devo fazer isso??
Eu preciso colocar no html do applet o numero do certificado??
Eu ouvi falar que precisa comprar um certificado junto a uma empresa certificadora, isso é verdade???
isso, eu preciso que meu applet dispare um programa em C(e isso eu faco com o comando runtime no applet).
nao dá para fazer por RMI? ou porque servelet é + facil, eu estou pensando em fazer por RMI pq já tenho a estrutura em outro aplicativo…
Verifique se você realizou a assinatura de seu applet corretamente. A utilização de um certificado digital de um empresa, por exemplo VeriSign, dá credibilidade e confiabilidade ao seu applet pois essa é uma empresa que é homologada para realizar esse tipo de serviço. Nada impede de você não utilizar um certificado desses, pois ao usar as ferramentas de assinatura da sun, você gera seu próprio certificado digital. Em seu servidor web devem ficar o html que contém a tag que chama o applet. O arquivo .jar assinado deve estar nesse mesmo local, pois ele contém o applet que será carregado pela maquina virtual do cliente no momento do acesso. Eu já fiz algo parecido, porém a diferença é que soh executava um comando prenchido dinamicamente pelo meu serviet que montava o html que continha o applet. O código do Applet ficou assim :
ok, obrigada, jeferson + uma duvida:
meu html fica na minha maquina web Server, mas o meu .jar e as classes ficam na outra maquina servidora e meu applet aponta para ela:
Exemplo: codebase= ‘http://ip_maquina_servidor’ code= ‘meuapplet.class’ archive= ‘appletAssinado.jar’
e vc falou para o .jar ficar no web server, sera que tem algum problema do .jar e class ficaram em maquina diferente do html, mesmo eu apontando para ela no html do applet?
Olá Ane…
Acho que naum tem problema naum vc ter o .jar e o html em servidores separados, já que no html vc faz uma referência ao cxaminho pnde está o jar. A primeira vista parece tudo ok, faça um teste para ver se resolveu seu problema…
Qualquer coisa posta aqui que tentaremos te ajudar …
o comando que vc utiliou com o runtime é StringBuffer, o meu comando é ./verEqpto(executa o programa VerEqpto em C). Será que nao terei que trabalhar com Rmi ou algo semelhante (pq terei executar um programa em C)???
Cheguei a este dilema pq o applet executa o programa em C só na maquina onde esta armazenado o applet (mesmo com acesso via http pelo applet e nao file)
uma duvida o Meu applet nao esta estruturada com o start , será que tem algum problema (vi que o seu tem public void start() ) faz alguma diferenca???
Acho que o pcalcado estava mais correto. O ideal é criar um Servlet e fazer ele disparar o seu programa em C no servidor. Daí vc coloca o código que tem usa a classe RunTime dentro do servlet e faz com que a saida do seu programa seja direcionada para a stream de retorno desse servlet.
Quanto a utilização do StringBuffer, foi soh para otimizar a concatenação de Strings, jah que utilizar a concatenação de Strings com o operador + ou o concat, tem uma performance menor que quando utiliza-se a classe StringBuffer pra isso.
Quanto ao método start(), ele faz parte dos métodos que compõe o ciclo de vida de um Applet. Toda vez que sua página é carregada pela primeira vez o método init() é chamado. Esse método funciona de como se fosse um construtor para o Applet, pois é recomendado que nele vc pegue as informações iniciais necessárias para a execução de seu Applet. Já o método start() é invocado toda vez que um reload de um página pré carregada, que contém o Applet, é feito, fazendo com que as ações que são executadas pelo seu applet possam ser refeitas.
Se precisares de ajuda com o código do Servlet é soh falar…
Para entrar em contato durante o dia utilize meu msn: jefe11@msn.com