java - Use Google Data Store and Google App Engine in same application -
i have application storing data in google cloud sql . think tables can moved google datastore . question how can use both data store , cloud sql using same application . tried checking both option datastore , cloud sql persisting in cloud sql .
this persistence.xml file .
<?xml version="1.0" encoding="utf-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="transactions-optional1"> <provider>org.datanucleus.api.jpa.persistenceproviderimpl</provider> <class>com.sample.poc.component</class> <properties> <property name="datanucleus.nontransactionalread" value="true"/> <property name="datanucleus.nontransactionalwrite" value="true"/> <property name="datanucleus.connectionurl" value="appengine"/> <property name="datanucleus.singletonemfforname" value="true"/> </properties> </persistence-unit> <persistence-unit name="transactions-optional2" transaction-type="resource_local"> <provider> org.datanucleus.jpa.persistenceproviderimpl</provider> <class>com.sample.poc.user</class> <class>com.sample.poc.role</class> <properties> <property name="javax.persistence.jdbc.driver" value="com.google.appengine.api.rdbms.appenginedriver" /> <property name="javax.persistence.jdbc.url" value="jdbc:google:rdbms://span-test-app:testinstance/pocdb" /> <property name="javax.persistence.jdbc.user" value="" /> <property name="javax.persistence.jdbc.password" value="" /> </properties> </persistence-unit> </persistence>
here 2 emf beans:
for datastore:
package com.sample.poc; import javax.persistence.entitymanagerfactory; import javax.persistence.persistence; public final class emfds { private static final entitymanagerfactory emfinstance = persistence .createentitymanagerfactory("transactions-optional1"); private emfds() { } public static entitymanagerfactory get() { return emfinstance; } }
here emf bean cloud sql:
package com.sample.poc; import javax.persistence.entitymanagerfactory; import javax.persistence.persistence; public final class emfrdbms { private static final entitymanagerfactory emfinstance = persistence .createentitymanagerfactory("transactions-optional"); private emfrdbms() { } public static entitymanagerfactory get() { return emfinstance; } }
here's servlet inserting component in datastore:
package com.sample.poc; import java.io.ioexception; import javax.persistence.entitymanager; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class componentinsert extends httpservlet { private static final long serialversionuid = 1l; protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { string compid = request.getparameter("compid"); string compname= request.getparameter("compname"); response.setcontenttype("text/html"); entitymanager e = emfds.get().createentitymanager(); try { e.gettransaction().begin(); component ob = new component(); ob.setcompid(integer.parseint(compid)); ob.setcompname(compname); e.persist(ob); e.gettransaction().commit(); } catch (exception ex) { e.gettransaction().rollback(); ex.printstacktrace(); } } }
i want user,role bean persisted in cloud sql , component in datastore.
when try insert component in datastore throws exception:
caused by: javax.persistence.persistenceexception: no persistence providers available "transactions-optional1" after trying following discovered implementations: org.datanucleus.api.jpa.persistenceproviderimpl @ javax.persistence.persistence.createentitymanagerfactory(persistence.java:180) @ javax.persistence.persistence.createentitymanagerfactory(persistence.java:70) @ com.sample.poc.emfds.<clinit>(emfds.java:9) ... 40 more 12 aug, 2013 9:48:24 com.google.apphosting.utils.jetty.jettylogger warn warning: nested in java.lang.exceptionininitializererror: javax.persistence.persistenceexception: no persistence providers available "transactions-optional1" after trying following discovered implementations: org.datanucleus.api.jpa.persistenceproviderimpl @ javax.persistence.persistence.createentitymanagerfactory(persistence.java:180) @ javax.persistence.persistence.createentitymanagerfactory(persistence.java:70)
am missing thing . please suggest .
you have no "provider" specified 1 persistence-unit - jpa provider going use cloud-sql? specify it.
you have invalid "provider" other persistence-unit. gae jpa v2 "org.datanucleus.api.jpa.persistenceproviderimpl" message says, yet seem want use (very old, unsupported) gae jpa 1 variant. make sure have right 1 in classpath (and not other one)
which "jpa api" jar in classpath? (this not jpa implementation). if using gae jpa v2 need jpa api v2 (geronimo-jpa_2.0_spec) , not jpa api v1 (geronimo-jpa_3.0_spec). if 1 of jpa providers being used jpa2 other has too.
Comments
Post a Comment