Hi Paul,
Enqueuing a task at start-up to instantiate a PMF instance
----------------------------------------------------------
First, some code.
private static String g_sDatabaseMode = null;
private static final Object objLockPMF = new Object();
private static volatile PersistenceManagerFactory g_pmf = null;
/**
* If this class's static singleton <code>PersistenceManagerFactory</code>
* is <code>null</code>, then construct it in a synchronised block of code.
* @return
* This class's static singleton <code>PersistenceManagerFactory</code>.
*/
public static PersistenceManagerFactory getPersistenceManagerFactory()
{
if (g_pmf == null)
synchronized(objLockPMF)
{
if (g_pmf == null)
{
loadProperties(); // Sets g_sDatabaseMode
g_pmf = JDOHelper.getPersistenceManagerFactory(g_sDatabaseMode);
}
}
return g_pmf;
}
On a first hit of my web application's home page, a task is enqueued for immediate
execution. This task calls the above method. In effect, I am using a separate
"thread" to initialise the WebAplication class's singleton instance of a
PersistenceManagerFactory. Since the method
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(String
s);
takes a few seconds to return, my use of an enqueued task means that this delay
is not shown to the user. Exception: since all my code to exchange data with
the datastore uses the above method, a user's attempt to do something before
the above call has returned (from the home page or otherwise) will involve a
delay to wait for the call to complete, since my typical datastore data
exchange code is like this:
PersistenceManagerFactory pmf = DataExchange.getPersistenceManagerFactory();
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try
{
tx.begin();
//
// Do data exchange stuff
//
tx.commit();
}
finally
{
try
{
if (tx.isActive()) // Because of an exception, say
tx.rollback();
}
finally
{
pm.close();
}
}
Any help?
Ian
-------- Original Message --------
Subject: [google-appengine] Re: Problem updating my project to new SDK
Date: Sat, 17 Dec 2011 06:24:14 -0800 (PST)
From: Paul <[email protected]>
Reply-To: [email protected]
To: Google App Engine <[email protected]>
I use JDO too, I have built my app on top of that maven archetype with
JDO and Wicket. With Guice too.
I really like same things you mentioned and I am still constantly
surprised that people prefer JSP and JSF. I have to work on Oracle's
ADF at my day job, really ugly stuff.
My home page does not exchange data with datastore, at least not
initially [it has login screen]. Could you tell me more about point
1?
On Dec 16, 10:36 am, Ian Marshall<[email protected]> wrote:
I love Wicket. I can use my Java experience (and I really like Java
too). Wicket is my first web development framework, and I love the
clean split between the HTML and Java code (for me, the links between
them are just some wicket tags). I do not do all this servlet and
related stuff; I let Wicket do all that for me!
As for start-up times, what's your data persistence technology? I use
JDO. For this, there is a many-second period required to instantiate a
JVM's singleton instance of a persistence manager factory (PMF). My
ways to cope with this are:
1. Enqueue a task at start-up to instantiate a PMF instance.
2. Ensure that the home page does not need to exchange data with
the datastore.
My start-up times can be very slow for my zero traffic due to a new
JVM being started, but that's nothing to do with Wicket or JDO. I can
always have a JVM instance always on to counter this.
-------- Original Message --------
I will take a look at that, it was quite mysterious to me, as I have
even deleted all old sdks from my disk and changed all reference.
Anyway, are you happy with Apache Wicket? I am quite early with my
project and I really like Wicket. I am a bit worried about performance
though - do you have any issues with that? How about startup times?
Mines are really slow, but I am not sure if Wicket has anything to do
with it.
On Dec 14, 9:47 am, Ian Marshall<[email protected]> wrote:
> I believe that the GAE/J SDK files we have in our
> war\WEB-INF\lib
> folder dictate to GAE/J which version of the SDK we want to be run in
> production. For example: I have
> appengine-api-1.0-sdk-1.5.5.jar
> amongst other .jar files, so my app will run under the Java 1.5.5 SDK
> when deployed in production. (Yes, I haven't upgraded my build
> environment to take the newest SDK into account.
> Any help? (Hello fellow Apache Wicket developer!)
> On Dec 14, 8:59 am, Paul<[email protected]> wrote:
> > Hi,
> > I am trying to update to the new SDK in my project settings. I am not
> > using Eclipse plugin as it does not work. I use maven for running and
> > deploying. Even though my xml points to newest sdk, it does not work
> > and shows standard message about older sdk version. When running
> > locally it uses correct version, but not always. But when deploying it
> > shows that I'm using 2-3 versions older SDK. Am I missing something?
--
You received this message because you are subscribed to the Google Groups "Google
App Engine" 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-appengine?hl=en.