2016-04-02 11 views
1

Ich versuche, von meinem lokalen Computer in Java eine Verbindung mit dem Datenspeicher von Google App Engine herzustellen. Ich werde den Dienst nicht mit einer GAE-Anwendung verwenden, sondern mit AWS.Verbinden mit dem Google App Engine-Datenspeicher

Was habe ich versucht,

Ich versuchte mit DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();, aber ich denke, es ist für ist, wenn die Anwendung auf GAE gehostet wird.

Im Moment habe ich Google Storage mit einer json-Anmeldeinformationsdatei, die mit der Systemvariable GOOGLE_APPLICATION_CREDENTIALS abgerufen wird. Die Verbindung funktioniert gut, daher vermute ich, dass ich etwas Ähnliches wie Storage machen muss. ich für Storage etwas wie dies tat:

HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport(); 
     JsonFactory jsonFactory = new JacksonFactory(); 
     GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory); 

     if (credential.createScopedRequired()) { 
      Collection<String> bigqueryScopes = StorageScopes.all(); 
      credential = credential.createScoped(bigqueryScopes); 
     } 

     Storage client = new Storage.Builder(transport, jsonFactory, credential) 
       .setApplicationName("APPLICATION_NAME") 
       .build(); 

Die Frage

Also meine Frage ist: Wie kann ich auf Google App Engine-Datenspeicher von außerhalb von Google App Engine verbinden?

Vielen Dank für Ihre Hilfe!

Antwort

3

Ich empfehle, dass Sie auf die gcloud-java client library verschieben. Es baut auf dem aktuell verwendeten Code auf und erleichtert die Arbeit mit dem Datenspeicher und dem Speicher, obwohl die Dokumentation praktisch nicht vorhanden ist (Stand April 2016).

Dies ist, wie Sie mit dem Datenspeicher verbinden diese Bibliothek nutzen:

AuthCredentials credentials = AuthCredentials.createFor(account, key); 
DatastoreOptions options = DatastoreOptions.builder() 
     .authCredentials(credentials) 
     .projectId(projectId) 
     .namespace(NAMESPACE) 
     .build(); 
Datastore datastore = options.service(); 

Das Gleiche gilt für die Lagerung, aber mit StorageOptions.

TIPP: Öffnen Sie das gcloud-Java-Projekt in GitHub - der Link befindet sich auf der Seite, auf die ich zuvor verwiesen habe. Es gibt einen Ordner mit Beispielen für die Verwendung von Datenspeicher und Speicher.

+0

Ihnen für die schnelle Antwort Dank! Das Projekt schafft es "zu arbeiten", aber jetzt bekomme ich einen anderen Fehler, der mir sagt, dass die API für mein Projekt nicht aktiviert ist: Die Cloud Datastore API ist nicht für das Projekt PROJECT_NAME aktiviert. Was ist seltsam, dass ich es in der aktiviert habe api console: [link] (https://console.cloud.google.com/apis/library?) Wissen Sie, ob ich etwas anderes machen muss? Vielen Dank! – madube94

+0

Eine weitere Option auf dev ist, die Umgebungsvariable 'GOOGLE_APPLICATION_CREDENTIALS' zu verwenden, die auf ein Dienstkonto json verweist, das auf der Anmeldeinformationsregisterkarte in der Cloud-Konsole generiert wird, z. B.' export GOOGLE_APPLICATION_CREDENTIALS =/pfad/to/key.json' –

+0

Ich habe ein Problem geöffnet: https://github.com/GoogleCloudPlatform/gcloud-java/issues/843 –

0

Mit der großartigen Hilfe von Andrei Volgin konnte ich mich mit einer Anwendung außerhalb von Google App Engine mit Datastore verbinden. Hier ist, was ich im April 2016 getan habe:

  • Aktivieren Sie Datastore API v1beta3. Der Standard in App Engine für mich war v1beta2. https://console.cloud.google.com/apis/api/datastore.googleapis.com/overview?project=PROJECT_NAME
  • Rufen Sie eine Anmeldeinformationsdatei für den Dienst ab, für den Datastore aktiviert ist.
  • Sie können die Anmeldeinformationen in einer Systemvariablen Datei-Set mit GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json
  • schrieb ich diesen Code als Test und die Verbindung arbeitete

    DatastoreOptions options = DatastoreOptions.builder() 
         .projectId("PROJECT_NAME") 
         .authCredentials(AuthCredentials.createForJson(
           new FileInputStream("/PATH/TO/CREDENTIALS.json"))).build(); 
    Datastore datastore = options.service(); 
    Query<Entity> query = 
         Query.gqlQueryBuilder(Query.ResultType.ENTITY, "SELECT * FROM user").build(); 
    QueryResults<Entity> results = datastore.run(query); 
    while (results.hasNext()) { 
        Entity result = results.next(); 
        System.out.println(result.getString("id")); 
    } 
    
Verwandte Themen