2017-02-01 16 views
0

앱 엔진 표준 환경에서 Firebase를 사용할 수 있습니까? 표준 환경 스레딩 기능은 매우 제한적이며 Firebase SDK는 백그라운드 동기화 스레드를 실행하므로 호환되지 않을 수 있습니다. 나는 그것을 시도했다 봤는데, 내가 극복 할 수없는 것 다음과 같은 오류가 발생했습니다앱 엔진 표준 Firebase Admin 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 

답변

-3

App Engine Flexible (간단 함)로 전환했는데 모든 것이 지금 작동 중입니다.

1

Firebase 데이터베이스 클라이언트는 수동 배율 모드에있는 한 App Engine Standard Environment에서 사용할 수 있습니다. documentation on cloud.google.com을 참조하십시오.

App Engine (release notes)에서 SDK를 사용할 때 문제가 최근에 수정되었으므로 최신 버전을 사용해야합니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 그러나 모든 조언 (수동 배율로 전환하고 4.1에서 4.1.1로 라이브러리를 업데이트 한 후) 나는 여전히 오류가 발생합니다. 이 오류는 로컬 환경에서만 발생하지만 서버에서 표시되지 않기 때문에 발생합니다. 좋은 하루 되십시오. –

+0

@ JanBeneš : 우리 기술자 한 명이 문제를 재현하려고 노력했지만, 불행히도 지금까지 실패했습니다. web.xml을 공유하여 GAE 처리기가 어떻게 구성되어 있는지 확인할 수 있습니까? –

+1

파일을 원래 게시물에 추가했습니다. 감사합니다 –

관련 문제