Utilizando o banco Derby de forma portável

Introdução

Em algumas situações desenvolvemos aplicações de pequeno porte onde queremos utilizar um banco de dados, mas não temos interesse em instalar um SGBD em cada computador que for rodar minha aplicação. Um banco de dados que pode ser usado sem a necessidade de ser instalado é o Apache Derby (a Sun Microsystems utiliza esse mesmo banco de dados com o nome de JavaDB, não sei ao certo a relação entre eles), que é implementado 100% em Java, o que se torna uma excelente opção para aplicações portáveis que utilizam banco de dados e são feitas em Java.

Existem duas formas de se acessar um banco de dados no derby, são elas:

Conexão embarcada: realiza uma conexão diretamente no arquivo da base de dados, por esse motivo não é possível criar mais de uma conexão simultaneamente para a mesma base de dados.

Conexão via serviço de rede: mesmo utilizando o SGBD derby como um banco portável é possível inicializar o serviço de rede sem realizar uma instalação, isso pode ser feito diretamente pelo código, ou pela linha de comando de um terminal, seja (L)unix ou windows.

Requisitos

Os requisitos aqui apresentados se referem a este post, nada impede criar uma aplicação em outra linguagem e utilizar um drive de conexão para o derby.

* Sua aplicação deve ser feita utilizando Java;
* baixar o arquivo: db-derby-v.x.y.z-lib.zip
– derby, derbyclient, derbynet, derbyrun: obrigatórios para executar sua aplicação
– derbytools: jar para executar funções auxiliares do banco de dados, como por exemplo ver info do Derby
– derby_LOCALE_LANGUAGE: adicione sua linguagem para sua aplicação para que o derby possa mostrar as mensagem traduzidas
* Uma JVM instalada no computador cliente

Iniciando o banco de dados derby

Se você for utilizar a conexão embarcada não é necessário iniciar o Apache Derby, uma vez que esse modo não acessa via serviço. Caso contrário você pode iniciar o banco pela linha de comando, utilizando:
java -jar derbynet.jar start
Quando você inicializar o banco pela linha de comando o derby automaticamente irá procurar pela variável de ambiente DERBY_HOME que indica a pasta onde ficam guardados as bases de dados a serem acessadas, no linux você pode definir essa variável através do comando export DERBY_HOME=/home/diretorio, pelo windows, pode-se definir essa variável através Propriedades do Sistema->Avançado->Variáveis de ambiente.

Se preferir, você pode inicializar o banco derby diretamente pelo código de sua aplicação derby, basta inserir as seguintes linhas de código na sua aplicação:

try {
//Aqui você também pode utilizar um caminho relativo, porém lembre-se de que esse
//caminho inicia no mesmo diretório onde você iniciou a aplicação.
System.setProperty("derby.system.home", "/home/usuario/derby");
NetworkServerControlImpl networkServer = new NetworkServerControlImpl();
networkServer.start(new PrintWriter(System.out));
System.out.println("Conectado ao banco de dados.");
} catch (Exception ex) {
System.out.println("Não conseguiu conectar no banco de dados.");
}

Lembre-se de adicionar ao classpath os arquivos jar necessários para sua aplicação.

Caso a variável de ambiente DERBY_HOME não esteja definida (vale tanto para a inicialização via código quanto para a inicialização via terminal) o derby irá procurar automaticamente por base de dados localizadas na pasta de onde você iniciou a aplicação ou executou o comando de iniciar o derby.

Links

Site oficial: http://db.apache.org/derby/
Manual: http://db.apache.org/derby/manuals/index.html
Download: http://db.apache.org/derby/derby_downloads.html#Latest+Official+Release

Creating a CRUD with JSF and Ajax using NetBeans 6.5 Beta

Pre-requisite: NetBeans 6.5 Beta, or most recent version with the “Java Web and EE” or “All” pack. The glassfish version 2 or 3 must be installed.

On this tutorial we will see how to create a CRUD application (Create, Read, Update and Delete) using the NetBeans IDE 6.5 Beta. The main features demonstred in this tutorial are: work with a web project using glassfish and Java Server Faces; create a Persistence Unit; create an Entity Class; automaticaly generate jsf pages from an Entity Class.

Let’s start, first of all go to the Services Tab (Ctrl+5), open Databases node and follow the steps bellow:

  1. Click with right button in Java DB on Start Server (Picture 1)
  2. Click again with right button in Java DB and now click on Create Database…
  3. In the next window fill all fields according to Picture 2

Picture 1 - Starting Java DB server

Picture 2 - Creating a new database in Java DB

After the database creation, so let’s go to our NetBeans project:

  1. Create a new web project (File->New project) in Java Web category, then choose the option Web Application (Picture 3)
  2. in the next window fill all the fields according with Picture 4
  3. Define the web server (recommended glassfish v2 or v3) and the context path (Picture 5)
  4. Click next and select the framework: JavaServer Faces (Picture 6)

Picture 3 - Creating a new web project

Picture 4 - Defining project name and project local

Picture 5 - Suggestions to choose the web server and your configurations

Picture 6 - Adding the framework Java Server Faces to your project

Now your project is created, to test if your project is working correctly with the web server, click with rigth button in project tab (Ctrl+1) and click Run.
Well, the next step is create a new Persistence Unit, an Entity Class, the JPA (Java Persistence API) controllers:

  1. Click in File->New File, select the Persistence category, so choose the option Persistence Unit and click next
  2. Click at the combobox arrow and select New Data Source …
  3. Type a name to jndi (eg: dsExemploJsf or dsSampleJsf), at Database Connection select the connection with the database that you created in the begin of this tutorial, click ok
  4. In Provider and Database window fill all fields according with Picture 8 and then click finish
  5. Again click File->New File, in Persistence category, select Entity Class and click next
  6. In the next window fill all fields according with Picture 9 and click finish

Picture 7 - New Persistence Unit

Picture 8 - Provider and Database

Picture 9 - Creating a new Entity class

After generating the Livro.java (or Book.java) NetBeans shold automatically open it, let’s edit this file that way:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
 
private String isbn;
private String title;
private String author;
private Integer numberOfPages;
private Double weight;
 
public Long getId() {
return id;
}

Then put the cursor position at line imediatlly after:

public void setId(Long id) {
this.id = id;
}

then press simultaneously: alt+insert, select Getter and Setter… then select all fields and click ok.

After creation of the Entity Class, let’s go to more one netbeans wizard wich will generate all necessary code to work with JPA and JSF files, so click in File->New File, in Persistence category, choose the option: JSF Pages From Entity Classes, and follow steps:

  1. Choose Livro’s (or Book’s) Entity Classe (Picture 10)
  2. Choose the packages where will be generated the files for JPA and JSF manipulation (Picture 11), here note that the option “Ajax-enable generated pages” is displayed, this option allows generated code to use Ajax technology, remember that this is only available from version 6.5 beta or the most recent version.

Picture 10 - Select Entity Classes

Picture 11 - Select packages to JPA and JSF

Now we have all necessary code, to test our project result, build the project (type Shift+11, clean and build project) click with right button in project name by Projects tab (Ctrl+1), after click “Undeploy and Deploy” to remove the web project of server (if there is) and deploy version that you already finished building (Picture 12).

If there are no errors message at Output tab (Ctrl+4), you can run the project using F6 key and see your CRUD working wonderful. (Pictures 13 and 14)

Picture 12 - Project Undeploy and Deploy

Picture 13 - CRUD finished, inserting a new registry

Picture 14 - CRUD finished, registries overview after insert confirmation

Conclusion: It’s not recommendable the use of this wizard to generate CRUD by NetBeans for people who don’t have experience with Java Server Faces to do their production work day by day. The importance of this NetBeans feature for this public is that they have access to development step by step about the creation of a CRUD using these wonderful Java frameworks. The learning on this activity is quite satisfactory. For those who already have experience just a look at the creation process and results will teach what to do. For those who want something practical, without much detail, and that is quite fast to do, this guide is quite helpful.

Revised by Ana Lyvia Liveira.