diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/DataSourceConfig.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/DataSourceConfig.java
new file mode 100644
index 0000000..8363b65
--- /dev/null
+++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/DataSourceConfig.java
@@ -0,0 +1,55 @@
+/*
+ * Demoiselle Framework
+ * Copyright (C) 2010 SERPRO
+ * ----------------------------------------------------------------------------
+ * This file is part of Demoiselle Framework.
+ *
+ * Demoiselle Framework is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License version 3
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License version 3
+ * along with this program; if not, see
+ * or write to the Free Software Foundation, Inc., 51 Franklin Street,
+ * Fifth Floor, Boston, MA 02110-1301, USA.
+ * ----------------------------------------------------------------------------
+ * Este arquivo é parte do Framework Demoiselle.
+ *
+ * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
+ * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
+ * do Software Livre (FSF).
+ *
+ * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
+ * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
+ * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
+ * para maiores detalhes.
+ *
+ * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
+ * "LICENCA.txt", junto com esse programa. Se não, acesse
+ * ou escreva para a Fundação do Software Livre (FSF) Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
+ */
+package br.gov.frameworkdemoiselle.internal.configuration;
+
+import java.io.Serializable;
+
+import br.gov.frameworkdemoiselle.annotation.Name;
+import br.gov.frameworkdemoiselle.configuration.Configuration;
+
+@Configuration(prefix = "frameworkdemoiselle.jdbc.")
+public class DataSourceConfig implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Name("jndi.name")
+ private String jndiName;
+
+ public String getJndiName() {
+ return jndiName;
+ }
+}
diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java
new file mode 100644
index 0000000..8687877
--- /dev/null
+++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/ConnectionProducer.java
@@ -0,0 +1,66 @@
+package br.gov.frameworkdemoiselle.internal.producer;
+
+import java.io.Serializable;
+import java.sql.Connection;
+
+import javax.annotation.PreDestroy;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.inject.Produces;
+import javax.sql.DataSource;
+
+import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
+import br.gov.frameworkdemoiselle.util.Beans;
+
+@RequestScoped
+public class ConnectionProducer implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private transient Connection connection;
+
+ @Produces
+ public Connection create() {
+ if (this.connection == null) {
+ this.connection = init();
+ }
+
+ return this.connection;
+ }
+
+ private Connection init() {
+ Connection result;
+
+ try {
+ DataSource dataSource = Beans.getReference(DataSource.class);
+ result = dataSource.getConnection();
+
+ } catch (Exception cause) {
+ // TODO Colocar uma mensagem amigável
+
+ throw new ConfigurationException("", cause);
+ }
+
+ return result;
+ }
+
+ @PreDestroy
+ public void close() {
+ if (this.connection != null) {
+
+ try {
+ if (this.connection.isClosed()) {
+ // TODO Logar um warning informando que a conexão já havia sido finalizada.
+
+ } else {
+ this.connection.close();
+ // TODO Logar um info informando que a conexão foi finalizada.
+ }
+
+ } catch (Exception cause) {
+ // TODO Colocar uma mensagem amigável
+
+ throw new ConfigurationException("", cause);
+ }
+ }
+ }
+}
diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/DataSourceProducer.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/DataSourceProducer.java
new file mode 100644
index 0000000..9da03f9
--- /dev/null
+++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/internal/producer/DataSourceProducer.java
@@ -0,0 +1,51 @@
+package br.gov.frameworkdemoiselle.internal.producer;
+
+import java.io.Serializable;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.sql.DataSource;
+
+import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
+import br.gov.frameworkdemoiselle.internal.configuration.DataSourceConfig;
+import br.gov.frameworkdemoiselle.util.Beans;
+
+@ApplicationScoped
+public class DataSourceProducer implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private transient DataSource dataSource;
+
+ @Produces
+ public DataSource create() {
+ if (this.dataSource == null) {
+ this.dataSource = init();
+ }
+
+ return this.dataSource;
+ }
+
+ private DataSource init() {
+ DataSource result;
+
+ try {
+ DataSourceConfig config = Beans.getReference(DataSourceConfig.class);
+ String jndi = config.getJndiName();
+
+ // TODO Lançar exceção caso o JNDI esteja vazio ou nulo.
+
+ Context context = new InitialContext();
+ result = (DataSource) context.lookup(jndi);
+
+ } catch (Exception cause) {
+ // TODO Colocar uma mensagem amigável
+
+ throw new ConfigurationException("", cause);
+ }
+
+ return result;
+ }
+}
--
libgit2 0.21.2