Re: Cayenne on Google App Engine

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Jul 07 2009 - 06:46:07 EDT

  • Next message: Andrus Adamchik: "Re: Oracle driver"

    Yeah, EventManager is probably the only piece that is explicitly
    starting new threads. It is used by Cayenne runtime to refresh peer
    contexts after commits. Without re-reading the App Engine docs, I
    can't say whether such operation would even make sense under their
    programming model, but still it should be fairly easy to disable EM
    thread pool.

    This will require some patching of the Configuration class though to
    allow installing a noop / nothread implementation of EventManager.

    Andrus

    On Jul 4, 2009, at 3:52 PM, Bob Schellink wrote:
    > Hi all,
    >
    > For fun I've been trying to get Cayenne running on Google App Engine
    > (GAE) using the in-memory HSQLDB database. GAE has quite a number of
    > restrictions such as disallowing creation of new threads. More
    > importantly GAE isn't backed by a RDBMS and so JDBC isn't supported,
    > however in-memory databases could work (in theory at least).
    >
    > Anyway trying to get the app running throws the stackTrace below
    > because Cayenne's EventManager starts new threads. Is this a deal
    > breaker or are there perhaps a workaround?
    >
    > kind regards
    >
    > bob
    >
    >
    > org.apache.cayenne.conf.Configuration initializeSharedConfiguration:
    > Error creating shared Configuration:
    > java.security.AccessControlException: access denied
    > (java.lang.RuntimePermission modifyThreadGroup)
    > at java.security.AccessControlContext.checkPermission(Unknown
    > Source)
    > at java.security.AccessController.checkPermission(Unknown Source)
    > at java.lang.SecurityManager.checkPermission(Unknown Source)
    > at com.google.apphosting.utils.security.SecurityManagerInstaller
    > $CustomSecurityManager.checkAccess(SecurityManagerInstaller.java:72)
    > at java.lang.ThreadGroup.checkAccess(Unknown Source)
    > at java.lang.Thread.init(Unknown Source)
    > at java.lang.Thread.<init>(Unknown Source)
    > at org.apache.cayenne.event.EventManager
    > $DispatchThread.<init>(EventManager.java:457)
    > at org.apache.cayenne.event.EventManager.<init>(EventManager.java:
    > 97)
    > at org.apache.cayenne.event.EventManager.<init>(EventManager.java:
    > 76)
    > at
    > org.apache.cayenne.conf.Configuration.<init>(Configuration.java:193)
    > at
    > org
    > .apache
    > .cayenne.conf.DefaultConfiguration.<init>(DefaultConfiguration.java:
    > 58)
    > at
    > org
    > .apache
    > .cayenne.conf.DefaultConfiguration.<init>(DefaultConfiguration.java:
    > 46)
    > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
    > Method)
    > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
    > Source)
    > at
    > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
    > Source)
    > at java.lang.reflect.Constructor.newInstance(Unknown Source)
    > at java.lang.Class.newInstance0(Unknown Source)
    > at java.lang.Class.newInstance(Unknown Source)
    > at
    > org
    > .apache
    > .cayenne
    > .conf.Configuration.initializeSharedConfiguration(Configuration.java:
    > 133)
    > at
    > org
    > .apache
    > .cayenne
    > .conf.Configuration.initializeSharedConfiguration(Configuration.java:
    > 121)
    > at
    > org
    > .apache
    > .cayenne
    > .conf.Configuration.getSharedConfiguration(Configuration.java:91)
    > at
    > org
    > .apache
    > .cayenne.access.DataContext.createDataContext(DataContext.java:145)
    > at
    > org
    > .apache
    > .click
    > .extras.cayenne.CayenneTemplate.getDataContext(CayenneTemplate.java:
    > 169)
    > at
    > org
    > .apache
    > .click
    > .extras.cayenne.CayenneTemplate.performQuery(CayenneTemplate.java:276)
    > at
    > com.mycorp.service.CustomerService.getCustomers(CustomerService.java:
    > 29)
    > at com.mycorp.page.ViewCustomers.onRender(ViewCustomers.java:76)
    > at
    > org.apache.click.ClickServlet.performOnRender(ClickServlet.java:666)
    > at org.apache.click.ClickServlet.processPage(ClickServlet.java:521)
    > at org.apache.click.ClickServlet.handleRequest(ClickServlet.java:
    > 339)
    > at org.apache.click.ClickServlet.doGet(ClickServlet.java:257)
    >



    This archive was generated by hypermail 2.0.0 : Tue Jul 07 2009 - 06:46:44 EDT