SérgioLucas, passei exatamente pelos mesmos “problemas” que você. Estou desenvolvendo um software em JavaFX com banco de dados PostgreSQL, pois o MySQL, embora seja OpenSource, não está liberado gratuitamente para versões comerciais. Além disso, testando o intervalo de tempo para um mesmo método, com os drivers mais recentes do MySQL, MariaDB e PostgreSQL, esse último foi muito mais rápido. Alguém irá dizer, ah, mas são só alguns centésimos de segundo. Não interessa, um milésimo de segundo pra mim é mais rápido e pra mim isso importa. Gosto é gosto, mas eu gosto do mais rápido e do melhor.
Bom, mas em relação ao executável… o Java gera o .jar. Todos sabemos disso…
Funciona? Resposta: funciona! Porém, todas as vezes que você vai mostrar para um leigo, o cara pergunta: o que é esse *.jar? Pra que serve? Nunca vi programa em .jar…
Até você explicar para o leigo o que é JAVA, o que JVM, JRE… vai tempo!!! Então, quando eu comecei a apresentar o .exe, a minha vida mudou! Por mais leigo que a pessoa seja, o .exe é intuitivo! Pra mim não interessa aplicações em Linux e, além disso, a renderização em Linux não foi a mesma. As fontes são alteradas, o tamanho, width e height dos objetos ficam diferentes. Então abandonei a idéia de ter de recriar tudo para Linux. O cara que use Windows e pronto. Se não quiser, beleza, que alugue outro sistema…
Outro fator a ser considerado, voltando ao banco de dados: se o cara pega o .jar e manda abrir com WinRar, ele verá todo o seu código-fonte, inclusive a senha para acesso ao banco de dados. Imagine um funcionário que está descontente com a empresa! Mesmo sendo leigo, tem um tal de Google e um tal de Youtube que podem fazer um estrago muito grande! Um funcionário leigo mal intencionado, preguiçoso, pode até não gostar de se especializar em sua profissão, mas para fazer coisa errada torna-se um expert facilmente! Pois então, o cara foi demitido, está de aviso prévio, ou então foi para outro setor que não gosta, começa a ter umas idéias… vai lá fazer uma visitinha para o Google, Youtube, descobre que basta ter o WinRar ou o JavaDecompiler que ele vê todo o código-fonte ou parte dele em seus arquivos *.jar. Procura a senha do banco, abre o banco, muda as tabelas e acaba com o estoque e a vida financeira de seu chefe!!!
Veja que não me importo com a possibilidade do cara ler o código-fonte do meu sistema. O problema não sou eu. O Java é gratuito, o PostgreSQL é gratuito. Eu tenho também que fazer a minha parte, pow. Mas a partir do momento que o meu sistema pode colocar uma empresa em risco, a coisa muda! Eu causar prejuízo, acabar com a parte e a vida administrativa de alguém, isso pra mim é um absurdo sem limites! É uma irresponsabilidade sem limites! Isso não é nada profissional. Por isso, o *.jar não é profissional…
Para evitar isso, tentei obfuscar com o Proguard. Todavia ele ainda continuou mostrando a senha e corrompeu as minhas TableViews. Obfusca muita coisa, criei os dicionários de obfuscação de classes de variáveis, mas deu erro com o JasperReport e várias outras coisas. Não serviu para o meu tipo de sistema.
Tentei criar um exe com o Launch4j. É bonzinho, mas ainda mostrava a senha do banco de dados. Ele cria um *.exe mas não esconde nada!
Então, finalmente descobri o JSmooth!!! Até agora eu não consegui acessar a senha do banco de dados por ele! Ele cria 2 .class que são difíceis de ler, nem mesmo com o JavaDecompiler eu encontrei a bendita senha!
Logo, depois de todo o enorme texto acima, a minha dica é:
- Sistema profissional: tem que ser em *.exe para não ficarmos perdendo tempo para explicar a cada funcionário que entra na empresa!
- Segurança: tem que ser em *.exe, para pelo menos dificultar a engenharia reversa e proteger a vida do cara que te contratou ou está alugando o seu sistema.
- Solução: JSmooth, que é gratuito, esconde a senha do banco de dados, arquivo fica apenas o dobro do tamanho.