Applet + exception

10 respostas
marciosc

ola! estaou deselvolvendo uma applet pra fazer a digitalizacao de imagens capturando de um scanner!
estou usando o Jtwain (http://asprise.com/product/jtwain/) para fazer isso.
Quando executo minha applet no appletViewer do Ecplise, minha applet roda belezinha, faz tudo certinho, só falta fala, porém, a hora q eu carrego ela na minha jsp, da a seguinte exception na console do Java:

java.security.AccessControlException: access denied (java.lang.RuntimePermission getenv.WINDIR) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.System.getenv(Unknown Source) at com.twainconnect.core.TwainConnect.<init>(TwainConnect.java:161) at AppletDigitalizacao.<init>(AppletDigitalizacao.java:97) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

Pelo q eu percebi no log4J, o jTwain acessa a pasta do windows, verifica se existe uma determinada ddl, se existe ele deleta, cria ela, e da um load.
A exception, ta acontecendo pq na applet, ela nao ta tendo permissao pra acessar essa pasta do windows, mas no appletViewer do Eclipse roda normal, acha os scanners, faço o scan e mostra a imagem certinho.

Alguem ai sabe como resolver isso???

10 Respostas

marciosc

opa vlw!
mas como faço isso seufagner??

eu to começando a mexer com applets agora, e sem ninguem pra me ajudar!
se vc pudesse me dar essa dica, ou tivesse algum exemplo, eu ficaria mto grato!

marciosc

assim?!
consegui diversos tutoriais q ensinam a assinar um jar, mas me basiei por esse:
http://www.lcmi.ufsc.br/jacoweb/restrito/documentos/assinatura/index.htm

Mas ainda fiquei com algumas dúvidas!
por exemplo:

  • gerei o arquivo c:\chave.keystore, como os meus dados, minha alias e minhas senhas usando o keytool;
  • assinei o jar com o jarsigner utilizando o arquivo c:\chave.keystore;
  • exportei o meu certificado c:\keycert.x509;
    Até aqui ta certo???

Porque daqui pra frente nao entendi direito(seguindo o tutorial):

  • como faço pra usuario importar automaticamente o meu certificado?
  • eu criei o tal arquivo policy, dando permissoes de acesso pra minha applet, mas como o faço pra usuario “importar” ele?

Alguem ai pode me dar uma luz??

desde já agradeço!

marciosc

gente, resolvido o problema! (disfarça)
o esquema era o seguinte, eu tinha assinado o jar com as classes do meu applet, porém, qm fazia o acesso a pasta do windows era o jar do jTwain.
Por “cagada”, depois de ter lido 10 vezes o tutorial ali do link, descobri q qlq classe q for acessar fora do sandbox tem q estar no jar assinado e como q acessava era o jar do jTwain, assinei o jar do jTwain e “funfo”!

fico jóia!

agora queria resolver outro impasse, eu tenho meu Dao pra persistencia, e
esse esta numa package, dentro da minha aplicaçao, mas para poder usa-lo, ele teria q estar num jar no mesmo codebase do applet, tem como eu usar como codebase da applet, o “/WEB-INF/classe/minhaPackage” ??

por inqnt vlw gente!

O

marciosc:
agora queria resolver outro impasse, eu tenho meu Dao pra persistencia, e
esse esta numa package, dentro da minha aplicaçao, mas para poder usa-lo, ele teria q estar num jar no mesmo codebase do applet, tem como eu usar como codebase da applet, o “/WEB-INF/classe/minhaPackage” ??

O correto é o seu applet “conversar” com o seu servidor (servlet, rmi) e não fazer o seu applet chamar direto um código que está no servidor. Não é recomendado fazer o seu applet acessar direto o seu banco de dados. Para minimizar as mudanças pode-se usar um esquema do tipo do VJDBC.

marciosc

certo! vou tentar fazer isso!

de qualquer forma, deixa eu explicar o meu contexto!
eu tenho uma aplicaçao JSF, porém, num determinado ponto da aplicaçao, eu precisei criar um applet pra suprir a necessidade da aplicaçao. Por enquanto é o unico applet, o restante sao jsps.
O caso é q no applet eu preciso utilizar dados utilizados no restante da aplicaçao e minha aplicaçao roda no tomcat e utiliza banco postgreSQL.
Nao existe outra forma de fazer isso, sem ser com esse VJDBC?
E com esse VJDBC, vou resolver o meu problema???

Vou tentar implementar esse VJDBC de qlq forma pro meu applet!
vlw!

O

marciosc:
certo! vou tentar fazer isso!

de qualquer forma, deixa eu explicar o meu contexto!
eu tenho uma aplicaçao JSF, porém, num determinado ponto da aplicaçao, eu precisei criar um applet pra suprir a necessidade da aplicaçao. Por enquanto é o unico applet, o restante sao jsps.
O caso é q no applet eu preciso utilizar dados utilizados no restante da aplicaçao e minha aplicaçao roda no tomcat e utiliza banco postgreSQL.
Nao existe outra forma de fazer isso, sem ser com esse VJDBC?
E com esse VJDBC, vou resolver o meu problema???

Vou tentar implementar esse VJDBC de qlq forma pro meu applet!
vlw!

Use MVC: o seu applet e os seus JSPs são as Views. Os dados que vão trafegar é o Model. Os servlets são o Controller. Ou seja se você construiu corretamente a sua aplicação, tanto faz acessar o servlet via JSP ou via applet.

Lendo com mais calma o seu post vi que você, usa DAO. Então esqueça o VJDBC. Ele só seria util se você estivesse manipulando direto ResultSets.

Mais uma coisa: não faça os seus servlets acessarem direto os DAOs. Crie uma camada de negócio entre elas. Se já não estiver usado, recomendo usar o Spring para ajudar na integração de tudo isto.

marciosc

oyama!
qnd eu comecei mexer com jsf, eu achei q estava fazendo certo a divisao mvc, depois de um tempo, descobri q eu tinha acabado misturando o meu view e o meu controller! tenho a intensao de separar isso em duas camadas, porém, nao agora! estou “sem tempo” pra fazer isso.
a parte da divisao vai ficar pra uma “manutencao posterior”, ou versao 2.0 da aplicacao, onde vou reformular a aplicaçao, mudar interface, adicionar novas funcionalidades e talz!

na minha situaçao de hj, como vc acha q poderia resolver essa situaçao?
como posso fazer minha applet acessar meus dados para poder manipula-los?

O

marciosc:
na minha situaçao de hj, como vc acha q poderia resolver essa situaçao?
como posso fazer minha applet acessar meus dados para poder manipula-los?

Tres sugestões sem conhecer 100% a sua arquitetura:
:arrow: Crie um servlet para receber os dados e repassar para o seu DAO. Se você estiver trabalhando com entity, é só serializar no applet e enviar via HTTP para o servlet.
:arrow: Implemente um servidor RMI (que nem uma interface remota de EJB) e faça o seu applet conectar neste servidor. Aqui também vale a ideia de transmitir a entity.
:arrow: Crie um Web Services (na minha opinião acho a pior solução - muito overhead).

Em todas as soluções, não estou levando em conta requisitos de segurança (autenticidade, autorização), performance e manuntenabilidade e questões de infra-estrutura (rede, firewall, etc). Estas tres soluções seriam facilmente implementadas usando o remoting do Spring.

marciosc

Vlw oyama!

vou tentar ver isso ai!
preciso resolver logo esse negocio!
obrigado! qlq coisa eu posto aki de novo!
vlw!

seufagner

Você precisa assinar o Applet ou dar as permissões
adequadas ao mesmo.

Pode utilizar um script do Ant ou o console mesmo.

Criado 7 de março de 2007
Ultima resposta 7 de mar. de 2007
Respostas 10
Participantes 3