dev@glassfish.java.net

Re: PU with TX Type JTA

From: Arun Gupta <Arun.Gupta_at_Sun.COM>
Date: Mon, 18 Jun 2007 09:51:16 -0700

Lance,

cil

> For simple examples using a Java SE application with Java Persistence
> (the JSP part are not covered but I can help you if needed)
>
> http://weblogs.java.net/blog/lancea/archive/2007/06/using_java_web.html
This is a recent entry and has way too much details for HW.

> https://glassfish.dev.java.net/javaee5/persistence/persistence-example.html
> http://www.netbeans.org/kb/55/persistence-j2se.html
>
> This is a pretty basic example using a simple web app
> http://www.netbeans.org/kb/55/persistence.html

Bullet#5 says "default data source jdbc/sample". This is not valid for
GlassFish V2 b50/NB 5.5.1. My code is now:

-- cut here --
             utx.begin();
             EntityManagerFactory emf =
Persistence.createEntityManagerFactory("JavaLibrary1PU");
             out.println("<h1>JPA Hello World!</h1>");

             EntityManager em = emf.createEntityManager();
             Company c = new Company("1", "AAA Co", (float)10.0,
(float)2.0, (float)10.0, "Jun 15, 2007");
             em.persist(c);
             out.println("Persisting to the source ...");
             out.println("and now committed!");

             Company c2 = (Company) em.createQuery(
                  "select c from Company c where c.id = :id")
                  .setParameter("id", "1").getSingleResult();
                 utx.commit();
-- cut here --

and giving the following exception:

-- cut here --
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build
b50-beta3 (06/06/2007))):
oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Table/View 'COMPANY' does not
exist.
Error Code: -1
Call: SELECT ID, CHANGE, PERCENTCHANGE, PRICE, LASTUPDATED, COMPANYNAME
FROM COMPANY WHERE (ID = CAST (? AS VARCHAR(32672) ))
         bind => [1]
Query: ReportQuery(sample.Company)
         at
oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
         at
oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:566)
         at
oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
-- cut here --

I'm getting this inspite of persistence.xml containing
drop-and-create-tables.

>
>
> I think Mitesh and Marina answered your other questions. If not,
> perhaps post your sample app and we can help you clean it up.
Yes, I'd still like my app to work and understand the whys/wheres of
getting JPA to work :)

-Arun
>
> Regards
> lancde
>
> Arun Gupta wrote:
>> On java.net, are you talking about [1] ? That only got me where I'm
>> right now but still missing why my application is not able to persist
>> the data in database. I've not tried the app as is because I'd like
>> something really simple.
>>
>> I search "JPA" on netbeans.org and get pointers to (in order):
>>
>> 1). http://wiki.netbeans.org/wiki/view/UsingJSFAndFaceletsInNetbeans
>> Certainly does not qualify as HW!
>>
>> 2). Second link is:
>> http://wiki.netbeans.org/wiki/view/UsingHibernateWithJPA
>>
>> This requires an additional software (Hibernate) and does not work
>> out-of-the-box (using TopLink). I don't qualify this as HW!
>>
>> 3rd & 4th link are FishEye.
>>
>> 5th link is: http://www.netbeans.org/kb/55/persistence.html This uses
>> JSF and I don't qualify this as HW.
>>
>> Rest of the links are FishEye or not directly relevant.
>>
>> I'm looking for a plain-vanilla example of JPA where no other "frills"
>> are required or used. That would be using JPA in an index.jsp (without
>> any frameworks) using TopLink on GlassFish promoted build.
>>
>> Googling web or netbeans.org does not seem to point me to such a
>> resource. JavaEE5 tutorial also requires to understand the Duke's
>> Bookstore scenario.
>>
>> In order to understand the technology, I'd like to keep the additional
>> requirements to zero or minimal.
>>
>> Can you point me to such a blog or article ?
>>
>> Either way I'd like to understand why my application is not able to
>> create database tables even though I'm getting the error:
>>
>> -- cut here --
>> JDO76609: Got SQLException executing statement "CREATE TABLE COMPANY
>> (ID VARCHAR(255) NOT NULL, CHANGE FLOAT, PERCENTCHANGE FLOAT, PRICE
>> FLOAT, LASTUPDATED VARCHAR(255), COMPANYNAME VARCHAR(255), PRIMARY KEY
>> (ID))": java.sql.SQLException: Table/View 'COMPANY' already exists in
>> Schema 'APP'.
>> -- cut here --
>>
>> persistence.xml has "jdbc:derby://localhost:1527/sample;create=true"
>> and when I connect using NetBeans to this URL, the table is not shown.
>> And of course, then there is no data there as well :) What am I missing ?
>>
>> [1]
>> https://glassfish.dev.java.net/javaee5/persistence/persistence-example.html#Using_in_Java_EE
>>
>>
>> -Arun
>>
>> Lance J. Andersen wrote:
>>> Hi Arun,
>>>
>>> There are a bunch of blogs similar to what u are suggesting already
>>> and a few good articles on netbeans.org.
>>>
>>> download the app from the blog on java.net i just put together on
>>> JPA, netbeans and webstart, perhaps that will help answer some of
>>> your questions
>>>
>>> Regards
>>> Lance
>>>
>>> Arun Gupta wrote:
>>>> cil
>>>>
>>>> Marina Vatkina wrote:
>>>>> Sorry, I means if you want to use EntityTransaction, you need to
>>>>> have EMF injected/lookedup.
>>>> I'm just trying to create a JPA Hello World using NetBeans IDE and
>>>> then blog about it and I'd like to do it the easiest way :)
>>>> Injection, to me, is better than hand-creating a TX!
>>>>
>>>>>
>>>>> Do you mean you don't see the data in the table or the table being
>>>>> created?
>>>> Yep, neither the table and of course no data.
>>>>
>>>>>
>>>>> To get the former, you need transactions to commit the changes, to
>>>>> get the latter, you need to use provider-specific tools. Do you use
>>>>> GlassFish with Toplink Essentials?
>>>> Yes
>>>>
>>>>> If yes, and you use CLI to deploy your app, you can just specify
>>>>> --dropandcreatetables=true on the asadmin
>>>> persistence.xml has:
>>>>
>>>> <property name="toplink.ddl-generation" value="create-tables"/>
>>>>
>>>> And I'd like to the deployment from NetBeans, not CLI.
>>>>
>>>> What else ?
>>>>
>>>> -Arun
>>>>> deploy. Otherwise, you'd need to set the provider-specific
>>>>> properties in the persistence.xml file.
>>>>>
>>>>> HTH,
>>>>> -marina
>>>>>
>>>>> Arun Gupta wrote:
>>>>>> Cool! Changing my code to:
>>>>>>
>>>>>> -- cut here --
>>>>>> @PersistenceUnit(unitName="JavaLibrary1PU")
>>>>>> private EntityManagerFactory emf;
>>>>>>
>>>>>> EntityManager em = emf.createEntityManager();
>>>>>> // em.getTransaction().begin();
>>>>>> Company c = new Company("1", "AAA Co", (float)10.0,
>>>>>> (float)2.0, (float)10.0, "Jun 15, 2007");
>>>>>> em.persist(c);
>>>>>> out.println("Persisting to the source ...");
>>>>>> // em.getTransaction().commit();
>>>>>> out.println("and now committed!");
>>>>>> -- cut here --
>>>>>>
>>>>>> got away with that error and my web page now shows
>>>>>>
>>>>>> "Persisting to the source ... and now committed!"
>>>>>>
>>>>>> But I do not see the Table in the database URL identified in
>>>>>> persistence.xml. What could be wrong ?
>>>>>>
>>>>>> -Arun
>>>>>>
>>>>>> Marina Vatkina wrote:
>>>>>>
>>>>>>> Arun,
>>>>>>>
>>>>>>> The exceptions are right - you can't mix and match the access
>>>>>>> types. You need to either inject an EMF via @PersistenceUnit, and
>>>>>>> then create an EM or use UserTransaction for the transaction
>>>>>>> boundaries.
>>>>>>>
>>>>>>> regards,
>>>>>>> -marina
>>>>>>>
>>>>>>> Arun Gupta wrote:
>>>>>>>
>>>>>>>> Ok, I figured out how to set the transaction type (manually edit
>>>>>>>> persistence.xml). But now I'm getting:
>>>>>>>>
>>>>>>>> -- cut here --
>>>>>>>> Exception Description: Cannot use an EntityTransaction while
>>>>>>>> using JTA.
>>>>>>>> at
>>>>>>>> oracle.toplink.essentials.internal.ejb.cmp3.transaction.JTATransactionWrapper.getTransaction(JTATransactionWrapper.java:66)
>>>>>>>>
>>>>>>>> at
>>>>>>>> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.getTransaction(EntityManagerImpl.java:340)
>>>>>>>>
>>>>>>>> at
>>>>>>>> com.sun.enterprise.util.EntityManagerWrapper.getTransaction(EntityManagerWrapper.java:1094)
>>>>>>>>
>>>>>>>> -- cut here --
>>>>>>>>
>>>>>>>> Here is my code for a WebApplication:
>>>>>>>> -- cut here --
>>>>>>>> @PersistenceContext(unitName="JavaLibrary1PU")
>>>>>>>> EntityManager em;
>>>>>>>> em.getTransaction();
>>>>>>>> Company c = new Company("1", "AAA Co", (float)10.0,
>>>>>>>> (float)2.0, (float)10.0, "Jun 15, 2007");
>>>>>>>> em.persist(c);
>>>>>>>> out.println("Persisting to the source ...");
>>>>>>>> em.getTransaction().commit();
>>>>>>>> out.println("and now committed!");
>>>>>>>> -- cut here --
>>>>>>>>
>>>>>>>> What is missing ?
>>>>>>>>
>>>>>>>> -Arun
>>>>>>>>
>>>>>>>> Arun Gupta wrote:
>>>>>>>>
>>>>>>>>> Here is a great error message I see when deploying an error:
>>>>>>>>>
>>>>>>>>> -- cut here --
>>>>>>>>> Deploying application in domain failed; Deployment Error -- The
>>>>>>>>> persistence-context-ref-name [sample.NewServlet/em] in module
>>>>>>>>> [C:\Users\Arun Gupta\WebApplication5\build\web] resolves to a
>>>>>>>>> persistence unit called [JavaLibrary1PU] which is of type
>>>>>>>>> RESOURCE_LOCAL. Only persistence units with transaction type
>>>>>>>>> JTA can be used as a container managed entity manager. Please
>>>>>>>>> verify your application.
>>>>>>>>> -- cut here --
>>>>>>>>>
>>>>>>>>> Little detailed but very clearly conveys what is possibly wrong
>>>>>>>>> in the application. Now how do I fix it when generating this PU
>>>>>>>>> in NB ?
>>>>>>>>>
>>>>>>>>> -Arun
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>

-- 
Technology Evangelist
Web Technologies and Standards
Sun Microsystems, Inc.
Blog: http://blogs.sun.com/arungupta