title: DataNucleus: There is no available StoreManager of type "appengine"
body: <p>I am trying to get an AppEngine instance set up with JPA using DataNucleus. But I am getting the following error at runtime when the persistence unit is loaded:</p>
  
  <pre><code>[INFO] Caused by: java.lang.ExceptionInInitializerError
  [INFO]  at org.apache.jsp.guestbook_jsp._jspService(guestbook_jsp.java:123)
  [INFO]  ... 45 more
  [INFO] Caused by: org.datanucleus.exceptions.NucleusUserException: There is no available StoreManager of type "appengine". Make sure that you have put the relevant DataNucleus store plugin in your CLASSPATH and if defini
  ng a connection via JNDI or DataSource you also need to provide persistence property "datanucleus.storeManagerType"
  [INFO]  at org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.java:1276)
  [INFO]  at org.datanucleus.NucleusContext.initialise(NucleusContext.java:357)
  [INFO]  at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialiseNucleusContext(JPAEntityManagerFactory.java:816)
  [INFO]  at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialise(JPAEntityManagerFactory.java:437)
  [INFO]  at org.datanucleus.api.jpa.JPAEntityManagerFactory.&lt;init&gt;(JPAEntityManagerFactory.java:396)
  [INFO]  at org.datanucleus.api.jpa.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:116)
  [INFO]  at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
  [INFO]  at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
  </code></pre>
  
  <p>This error occurs for both local and AppEngine deployments.</p>
  
  <p>What value should I be providing for the datanucleus.ConnectionURL property is not AppEngine? NB I couldn't find any doco which explained what this value actually means in an AppEngine environment. What is it meant to link up to?</p>
  
  <p>Am I meant to define a StoreManager somewhere?</p>
  
  <p>Am I missing some library? If so what?</p>
  
  <p>My persistence.xml is:</p>
  
  <pre><code>&lt;persistence-unit name="main"&gt;
      &lt;provider&gt;org.datanucleus.api.jpa.PersistenceProviderImpl&lt;/provider&gt;
  
      &lt;mapping-file&gt;/META-INF/user.xml&lt;/mapping-file&gt;
  
      &lt;properties&gt;
          &lt;property name="datanucleus.NontransactionalRead" value="true"/&gt;
          &lt;property name="datanucleus.NontransactionalWrite" value="true"/&gt;
          &lt;property name="datanucleus.ConnectionURL" value="appengine"/&gt;
  
          &lt;!--property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" /--&gt;
          &lt;!--property name="javax.persistence.query.timeout" value="5000" /--&gt;
          &lt;!--property name="datanucleus.datastoreWriteTimeout" value="10000" /--&gt;
          &lt;property name="datanucleus.singletonEMFForName" value="true"/&gt;
      &lt;/properties&gt;
  &lt;/persistence-unit&gt;
  </code></pre>
  
  <p>The dependencies in my POM are:
      
          
              com.google.appengine
              appengine-api-1.0-sdk
              ${appengine.target.version}
          </p>
  
  <pre><code>    ..
  
      &lt;!-- Persistence APIs --&gt;
      &lt;dependency&gt; &lt;!-- why do I need this if I am using JPA? --&gt;
          &lt;groupId&gt;javax.jdo&lt;/groupId&gt;
          &lt;artifactId&gt;jdo-api&lt;/artifactId&gt;
          &lt;version&gt;3.0.1&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.eclipse.persistence&lt;/groupId&gt;
          &lt;artifactId&gt;javax.persistence&lt;/artifactId&gt;
          &lt;version&gt;2.1.0&lt;/version&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
          &lt;artifactId&gt;datanucleus-core&lt;/artifactId&gt;
          &lt;version&gt;[3.2.0, 3.2.99)&lt;/version&gt;
          &lt;scope&gt;runtime&lt;/scope&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
          &lt;artifactId&gt;datanucleus-api-jpa&lt;/artifactId&gt;
          &lt;version&gt;[3.3.0-release, 3.3.99)&lt;/version&gt;
          &lt;scope&gt;runtime&lt;/scope&gt;
      &lt;/dependency&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
          &lt;artifactId&gt;datanucleus-rdbms&lt;/artifactId&gt;
          &lt;version&gt;[3.2.0, 3.2.99)&lt;/version&gt;
          &lt;scope&gt;runtime&lt;/scope&gt;
      &lt;/dependency&gt;
  &lt;/dependencies&gt;
  </code></pre>
  
  <p>And the datanucleus-plugin is:</p>
  
  <pre><code>    &lt;plugin&gt;
          &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
          &lt;artifactId&gt;datanucleus-maven-plugin&lt;/artifactId&gt;
          &lt;version&gt;3.3.0-release&lt;/version&gt;
          &lt;configuration&gt;
              &lt;api&gt;JPA&lt;/api&gt;
              &lt;persistenceUnitName&gt;main&lt;/persistenceUnitName&gt;
              &lt;verbose&gt;true&lt;/verbose&gt;
          &lt;/configuration&gt;
          &lt;executions&gt;
              &lt;execution&gt;
                  &lt;phase&gt;process-classes&lt;/phase&gt;
                  &lt;goals&gt;
                      &lt;goal&gt;enhance&lt;/goal&gt;
                  &lt;/goals&gt;
              &lt;/execution&gt;
          &lt;/executions&gt;
          &lt;dependencies&gt;
              &lt;dependency&gt;
                  &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
                  &lt;artifactId&gt;datanucleus-core&lt;/artifactId&gt;
                  &lt;version&gt;[3.2.0, 3.2.99)&lt;/version&gt;
              &lt;/dependency&gt;
              &lt;dependency&gt;
                  &lt;groupId&gt;org.datanucleus&lt;/groupId&gt;
                  &lt;artifactId&gt;datanucleus-api-jpa&lt;/artifactId&gt;
                  &lt;version&gt;[3.3.0-release, 3.3.99)&lt;/version&gt;
              &lt;/dependency&gt;
          &lt;/dependencies&gt;
      &lt;/plugin&gt;
  </code></pre>