앱 엔진 표준 환경에서 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
빠른 응답을 보내 주셔서 감사합니다. 그러나 모든 조언 (수동 배율로 전환하고 4.1에서 4.1.1로 라이브러리를 업데이트 한 후) 나는 여전히 오류가 발생합니다. 이 오류는 로컬 환경에서만 발생하지만 서버에서 표시되지 않기 때문에 발생합니다. 좋은 하루 되십시오. –
@ JanBeneš : 우리 기술자 한 명이 문제를 재현하려고 노력했지만, 불행히도 지금까지 실패했습니다. web.xml을 공유하여 GAE 처리기가 어떻게 구성되어 있는지 확인할 수 있습니까? –
파일을 원래 게시물에 추가했습니다. 감사합니다 –