Pergunta

Estou tomando a decisão de um banco de dados incorporado em um próximo aplicativo Java Servlet. Estou com dois candidatos finais: sqlite com sqlitejdbc "pure java" drivers vs java db (também conhecido como derby).

Aqui estão os meus critérios assassinos: o aplicativo deve ser executado em qualquer sistema operacional que suporta Java, especificamente temos hosts Solaris, Centos, Windows X86 e Windows X64 que precisam executar o aplicativo. E a instalação deve envolver nada mais do que copiar o arquivo de guerra para a pasta de implantação do servidor de destino e deixar o servidor fazer o resto (o que nada mais é do que copiar um zip para o servidor de destino e deixar o servidor descompactar e executar o aplicativo). Não deve não haver binários nativos como parte da instalação e nenhuma lógica de configuração adicional. (Na verdade, esse não é o meu requisito, é o da empresa, para todos os aplicativos baseados em servlet, mas eu gosto).

Eu sei que Derby (Java DB) atende aos critérios acima. Eu fiz isso uma ou duas vezes. Mas eu realmente gosto da arquitetura de arquivo único da SQLite e do fato de a comunidade SQLite ser cerca de 20 vezes maior que a de Derby. Eu também tenho o medo de que o Oracle mate o Derby algum dia, pois agora eles têm algo como cinco produtos de banco de dados concorrentes sob seu guarda -chuva e que não podem continuar para sempre. Derby provavelmente será a primeira vítima quando começar a limpeza.

Então, eu estava olhando para o SQLITEJDBC, que afirma ter drivers JDBC "Java Pure" para o SQLite. Agora, eu entenderia "puro java" para significar que não há dependências do sistema operacional ou bibliotecas adicionais, que se possa executar o motorista em qualquer JVM em qualquer sistema operacional. Então, eu vou buscar o arquivo JAR com os drivers Java Pure. E sendo do tipo curioso, eu olho dentro dele. Então percebo que ele contém 4 arquivos na raiz com extensões ".lib", como segue:

Linux-amd64.lib
Linux-x86.lib
mac-universal.lib
win-x86.lib

OK, então, o que há com isso? São como bibliotecas nativas para os OS nomeados? Nesse caso, posso assumir que esse driver Java puro será executado apenas em uma plataforma com um arquivo LIB apropriado no frasco? Se for esse o caso, eu terei que tirar o SQLite da lista de candidatos, porque o Winx64 e o Solaris são os dois SOs mais importantes aqui.

Ou talvez eu tenha interpretado mal e o motorista Java Pure realmente é puro java e ele será executado em qualquer JVM?

Todas as respostas são bem -vindas !!!

Obrigado antecipadamente, John

Foi útil?

Solução

Se eu entendo corretamente, o próprio SQLITEJDBC é um driver JDBC tipo 4, mas ainda requer alguma integração binária nativa à plataforma operacional host, já que o SQLite ainda é uma solução baseada em C e não possui uma camada de integração/protocolo de rede como SQL*Net para Oracle para Oracle até onde sei. A página inicial do SQLITEJDBC menciona uma implementação "NtestVM" para qualquer idioma suportado pelo GCC, por isso parece possível implantar plataforma cruzada onde quer que haja um ambiente de tempo de execução do GCC. No entanto, não houve menção a Solaris.

Outras dicas

http://www.xerial.org/trac/xerial/wiki/sqlitejdbc - Fornece uma implementação pura de Java, embora use os arquivos .lib fornecidos sempre que possível, pois eles são mais rápidos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top