0

App Engine スタンダード環境で Firebase を利用することはできますか? 標準環境のスレッド機能は非常に制限されており、Firebase SDK はバックグラウンド同期スレッドを実行するため、互換性がない可能性があることを認識しています。試してみたところ、次のエラーが発生しましたが、克服できないようです。

java.security.AccessControlException: アクセスが拒否されました ("java.lang.RuntimePermission" "modifyThreadGroup")

サーブレットのコードは次のとおりです。

public class GeneratorServlet extends HttpServlet {

    FirebaseDatabase database = null;

    @Override
    public void init(ServletConfig config) {
//        ClassLoader classloader = Thread.currentThread().getContextClassLoader();
//        InputStream serviceAccount = classloader.getResourceAsStream("serviceAccountKey.json");

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredential(FirebaseCredentials.applicationDefault())
//                .setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
                .setDatabaseUrl("https://app-name.firebaseio.com/")
                .build();

        FirebaseApp defaultApp = FirebaseApp.initializeApp(options);

        this.database = FirebaseDatabase.getInstance(defaultApp);

    }

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter out = resp.getWriter();
        out.println(this.database);
        this.loadData();
    }

    private void loadData() {
//        The following line throws the error
        DatabaseReference ref = this.database.getReference("/publiclyReadable");
    }
}

私のやり方が間違っているのでしょうか、それとも標準環境の制限が原因でしょうか? フレキシブル バージョンは本番環境での使用にはまだ推奨されていないため、フレキシブルではなく標準環境を選択しました。

ありがとう、ジャン

編集: appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>doctor-appointment-system</application>
    <version>0</version>
    <threadsafe>true</threadsafe>
    <instance-class>B1</instance-class>
    <manual-scaling>
        <instances>1</instances>
    </manual-scaling>
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
</appengine-web-app>

編集:

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <servlet>
        <servlet-name>generator</servlet-name>
        <servlet-class>com.example.bookingtimes.GeneratorServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>generatorinfo</servlet-name>
        <servlet-class>com.example.bookingtimes.GeneratorInfoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>generator</servlet-name>
        <url-pattern>/times/generate</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>generatorinfo</servlet-name>
        <url-pattern>/times/change</url-pattern>
    </servlet-mapping>
</web-app>

build.gradle:

buildscript {    // Configuration for building
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:+'
    }
}

repositories {   // repositories for Jar's you access in your code
    maven {
        url 'https://maven-central.storage.googleapis.com'
    }
    jcenter()
    mavenCentral()
}

apply plugin: 'java'                              // standard Java tasks
apply plugin: 'war'                               // standard Web Archive plugin
apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks

dependencies {
    providedCompile group: 'javax.servlet', name: 'servlet-api', version: '2.5'
    compile 'com.google.appengine:appengine:+'
    compile 'com.google.firebase:firebase-admin:4.1.0'
}

appengine {  // App Engine tasks configuration
    run {      // local (dev_appserver) configuration (standard environments only)
        port = 8080                 // default
    }

    deploy {
        stopPreviousVersion = true  // default - stop the current version
        promote = true              // default - & make this the current version
    }
}

group = 'com.example.appengine'
version = '0.1'

sourceCompatibility = 1.7
targetCompatibility = 1.7
4

2 に答える 2