Policy applet rxtx

Senhores

Tenho um applet que faz leitura da porta SERIAL funcionando muito bem no Netbeans e no browser com rxtx.
Estou usando a instrucao no arquivo java.policy da maquina:

grant codeBase "Servidor/-" { permission java.security.AllPermission; };

Agora estou tentando usar este mesmo applet para imprimir na porta PARALELA e ocorre que rodando pelo Netbeans esta funcionando muito bem mas no browser tenho o seguinte erro:

[code] java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.rxtxParallel)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.LPRPort.(LPRPort.java:35)

[/code]

Como pode ocorrer este erro de permissão se a porta SERIAL esta lendo normalmente? Será que tem alguma diferença entre as permissões das portas SERIAL e PARALELA? Pode ser alguma coisa no Browser? (testei no Opera e no Explorer e dá mesma coisa).
Não sei mais o que e onde procurar para solucionar.
Qualquer ajuda é muito bem vinda…

Amigo, bom dia!

Já tentou assinar o applet?

Valeu!

Acho que é a unica coisa que não tentei ainda.
Estou procurando mais informações de como fazer e já vou tentar.

Muito obrigado…

Ai vai um tutorial que eu fiz.
Qualquer coisa me avise!

Como assinar um applet

Se você estiver se perguntando, para que precisa assinar meu applet, ai vai a resposta.
Existem várias questões de segurança envolvendo a chamada de arquivos e aplicações externas de dentro do navegador, e para executar alguma função mais específica, ou até mesmo rodar executáveis do sistema operacional a partir do seu applet, você precisa criar uma assinatura digital para ele.
Até mesmo para identificar que este applet é assinado pela empresa ou site cujo ele está sendo executado.

Vamos ao que interessa.

Como exemplo, eu criei um applet Exemplo.java que gerou o binário Exemplo.class.

1 ? Criar um JAR
Criar um JAR com a classe envolvida, pois a assinatura será feita em cima do jar.
Na linha de comando, vá até a pasta em que o .class de sua classe está e digite:

jar cvf Exemplo.jar Exemplo.class

Neste momento foi criado um jar chamado Exemplo.jar.

2 ? Criar o par de chaves (chave pública e privada)
Na linha de comando digite:

keytool -genkey -dname “cn=Exemplo, ou=Laboratorio, o=Empresa, c=BR” -alias exemplo -storepass 123456 -validity 3655

Detalhes do comando

-dname = dados da organização/empresa/site
-alias = nome da chave criada, no caso ?exemplo?
-storepass = pass da chave, quando for assinar um jar com esta chave por exemplo, será necessário digitar este pass

  • validity = quantidade de dias de validade da assinatura digital

Esta chave fica guardada na pasta home do usuário, e você poderá utilizar apenas o alias dela quando for assinar o JAR.

3 ? Assinar o JAR do applet
Assinar o JAR do applet, criado no passo 1.

Na linha de comando digite:

jarsigner -storepass 123456 Exemplo.jar exemplo

Detalhes do comando

-storepass = pass da chave, conforme explicado no passo 2
Exemplo.jar = arquivo jar criado no passo 1
exemplo = alias da chave, criada no passo 2.

Pronto, é só jogar o seu JAR para sua aplicação, e agora caso você em seu applet, chamava um .class, é só chamar o .JAR.

Seu applet já está assinado.

insonix
Valeu pelo tutorial, é bem rápido e prático, funcionou muito bem.
Agora aparece a confirmação para a execução do applet mas ainda esta me dando o seguinte erro quando mando imprimir:

java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException at java.security.AccessController.doPrivileged(Native Method) at com.opera.PrivilegedThread.run(LiveConnectPrivilegedActions.java:290) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.opera.PrivilegedInvoke.run(LiveConnectPrivilegedActions.java:219) ... 3 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.opera.LCInvoke.invoke(LCInvoke.java:14) ... 8 more Caused by: java.lang.ExceptionInInitializerError at gnu.io.RXTXCommDriver.getCommPort(RXTXCommDriver.java:810) at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:343) at BAcores1.PCom.sendPrinterCodes(PCom.java:83) at BAcores1.BAcores1.setImpressao(BAcores1.java:233) ... 13 more Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.rxtxParallel) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkLink(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at gnu.io.LPRPort.<clinit>(LPRPort.java:35) ... 17 more

Isto que me deixa encucado, deve estar faltando alguma coisa com o rxtxParallel, pois com o rxtxSerial esta funcionando sem problemas…
Se tiver mais alguma dica para eu tentar aqui eu agradeço…
Obrigado

insonix e pessoal …

Criei um applet somente com a rotina de impressao e funcionou perfeitamente no NetBeans e no browser.
Conclusões:

O applet que faz a leitura das seriais fica escutando a porta o tempo todo, isto deve estar entrando em conflito com a LPT no momento que mando informações para impressao.(suposição)

Se for isto, porque só ocorre quando estou rodando no browser e quando esta rodando no NetBeans não dá erro nenhum?

Como resolver?
Agradeço se alguém me der alguma idéia.