Hi Yuri,

That does sound painful!

I would recommend using an EE container with a proper JPA
implementation.  I guess the first thing when moving to an EE
container is to understand a bit about that platform.  you can find
out more about glassfish at https://glassfish.dev.java.net/.

I've been using JPA rather than Hibernate and I've been using JTA
transactions (rather than resource local) so I don't need to
explicitly specify the start and end of transactions (however, it also
means that I CANNOT specify the start and end of transactions manually
- I have to go by the JTA conventions).  I had to use JTA because I
was using generated EJB's in another part of the backend and these
were designed to use JTA.


You can keep using development mode even with the EE container (took
me a while to figure that out!), but your IDE probably won't be able
to figure out the URL on it's own.  It's not too difficult tho - just
append "?gwt.codesvr=127.0.0.1:9997" to the EE container URL (so
assuming your server URL is "localhost:8080/Application", the full URL
might be something like "localhost:8080/Application?
gwt.codesvr=127.0.0.1:9997").

However, GWT development mode does not affect the backend code of
course, so whenever you need to update the back-end, you must do a
build - not so bad for the back-end because only the relevant parts
will be recompiled, however, it will rebuild your entire GWT app.

So not ideal, but works reasonably well.  There is probably a way to
get not to recompile the GWT stuff when other parts need to be
rebuilt, but once in a while at least you should do a full clean and
rebuild for your backend and the GWT bits will be recompiled too.

btw, I haven't tried this in 2.1, but it works in 2.0.

Cheers,

Jin



On 7 October 2010 11:41, Y2i <[email protected]> wrote:
Hi Jin,

I'm hitting one road block after another while using plain Jetty...

javax.validation does not work saying that a default provider is not
configured, even though I installed and put on a class path Hibernate
validation framework.  And javax.validation works fine in a simple
Java application.

Another problem is marking methods as transactional.  I can use JPA in
a resource-local mode, so I begin a transaction in an overridden
servlet's doPost method and commit it at the end of the method, but I
have to do this even when I don't need a transaction.

Little things, but they are painful...

I wanted to ask you for an advice on how to move to an EE container.
When you use Glassfish, what does your development process look like?
I'm mostly interested in debugging my client and server code without
going through GWT compilation step.  Can you do that?  I would also
appreciate any other advice.

Thanks in advance,
Yuri



On Oct 5, 5:11 pm, Y2i <[email protected]> wrote:
> Hi Jin,
>
> Thank you for your response!
>
> I was able to makeJPAwork in Jetty, but only using resource-local
> entity manager in Java SE environement.  This makes sence because for
> container-managed entity manager an EE environment is required, and
> Jetty by itslef does not provide it.
>
> My persistence unit uses JTA data source, but it probably does not
> make sence to have it in SE environment, so I'll move back to a
> regular data source.
>
> Initially I tried to place my persistence unit in an application
> client jar file.  When I used that jar file from a console
> application, it worked fine.  But as soon as I linked it to my GWT
> project, I ran into problems.  I use GWT 2.1's EntityRecord that is
> annotated with @DataTransferObject(Entity.class), where the Entity
> class sits in the persistence unit.  When I ran the application from
> Eclipse, it would intermitently fail to load saying that Entity class
> could not be found.  When I debugged the application from Eclipse, it
> would always fail with the same error.  GWT compilation would also
> fail similarly.   So I ended up placing the perisistence unit directly
> into the GWT project, exactly as you did, and then the errors
> disappeared.
>
> My main question for you is can you debug your client and server code
> without doing GWT compilation?  Debugging without GWT compilation is
> the main thing that keeps me from moving from a plain Jetty to an
> application server.
>
> Thanks again for your resonse.
>
> Yuri
>
> On Oct 4, 7:08 pm, Jin <[email protected]> wrote:
>
>
>
> > Hi Yuri,
>
> > I went through similar issues trying to get GWT to work withJPA.
>
> > I would imagine that Jetty does *not* supportJPA- I'm using
> > Glassfish Enterprise Server with my GWT app for JEE /JPAsupport.
> > Glassfish is open source and commercial support can be purchased if
> > that's needed.
>
> > I've been able to use injection using annotations (@PersistenceContext
> > etc).
>
> > My GWT and JEE code are in the same project - when I had them in
> > separate projects I had problems getting them to talk.
>
> > Have lots of battle scars from this one, so let me know if you have
> > any other questions =)
>
> > Cheers,
>
> > Jin
>
> > On Oct 4, 6:14 pm, Y2i <[email protected]> wrote:
>
> > > I read through Java Persistence API spec and finally was able to make
> > > a resource-local entity manager work.  persistence.xml went to WEB-INF/
> > > classes/META-INF.
>
> > > I'd like to able to use a container-managed entity manager through
> > > injection, but I'm not sure if it is possible at all using a plain web
> > > container (Jetty).  It looks as if I need to add some sort of an EE
> > > container on top of Jetty, but I'm not sure where to start from.  My
> > > persistence unit already uses JTA-aware data source
> > > (com.atomikos.jdbc.AtomikosDataSourceBean +
> > > org.postgresql.xa.PGXADataSource), but when I try to use
> > > @PersistenceContext or @PersistenceUnit, injection does not happen.  I
> > > would really appreciate it if someone could please help me understand
> > > where I should look next.
>
> > > Thanks in advance!
> > > Yuri
>
> > > On Sep 30, 11:52 pm, Y2i <[email protected]> wrote:
>
> > > > persistence.xml has <persistence-unit name="Domain">.
> > > > I tried @PersistenceContext, @PersistenceUnit and
> > > > Persistence.createEntityManagerFactory() without any result.
> > > > The problem is it does not matter what I type in persistence.xml,
> > > > jetty does not see the file.
> > > > I'm doing something fundamentally wrong, I'll try this again tomorrow
> > > > with a fresh head.
> > > > Thanks for sticking with me!
>
> > > > On Sep 30, 11:33 pm, lineman78 <[email protected]> wrote:
>
> > > > > Does your persistence.xml have the following:
>
> > > > >  <persistence-unit name="Domain">
>
> > > > > and using the following in your session bean:
>
> > > > > @PersistenceContext(unitName="Domain")
> > > > >   EntityManager em;
>
> > > > > On Sep 30, 11:08 pm, Y2i <[email protected]> wrote:
>
> > > > > > Thanks for the reply.  I'm doing something wrong because I'm getting
> > > > > > the same error even when I place persistence.xml to /war/META-INF.
> > > > > > javax.persistence.PersistenceException: No Persistence provider for
> > > > > > EntityManager named Domain
>
> > > > > > The exception is thrown in both hosted and stand-alone mode.  I'll 
> > > > > > try
> > > > > > to configure JTA transactions first before doing anything else with
> > > > > > theJPA.
>
> > > > > > On Sep 30, 6:15 pm, lineman78 <[email protected]> wrote:
>
> > > > > > > persistence.xml should be located in /war/META-INF
>
> > > > > > > On Sep 30, 4:28 pm, Y2i <[email protected]> wrote:
>
> > > > > > > > Client's requests go the server through RequestFactoryServlet.
> > > > > > > > My service objects (those annotated with
> > > > > > > > @Service(SomeDomainClass.class) on the client side are being 
> > > > > > > > called
> > > > > > > > fine.
> > > > > > > > When a service method explicitly creates an entity and returns 
> > > > > > > > it to
> > > > > > > > the client, the request returns without problems.
>
> > > > > > > > The problem occurs as soon as I start usingJPA
> > > > > > > > I use EclipseLink 2.1.0.  The transaction type is Resource 
> > > > > > > > Local for
> > > > > > > > now
>
> > > > > > > > When I try to eject EntityManager using @PersistenceContext, it 
> > > > > > > > is
> > > > > > > > always null.
> > > > > > > > When I try to get the factory using
> > > > > > > > Persistence.createEntityManagerFactory("Domain"), the call 
> > > > > > > > would throw
> > > > > > > > javax.persistence.PersistenceException: No Persistence provider 
> > > > > > > > for
> > > > > > > > EntityManager named Domain
>
> > > > > > > > It seems that nether GWT hosted server nor deployment server
> > > > > > > > (jetty-6.1.23, same as hosted server) see persistence.xml file. 
> > > > > > > >  It
> > > > > > > > does not matter what I type inside persistence.xml - the error 
> > > > > > > > is the
> > > > > > > > same, as though it is not picked up by the server at all.
>
> > > > > > > > Any help, especially where to place persistance.xml for a GWT 
> > > > > > > > project,
> > > > > > > > would be greatly appreciated.  Thanks in advance.
> > > > > > > > Yuri

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to