Hi Mansour,
Did you have a look to our sample named "spring-integration"?
I seems to me it's what your are trying to do?
Let us know if not.
Jean-Louis
Mansour Al Akeel wrote:
>
> I do have some dao working with spring and tested them as pojos. I am
> porting them to stateless beans. I am using User transaction (bean
> managed transaction).
> Following the example of entityManager injection :
>
> public class RestaurantDaoTest3 extends AbstractRestaurantDaoTest {
>
> private static Context context;
>
> @BeforeClass
> public static void setUpBeforeClass() throws Exception
> {
> DBSetup.runDbUnitSetup();
> logger.warn("Strating testing using OpenEJB");
> Properties properties = new Properties();
> properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.openejb.client.LocalInitialContextFactory");
> properties.put("openEjbDatabase", "new://Resource?type=DataSource");
> properties.put("openEjbDatabase.JdbcDriver", "com.mysql.jdbc.Driver");
> properties.put("openEjbDatabase.JdbcUrl",
> "jdbc:mysql://neptune:3306/dbtest");
> properties.put("openEjbDatabase.UserName", "sa");
> properties.put("openEjbDatabase.PassWord", "");
>
> context = new InitialContext(properties);
> Object obj = context.lookup("RestaurantDao3Local");
> dao = (IDao) obj;
> }
> }
>
> And the relevant dao code:
> @Resource
> private UserTransaction utx;
> @Override
> public Restaurant create(Restaurant obj)
> {
> Restaurant created = obj;
> try
> {
> utx.begin();
> obj = getEntityManager().merge(obj);
> getEntityManager().persist(obj);
> getEntityManager().flush();
> utx.commit();
> } catch (Exception e)
> {
> e.printStackTrace();
> }
> return created;
> }
>
> The exception I am getting:
> <openjpa-1.2.1-r752877:753278 nonfatal user error>
> org.apache.openjpa.persistence.TransactionRequiredException: Can only
> perform operation while a transaction is active.
> at
> org.apache.openjpa.kernel.BrokerImpl.assertActiveTransaction(BrokerImpl.java:4380)
> at
> org.apache.openjpa.kernel.DelegatingBroker.assertActiveTransaction(DelegatingBroker.java:1330)
> at
> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:591)
> at
> org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:130)
>
> This is my persistence.xml:
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <persistence version="1.0"
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
> http://java.sun.com/xml/ns/persistence/orm
> http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
> xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <persistence-unit name="Testing" transaction-type="RESOURCE_LOCAL">
> <class>ws.mansour.entities.Restaurant</class>
> </persistence-unit>
> </persistence>
>
>
> I do have few quesitons here:
> 1- In the jndi Resource, I added openEjbDatabase as a DataSource, but
> I don't understand how did it got picked by other DAO operations (ie.
> read).
> 2- I am using RESOURCE_LOCAL at transaction type, which indicates that
> the container (context) will not handle this. How do I create a
> tranaction ? With spring I was not able to do
> entityManager.getTranaction(), because the entityManager injected by
> spring is proxied (AFAIK). Doing this here, will give me another
> error, for example:
> try
> {
> getEntityManager().getTransaction().begin();
> obj = getEntityManager().merge(obj);
> getEntityManager().persist(obj);
> getEntityManager().flush();
> getEntityManager().getTransaction().commit();
> } catch (Exception e)
>
> will give:
>
> java.lang.IllegalStateException: A JTA EntityManager can not use the
> EntityTransaction API. See JPA 1.0 section 5.5
> at
> org.apache.openejb.persistence.JtaEntityManager.getTransaction(JtaEntityManager.java:220)
>
> What am I doing wrong ?
>
>
--
View this message in context:
http://old.nabble.com/Transaction-required-exception-tp26805898p26807467.html
Sent from the OpenEJB User mailing list archive at Nabble.com.