

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Gremlin スクリプトベースのセッションのサポート
<a name="access-graph-gremlin-sessions"></a>

Amazon Neptune で暗示的なトランザクションを伴う Gremlin セッションを使用できます。Gremlin セッションについては、Apache TinkerPop のドキュメントの[セッションの検討](http://tinkerpop.apache.org/docs/current/reference/#sessions)を参照してください。以下のセクションでは、Java で Gremlin セッションを使用する方法について説明します。

**重要**  
現在、Neptune がスクリプトベースのセッションを開いたままにできる最長時間は 10 分です。それ以前にセッションを閉じないと、セッションはタイムアウトし、その中のすべてがロールバックされます。

**Topics**
+ [

## Gremlin コンソール上の Gremlin セッション
](#access-graph-gremlin-sessions-console)
+ [

## Gremlin 言語バリアントの Gremlin セッション
](#access-graph-gremlin-sessions-glv)

## Gremlin コンソール上の Gremlin セッション
<a name="access-graph-gremlin-sessions-console"></a>

`session` パラメータを指定せずに Gremlin コンソールでリモート接続を作成すると、リモート接続は*セッションレス*モードで作成されます。このモードでは、サーバーに送信される各リクエストはそれ自体で完全なトランザクションとして扱われ、リクエスト間の状態は保存されません。リクエストが失敗すると、そのリクエストのみがロールバックされます。

`session` パラメータを使用*する*リモート接続を作成した場合、リモート接続を閉じるまで続くスクリプトベースのセッションを作成します。すべてのセッションは、コンソールが生成してユーザーに返す固有の UUID によって識別されます。

次に示すのは、セッションを作成する 1 つのコンソール呼び出しの例です。クエリが送信されると、別の呼び出しによってセッションが閉じられ、クエリがコミットされます。

**注記**  
サーバー側のリソースを解放するには、Gremlin クライアントを常に閉じておく必要があります。

```
gremlin> :remote connect tinkerpop.server conf/neptune-remote.yaml session
  . . .
  . . .
gremlin> :remote close
```

詳細と例については、TinkerPop ドキュメントの「[セッション](http://tinkerpop.apache.org/docs/current/reference/#console-sessions)」を参照してください。

セッション中に実行するすべてのクエリは、単一のトランザクションを形成します。そのトランザクションは、クエリがすべて成功してリモート接続を閉じるまでコミットされません。クエリが失敗した場合、または Neptune でサポートされるセッションの最大有効期間内に接続を閉じなかった場合、セッショントランザクションはコミットされず、その中のすべてのクエリがロールバックされます。

## Gremlin 言語バリアントの Gremlin セッション
<a name="access-graph-gremlin-sessions-glv"></a>

次の例のように、Gremlin 言語バリアント (GLV) では、単一のトランザクションで複数のクエリを発行するための `SessionedClient` オブジェクトを作成する必要があります。

```
try {                              // line 1
  Cluster cluster = Cluster.open();                    // line 2
  Client client = cluster.connect("sessionName");      // line 3
   ...
   ...
} finally {
  // Always close. If there are no errors, the transaction is committed; otherwise, it's rolled back.
  client.close();
}
```

前の例の行 3 は、問題のクラスターについて設定されている設定オプションに従って `SessionedClient` オブジェクトを作成します。接続メソッドに渡す *sessionName* 文字列は、セッションの一意の名前になります。競合を避けるために、名前に UUID を使用してください。

クライアントは初期化されると、セッショントランザクションを開始します。セッションの形成中に実行したすべてのクエリは、`client.close( )` を呼び出すときにのみコミットされます。繰り返しますが、単一のクエリが失敗した場合、または Neptune でサポートされるセッションの最大有効期間内に接続を閉じなかった場合、セッショントランザクションは失敗し、その中のすべてのクエリがロールバックされます。

**注記**  
サーバー側のリソースを解放するには、Gremlin クライアントを常に閉じておく必要があります。

```
GraphTraversalSource g = traversal().withRemote(conn);

Transaction tx = g.tx();

// Spawn a GraphTraversalSource from the Transaction.
// Traversals spawned from gtx are executed within a single transaction.
GraphTraversalSource gtx = tx.begin();
try {
  gtx.addV('person').iterate();
  gtx.addV('software').iterate();

  tx.commit();
} finally {
    if (tx.isOpen()) {
        tx.rollback();
    }
}
```