diff --git a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/JDBCTransaction.java b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/JDBCTransaction.java index ac817dc..0bcf0b1 100644 --- a/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/JDBCTransaction.java +++ b/impl/extension/jdbc/src/main/java/br/gov/frameworkdemoiselle/transaction/JDBCTransaction.java @@ -47,7 +47,6 @@ import br.gov.frameworkdemoiselle.internal.producer.ConnectionProducer; import br.gov.frameworkdemoiselle.internal.producer.ConnectionProducer.Status; import br.gov.frameworkdemoiselle.util.Beans; - /** * Represents the strategy destinated to manage JDBC transactions. * @@ -61,22 +60,9 @@ public class JDBCTransaction implements Transaction { private ConnectionProducer producer; - //private Map cache = Collections.synchronizedMap(new HashMap()); - //private List cache = Collections.synchronizedList(new ArrayList()); - private ConnectionProducer getProducer() { if (producer == null) { producer = Beans.getReference(ConnectionProducer.class); - - /*for (Connection connection : producer.getCache().values()) { - if (!ConnectionProxy.class.isInstance(connection)) { - continue; - } - - if (!cache.contains(connection)) { - cache.add((ConnectionProxy)connection); - } - }*/ } return producer; @@ -101,7 +87,7 @@ public class JDBCTransaction implements Transaction { @Override public void commit() { Status status; - + for (Connection connection : getDelegate()) { try { connection.commit(); @@ -119,7 +105,7 @@ public class JDBCTransaction implements Transaction { @Override public void rollback() { Status status; - + for (Connection connection : getDelegate()) { try { connection.rollback(); @@ -165,29 +151,4 @@ public class JDBCTransaction implements Transaction { return result; } - - /*private static class Status implements Serializable { - - private static final long serialVersionUID = 1L; - - private boolean active = false; - - private boolean markedRollback = false; - - public boolean isActive() { - return active; - } - - public void setActive(boolean active) { - this.active = active; - } - - public boolean isMarkedRollback() { - return markedRollback; - } - - public void setRollbackOnly(boolean markedRollback) { - this.markedRollback = markedRollback; - } - }*/ } diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionDriverTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionDriverTest.java index 3db6232..1040f68 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionDriverTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionDriverTest.java @@ -44,6 +44,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -67,7 +68,7 @@ public class ConnectionProducerNoConnectionDriverTest { } /** - * TODO Refinar a exceção esperada + * TODO Refinar a exceção esperada */ @Test(expected = Exception.class) public void failOnCreateConnection() { diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionUrlTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionUrlTest.java index a4484d7..fdc573b 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionUrlTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerNoConnectionUrlTest.java @@ -44,6 +44,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithJndiTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithJndiTest.java index 2e2defa..61b2c84 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithJndiTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithJndiTest.java @@ -46,6 +46,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -73,4 +74,4 @@ public class ConnectionProducerWithJndiTest { assertEquals(conn1.getMetaData().getURL(), "jdbc:derby:target/databases/derby"); } -} \ No newline at end of file +} diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithNameTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithNameTest.java index 64fb9c3..c9f4686 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithNameTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithNameTest.java @@ -45,6 +45,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutJndiTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutJndiTest.java index 5ec5958..e9a779f 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutJndiTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutJndiTest.java @@ -45,6 +45,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -67,9 +68,9 @@ public class ConnectionProducerWithoutJndiTest { return deployment; } - @Test(expected=Exception.class) + @Test(expected = Exception.class) public void createConnection() throws SQLException { conn1.get(); } -} \ No newline at end of file +} diff --git a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutNameTest.java b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutNameTest.java index 315ac4c..03297ac 100644 --- a/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutNameTest.java +++ b/impl/extension/jdbc/src/test/java/connection/producer/ConnectionProducerWithoutNameTest.java @@ -45,6 +45,7 @@ import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/impl/extension/jdbc/src/test/java/transaction/DDL.java b/impl/extension/jdbc/src/test/java/transaction/DDL.java index 0aa6774..2f9614c 100644 --- a/impl/extension/jdbc/src/test/java/transaction/DDL.java +++ b/impl/extension/jdbc/src/test/java/transaction/DDL.java @@ -1,3 +1,39 @@ +/* + * 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 transaction; import java.sql.Connection; diff --git a/impl/extension/jdbc/src/test/java/transaction/MyEntity1.java b/impl/extension/jdbc/src/test/java/transaction/MyEntity1.java index 9863d3d..ae63a57 100644 --- a/impl/extension/jdbc/src/test/java/transaction/MyEntity1.java +++ b/impl/extension/jdbc/src/test/java/transaction/MyEntity1.java @@ -1,6 +1,41 @@ +/* + * 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 transaction; - public class MyEntity1 { private int id; diff --git a/impl/extension/jdbc/src/test/java/transaction/TransactionTest.java b/impl/extension/jdbc/src/test/java/transaction/TransactionTest.java index a301ac9..819e6f1 100644 --- a/impl/extension/jdbc/src/test/java/transaction/TransactionTest.java +++ b/impl/extension/jdbc/src/test/java/transaction/TransactionTest.java @@ -37,7 +37,6 @@ package transaction; -import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import junit.framework.Assert; @@ -45,14 +44,14 @@ import junit.framework.Assert; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import test.Tests; -import br.gov.frameworkdemoiselle.internal.context.ContextManager; -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; +import br.gov.frameworkdemoiselle.transaction.JDBCTransaction; +import br.gov.frameworkdemoiselle.transaction.Transaction; +import br.gov.frameworkdemoiselle.transaction.TransactionContext; @RunWith(Arquillian.class) public class TransactionTest { @@ -61,52 +60,77 @@ public class TransactionTest { @Inject private TransactionalBusiness tb; - + + private Transaction transaction; + + @Inject + private TransactionContext context; + + @Inject + private DDL ddl; + @Deployment public static WebArchive createDeployment() { WebArchive deployment = Tests.createDeployment(TransactionTest.class); deployment.addAsResource(Tests.createFileAsset(PATH + "/demoiselle.properties"), "demoiselle.properties"); return deployment; } - -// @Before -// public void init() throws Exception{ -//// transaction = context.getCurrentTransaction(); -//// ddl.dropAndCreate(); -// } - -// @Before -// public void activeContext() { -// ContextManager.activate(ManagedContext.class, RequestScoped.class); -// } -// -// @After -// public void deactiveContext() { -// ContextManager.deactivate(ManagedContext.class, RequestScoped.class); -// } - + + @Before + public void init() throws Exception { + transaction = context.getCurrentTransaction(); + ddl.dropAndCreate(); + transaction.commit(); + } + @Test - public void isTransactionActiveWithInterceptor(){ + public void isTransactionActiveWithInterceptor() { Assert.assertTrue(tb.isTransactionActiveWithInterceptor()); } - + @Test - public void isTransactionActiveWithoutInterceptor(){ + public void isTransactionActiveWithoutInterceptor() { Assert.assertFalse(tb.isTransactionActiveWithoutInterceptor()); } -// @Test -// public void verifyIfTransactionIsJdbcTransaction() { -// assertEquals(transaction.getClass(), JDBCTransaction.class); -// } -// -// @Test -// public void verifyIfTransactionIsActive() { -// assertTrue(!transaction.isActive()); -// transaction.begin(); -// assertTrue(transaction.isActive()); -// } - + @Test + public void verifyIfTransactionIsJdbcTransaction() { + Assert.assertEquals(transaction.getClass(), JDBCTransaction.class); + } + + @Test + public void verifyIfTransactionIsActive() { + Assert.assertTrue(!transaction.isActive()); + transaction.begin(); + Assert.assertTrue(transaction.isActive()); + } + @Test + public void commitWithSuccess() throws Exception{ + + MyEntity1 m1 = new MyEntity1(); + m1.setId(1); + m1.setDescription("desc-1"); + + tb.insert(m1); + + Assert.assertEquals("desc-1", tb.find(m1.getId()).getDescription()); + + tb.delete(m1); + + Assert.assertNull(tb.find(m1.getId()).getDescription()); + } + + @Test + public void rollbackWithSuccess() throws Exception { + try{ + tb.rollbackWithSuccess(); + } catch (Exception e) { + Assert.assertEquals("Exceção criada para marcar transação para rollback", e.getMessage()); + } + finally{ + MyEntity1 m1 = tb.find(3); + Assert.assertNull(tb.find(m1.getId()).getDescription()); + } + } } - \ No newline at end of file diff --git a/impl/extension/jdbc/src/test/java/transaction/TransactionalBusiness.java b/impl/extension/jdbc/src/test/java/transaction/TransactionalBusiness.java index 1a7bcea..a3551bf 100644 --- a/impl/extension/jdbc/src/test/java/transaction/TransactionalBusiness.java +++ b/impl/extension/jdbc/src/test/java/transaction/TransactionalBusiness.java @@ -1,3 +1,39 @@ +/* + * 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 transaction; import java.sql.Connection; @@ -13,51 +49,63 @@ import br.gov.frameworkdemoiselle.transaction.Transactional; public class TransactionalBusiness { @Inject - private MyEntity1 m1; - - @Inject @Name("conn1") private Connection conn1; - + @Inject private TransactionContext transactionContext; - + @Transactional - public boolean isTransactionActiveWithInterceptor(){ + public boolean isTransactionActiveWithInterceptor() { return transactionContext.getCurrentTransaction().isActive(); } - - public boolean isTransactionActiveWithoutInterceptor(){ + + public boolean isTransactionActiveWithoutInterceptor() { return transactionContext.getCurrentTransaction().isActive(); } - + @Transactional - public void insert() throws Exception { - String sql = "insert into myentity (id, description) values (1, 'Entidade 1')"; + public void insert(MyEntity1 m) throws Exception { + String sql = "insert into myentity (id, description) values (" + m.getId() + ", '" + m.getDescription() + "')"; Statement st = conn1.createStatement(); st.executeUpdate(sql); st.close(); } - + @Transactional - public void delete() throws Exception { - String sql = "delete from myentity where id = 1"; + public void delete(MyEntity1 m1) throws Exception { + String sql = "delete from myentity where id = " + m1.getId(); Statement st = conn1.createStatement(); st.executeUpdate(sql); st.close(); } - + @Transactional public MyEntity1 find(int id) throws Exception { - String sql = "select * from myentity where id = " + id; + String sql = "select * from myentity where id = " + id; Statement st = conn1.createStatement(); ResultSet rs = st.executeQuery(sql); - rs.next(); - m1.setId(rs.getInt(0)); - m1.setDescription(rs.getString(1)); + + MyEntity1 m1 = new MyEntity1(); + while (rs.next()) { + m1.setId(rs.getInt(1)); + m1.setDescription(rs.getString(2)); + } + rs.close(); st.close(); + return m1; - } - + } + + @Transactional + public void rollbackWithSuccess() throws Exception { + MyEntity1 m1 = new MyEntity1(); + m1.setId(3); + + this.insert(m1); + + throw new Exception("Exceção criada para marcar transação para rollback"); + } + } -- libgit2 0.21.2