Possuo uma aplicação web que deve rodar, as vezes, de maneira offline (em notebooks de consultores externos e tals).
Pra isso, estou utilizando uma versão embbeded do Tomcat. Esta minha aplicação acessa um diretorio /web com o conteudo e um /conf com as configurações do Tomcat.
Consegui resolver o problema do banco usando o H2 embbeded tbm… fazendo sincronia depois com o BD online e tals… enfim, funciona.
Assim sendo, eu queria utilizar o Java Web Start para distribuir esta aplicação (pelas vantagens de manter os clients atualizados facilmente, de o JWS já fazer as verificações de JRE, etc).
Pelo que pesquisei, o JWS permite apenas que vc publique os JARs para executar, e não estes demais diretórios que meu server precisa.
Assim sendo, eu pensei em colocar estes diretórios dentro do JAR, e qdo eu invocar minha classe Main, ela descompactaria estes diretórios para uma pasta temporaria.
Eu já fiz alguns testes… assinei todos os meus JARs… criei diretórios e arquivos de teste em System.getProperty(“java.io.tmpdir”);, etc.
A minha dificuldade está em acessar este diretorio de dentro do meu proprio JAR para descompactá-lo, utilizando o ZipFile ou algo assim…
Tentei passar o getClass().getClassLoader().getResource(“XX”).toURI() pro construtor do ZipFile, mas a URL aparece como "localhost:8080 … " qdo executado pelo JWS… e assim o construtor não funciona…
Eu ate poderia colocar estes arquivos e diretorios em outro JAR fora da minha aplicação, mas ainda assim não sei como encontrá-la usando o JWS…
Alguma luz, ou algo diferente que eu não tenha pensado?
Ou será que existe alguma maneira de conseguir o Real Path (c:/algumacoisa/app.jar) deste meu JAR atraves de minha classe que está dentro dele?
eu já havia tentado com o ClassLoader… mas não estava conseguindo utilizar os resources, pra fazer outputstream pq estavam como diretórios dentro do JAR, e não arquivos.
acho q o problema é que eu estava o dia de ontem inteiro bitolado nisso, e não enxerguei uma solução pra resolver…
hoje pela manhã, em alguns minutos com a mente mais leve, consegui resolver meu problema…
usando o ClassLoader, eu consegui carregar um arquivo ZIP que adicionei ao meu JAR, através do ZipInputStream.
agora está funcionando blzinha…
Caso alguem precise, minha estrutura ficou + ou - assim: