Iniciar servidor JavaDB direto do código

4 respostas
G

Olá pessoal !
Sou iniciante aqui no fórum, e estou desenvolvendo um aplicativo desktop com banco de dados.
Estou utilizando o JavaDB.

Já criei meu banco de dados, conecto a ele direto do código, tudo certinho. Porém, não estou conseguindo colocar também no meu programa um código para iniciar o servidor do JavaDB automaticamente (por enquanto só funciona quando conecto manualmente pelo netbeans).

Já adicionei a meu classpath o derby.jar, o derbynet.jar, derbyclient.jar e derbytools.jar (nem sei se precisaria de todos eles).
Feito isso, tentei o seguinte código:

NetworkServerControl s;

try {

s= new NetworkServerControl();

s.start(null);

}catch (Exception ex){

System.out.println(ex.getMessage());

}

Quando tentei, o programa não conseguiu achar meu banco de dados !
O que pode estar acontecendo ?

Grato desde já !

4 Respostas

G

Pessoal, pesquisei na documentação do próprio Java DB e descobri que uma vez que o driver for carregado, o banco será iniciado automaticamente.

Segue um trecho do documento:

"Starting Derby as an embedded database

To start Derby, you start the Derby JDBC driver. Starting the Derby driver starts up the

complete Derby system within the current JVM.

For example, when using the JBDC driver manager directly within Java code, you

typically start a JDBC driver in one of these ways:

? Specify the jdbc.drivers system property, which allows users to customize the JDBC

drivers used by their applications. For example:

java -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver

applicationClass

? Load the class directly from Java code using the static method Class.forName. For

example:

Class.forName(org.apache.derby.jdbc.EmbeddedDriver);

? If your application runs on JDK 1.6 or higher, then you do not need to explicitlty load

the EmbeddedDriver. In that environment, the driver loads automatically and the

engine starts when your application requests its first Connection.

For more details, see java.sql.Driver interface in the Java DB Reference Manual.

Once the Derby JDBC driver class has been loaded, you can connect to any Derby

database by passing the embedded connection URL with the appropriate attributes to the

DriverManager.getConnection method.

For example:

Connection conn = DriverManager.getConnection(jdbc:derby:sample);

Portanto, pensei que o seguinte código por si só já deveria conectar ao banco de dados, já que o servidor já havia sido iniciado “embutido” na mesma jvm do programa.

try{

Connection con = DriverManager.getConnection(“jdbc:derby://localhost:1527/CRHDatabase, crh, crh);

launch(CRHDatabaseApp.class, args);

}catch (Exception ex){

System.out.println("Erro na execução: " + ex.getMessage());

}

Porém, só funciona se eu conectar ao servidor manualmente !
O que devo fazer ?

A

Olá Gustavo

vc conseguiu resolver seu problema de iniciar o serviço do Java DB? Como?

Eu estou com o mesmo problema, poderia me dizer como fez?

G

Oi Alex, tudo bom cara ?

Desculpe pela demora !

Infelizmente não consegui resolver o problema do JavaDB e nem continuei tentando, pois houve algumas mudanças no meu estágio na época e fui trabalhar com o PostgreSQL.

L

Faz o seguinte:
1º: Entre no site da Apache: http://db.apache.org/derby/derby_downloads.html
2º: Vá em Latest Official Release e entre no link para baixar o ultimo pacote do Apache Derby.
3º: Em Distributions baixe db-derby-ultimaversão-bin.zip(extensão para descompactação no Windows) ou db-derby-ultimaversão-bin.tar.gz(extensão para descompactação no Linux).
4º: Descompacte a pasta no lugar que desejar, é nela que contém todos os arquivos do servidor Apache Derby(pode automatizar criando um instalador para fazer isso).
5º: Crie uma nova classe e gere o “start.jar”(pode chamar do que quiser) contendo referencia ao arquivo startNetworkServer.bat da pasta bin da pasta do server do Apache Derby e ao seu programa.

public class start {

    public static void main(String[] args) {
        try {
            //Executa comando do windows ou linux no rt.exec("comandos");
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec("cmd /c start derby\\bin\\startNetworkServer.bat");//Envés de "derby\\bin\\startNetworkServer.bat" pode ser C:\\Tao\\Oquefor
            //No meu caso descompactei na pasta do meu programa e do start.jar e chamei de derby a pasta do server.
            proc = rt.exec("cmd.exe /c start java -jar SeuPrograma.jar");//Envés de "SeuPrograma.jar" pode ser C:\\Oquefor\\SeuPrograma.jar
           //Process proc = rt.exec("cmd /c start derby\\bin\\stopNetworkServer.bat"); para parar o servidor.
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

Fiz um jeito mais profissional:
Obs: esteja configurado as variaveis do seu sistema operacional corretamente.
http://db.apache.org/derby/papers/DerbyTut/ns_intro.html#ns_lookat_code

Para quando iniciar o seu programa execute:
proc = rt.exec(“java -jar “lib\derbyrun.jar” server start”);// lib\derbyrun.jar é o local do arquivo (que provavelmente esta em seu projeto).
Obs: " é igual aspas em uma Strring no Java.

Quando finaliza-lo execute:
proc = rt.exec(“java -jar “lib\derbyrun.jar” server shutdown”);

E pronto! Problema resolvido ;D

By LDM

Criado 14 de abril de 2009
Ultima resposta 22 de nov. de 2010
Respostas 4
Participantes 3