Last Updated : 2010/3/18 (2009/11/29 より執筆開始)
asato shimotaki <asatohan at gmail.com>
内容に関するコメント(感想、提案、書き間違いの指摘)は歓迎します。
概要
実験環境
例
Datastore - put - 1
public class ExampleServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Entity e = new Entity("MyEntity", "mykey"); Key key = ds.put(e); System.out.println( key ); System.out.println( key.getKind() ); System.out.println( key.getName() ); System.out.println( key.getId() ); System.out.println( KeyFactory.keyToString(key) ); } }before:
after:
出力結果:
MyEntity("mykey") MyEntity mykey 0 aghhc2F0b2hhbnITCxIITXlFbnRpdHkiBW15a2V5DA
Datastore - put - 2
public class ExampleServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Entity e = new Entity("MyEntity"); // kindだけ指定。 Key key = ds.put(e); System.out.println( key ); System.out.println( key.getKind() ); System.out.println( key.getName() ); System.out.println( key.getId() ); System.out.println( KeyFactory.keyToString(key) ); } }before:
after:
出力結果:
MyEntity(54) MyEntity null 54 aghhc2F0b2hhbnIOCxIITXlFbnRpdHkYNgw
Datastore - put - 3
public class ExampleServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Entity e = new Entity("MyEntity"); e.setProperty("myproperty1", "aaa"); e.setProperty("myproperty2", 111); ds.put(e); } }before:
after:
Datastore - put - 4
after:
Datastore - put - 5
after:
Datastore - put - 6
after: Datastore - get - 1
出力結果:
Datastore - delete - 1
after: JDO 準備 JDO - 基本 - 1
after: JDO - 基本 - 2
after: JDO - 基本 - 3
after: JDO - Relationships - 1
after: JDO - Cursor - 1 JDO - Cursor - 2 JDO - Cursor - 3 URL Fetch - fetchAsync 参考文献とリソース 更新履歴 todo
同じkindのエンティティが異なるプロパティを持つ場合。
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity e1 = new Entity("MyEntity");
e1.setProperty("myproperty1", "aaa");
e1.setProperty("myproperty2", 111);
Entity e2 = new Entity("MyEntity"); // e1と同じkind
e2.setProperty("myproperty1", 999); // e1と同じプロパティ。型が異なってもよい。
e2.setProperty("myproperty3", "xxx"); // e1が持っていないプロパティ
ds.put(e1);
ds.put(e2);
}
}
before:
同じキーでエンティティをputした場合。
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity e = new Entity("MyEntity", "mykey");
e.setProperty("myproperty1", "bbb");
ds.put(e);
}
}
before:
エンティティ間のParent/Child関係の例。同じkindに属しても属していなくてもよい。
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity parent = new Entity("MyEntity", "myparentkey");
Entity child = new Entity("MyEntity", "mychildkey", parent.getKey());
ds.put(child);
ds.put(parent);
}
}
before:
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Key key = KeyFactory.createKey("MyEntity", "mykey");
try {
Entity e = ds.get(key);
System.out.println(e);
} catch(EntityNotFoundException e) {
System.out.println(e);
}
}
}
<Entity [MyEntity("mykey")]:
>
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Key key = KeyFactory.createKey("MyEntity", "mykey");
ds.delete(key);
}
}
before:
public final class PMF {
private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
主キーが Key 型の場合。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String name;
public MyEntity(String name) {
this.name = name;
}
}
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
MyEntity e = new MyEntity("aaa");
try {
pm.makePersistent(e);
} finally {
pm.close();
}
}
}
before:
主キーが Long 型の場合。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String name;
public MyEntity(String name) {
this.name = name;
}
}
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
MyEntity e = new MyEntity("bbb");
try {
pm.makePersistent(e);
} finally {
pm.close();
}
}
}
before:
主キーが Unencoded な String 型の場合。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
private String id;
@Persistent
private String name;
public MyEntity(String id, String name) {
this.id = id;
this.name = name;
}
}
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
MyEntity e = new MyEntity("abc123", "ccc");
try {
pm.makePersistent(e);
} finally {
pm.close();
}
}
}
before:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Parent {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private Child child;
public void setChild(Child child) {
this.child = child;
}
}
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Child {
@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Key key;
}
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
Parent p = new Parent();
p.setChild( new Child() );
try {
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(p);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
} finally {
pm.close();
}
}
}
before:
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
@Persistent
private String id;
public MyEntity(String id) {
this.id = id;
}
public String getID() {
return id;
}
}
import com.google.appengine.api.datastore.Cursor;
import org.datanucleus.store.appengine.query.JDOCursorHelper;
import javax.jdo.Query;
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(MyEntity.class);
query.setRange(0, 2);
List
出力結果:
0
1
E9oBMGoraghhc2F0b2hhbnIfCxIMCgAaCE15RW50aXR5DAsSCE15RW50aXR5IgExDIIBAOABABQ
2
3
4
5
6
7
8
9
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
@Persistent
private String id;
public MyEntity(String id) {
this.id = id;
}
public String getID() {
return id;
}
}
import com.google.appengine.api.datastore.Cursor;
import org.datanucleus.store.appengine.query.JDOCursorHelper;
import javax.jdo.Query;
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(MyEntity.class);
query.setRange(0, 2);
List
出力結果:
0
1
E9oBMGoraghhc2F0b2hhbnIfCxIMCgAaCE15RW50aXR5DAsSCE15RW50aXR5IgExDIIBAOABABQ
2
3
4
5
6
7
8
9
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class MyEntity {
@PrimaryKey
@Persistent
private String id;
public MyEntity(String id) {
this.id = id;
}
public String getID() {
return id;
}
}
import com.google.appengine.api.datastore.Cursor;
import org.datanucleus.store.appengine.query.JDOCursorHelper;
import javax.jdo.Query;
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery(MyEntity.class);
query.setRange(0, 2);
List
出力結果:
0
1
E9oBMGoraghhc2F0b2hhbnIfCxIMCgAaCE15RW50aXR5DAsSCE15RW50aXR5IgExDIIBAOABABQ
3
4
5
6
7
8
9
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
URL url = new URL("http://www.google.co.jp/");
URLFetchService service = URLFetchServiceFactory.getURLFetchService();
Future
出力結果:
fetch
resp
content length: 6930
Date: Sat, 13 Feb 2010 00:26:02 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=Shift_JIS
Server: gws
X-XSS-Protection: 0
Transfer-Encoding: chunked