Ajuda-me - Vraptor

3 respostas
J

Fal galera do forum …

estou com um problema e gostaria que vcs me dessem uma dica de como resolve-lo…

é o seguinte estou querendo usar um framework MVC para simplificar a minha vida … não ter que ficar digitando
muito código com o uso direto de Servlet…

Bem estou desenvolvendo uma aplicação onde uso o banco de dados DB4O que para mim é um banco ótimo…

Meu sistema é o seguinte eu tenho um Servidor de banco de dados… e gostaria de mantelo aberto em quanto o contexto da aplicação estiver aberta isso é quando inicio o Tom cat ele cria o servidor para mim e quando dou um shotdown no servidor ele fecha o Servidor do banco de dados.

até tudo bem crie com Servlet e funciona perfeitamente …

o código é o seguinte:

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.db4o.Db4o;
import com.db4o.ObjectServer;
import com.db4o.config.ConfigScope;
import com.db4o.config.Configuration;

public class Db4oServletContextListener implements ServletContextListener {
	private ObjectServer server = null;
	private final String KEY_DB4O_FILE_NAME = "db4oFileName";
	private final String KEY_DB4O_SERVER = "db4oServer";

	public void contextInitialized(ServletContextEvent event) {
		close();
		
		ServletContext context = event.getServletContext();
		String filePath = context.getRealPath("WEB-INF/DataBase/"
				+ context.getInitParameter(KEY_DB4O_FILE_NAME));
		
		server = Db4o.openServer(filePath, 0);
		
		context.setAttribute(KEY_DB4O_SERVER, server);
		context.log("db4o startup on ");
	}

	public void contextDestroyed(ServletContextEvent event) {
		ServletContext context = event.getServletContext();
		context.removeAttribute("db4oServer");
		
		close();
		
		context.log("db4o shutdown");
	}

	private void close() {
		if (server != null) {
			server.close();
		}
		server = null;
	}
}

Esse código é o responssavel por criar o Servidor do banco de dados…

e essse é o respoonssavel por abrir o Client do banco :

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.webpatterns.webloja.dao.UsuarioDao;
import br.com.webpatterns.webloja.modelo.Usuario;

import com.db4o.ObjectContainer;
import com.db4o.ObjectServer;

public class AcessaAplicacao extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		
		ServletContext context = getServletContext();
		
		ObjectServer server = (ObjectServer) context.getAttribute("db4oServer");
		
		ObjectContainer objectcontainer = server.openClient(); // crio o Client apartir do Server do Contexto
		
		UsuarioDao usuariodao = new UsuarioDao(objectcontainer);
		PrintWriter out = response.getWriter();
		
		Usuario u = new Usuario();
		u.setId(10);
		u.setLogin("Admim");
		u.setSenha("admin");
		u.setEmail("[email removido]");

		if(usuariodao.extiteUnico(u) == null) {
			usuariodao.adiciona(u);

			out.println("<html>");
			out.println("Usuario adicionado com sucesso.");
			out.println("</html>");
			
			objectcontainer.close();
		}
		else {
			out.println("<html>");
			out.println("Usuario ja foi cadastrado.");
			out.println("</html>");
			objectcontainer.close();
		}		
	}
}

coloquei a regra de gravação junto só para testar…

mais ai vem o meu problema gostaria de fazer do mesmo jeito no vraptor…

quando eu iniciar o Tomcat ele criasse o Servidor do Db4O e eu so pegasse o contexto e criasse o Client apartir desse servidor…

alguem teria ideia de como fazer isso…

por favor fico aguardando respostas…

3 Respostas

ze_kiefa

Uma sugestão: crie um datasource da conexão com o banco no Tomcat para acessá-lo, quando necessário, na sua aplicação.
Quem controla o número de conexões é o Tomcat e não a sua aplicação (uma preocupação a menos para você).

O acesso ao banco do jeito que você deseja pode ser feito em algum Interceptor do VRaptor.

Confira o link para mais detalhes.

J

Vou tentar fazer isso que vc falou criar um data source pelo Tomcat…

tentei fazer com o Interceptor mais não obtive sucesso…

acho que não não compreendi direto como funciona…

Bem mais todo caso
estou pesquisando sobre o vraptor… e se tiver algum sucesso… eu posto ai para vc…

Se caso vc tiver uma ideia de por onde eu possa começar no vraptor… usando Interceptor
posta ai… por favor…

ze_kiefa

O Interceptor do VRaptor é simplesmente um filtro, o qual é chamado ANTES de executar a camada de negócio e DEPOIS de direcionar para a camada de apresentação (as telas).

Em Servlets, esses filtros são executados ANTES e DEPOIS da chamada de um Servlet qualquer.

Eles (os filtros) são bastante utilizados para conexões ao banco e autenticação de usuários, pois são ações que você efetua antes e depois da execução de alguma coisa.

Basicamente:

Requisição -> Interceptor (Filter) -> Lógica (Servlet) -> Interceptor (Filter) -> renderização da página.


Em relação à configuração de Datasources no Tomcat 6, dê uma olhada aqui.

OK?

Criado 8 de agosto de 2008
Ultima resposta 8 de ago. de 2008
Respostas 3
Participantes 2