2015-04-06 31 views
5

Şu anda GAE'de bir java Google cloud uç noktası geliştiriyorum. Uç noktanın içinde, bazı verileri almak için Firebase sunucusuna bağlanmayı deneyecektir.Google App Engine'de Firebase init hatası

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:382) 
    at java.security.AccessController.checkPermission(AccessController.java:572) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) 
    at java.lang.Thread.init(Thread.java:391) 
    at java.lang.Thread.init(Thread.java:349) 
    at java.lang.Thread.<init>(Thread.java:675) 
    at java.util.concurrent.Executors$DefaultThreadFactory.newThread(Executors.java:572) 
    at com.firebase.client.utilities.DefaultRunLoop$FirebaseThreadFactory.newThread(DefaultRunLoop.java:25) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:600) 
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943) 
    at java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1635) 
    at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:307) 
    at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:526) 
    at java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:615) 
    at com.firebase.client.utilities.DefaultRunLoop.scheduleNow(DefaultRunLoop.java:57) 
    at com.firebase.client.core.Repo.scheduleNow(Repo.java:176) 
    at com.firebase.client.core.Repo.<init>(Repo.java:58) 
    at com.firebase.client.core.RepoManager.getLocalRepo(RepoManager.java:46) 
    at com.firebase.client.core.RepoManager.getRepo(RepoManager.java:19) 
    at com.firebase.client.Firebase.<init>(Firebase.java:194) 
    at com.firebase.client.Firebase.<init>(Firebase.java:199) 
    at com.firebase.client.Firebase.<init>(Firebase.java:177) 

Ben Firebase istemcisi 2.2.3 kullanıyorum: Ben son nokta içinde Firebase nesneyi

Firebase ref = new Firebase(<My Firebase URL>); 

oluştururken

Ancak GAE'nin aşağıdaki hatayı atar. GAE'nin bir uygulamanın yeni iş parçacıkları oluşturmasına izin vermemesi gibi görünüyor. Herhangi bir fikir?

cevap

3

@ Mario, App Engine uygulamasının docs'a göre yeni konu açamayacağı doğrudur. Bu, AppEngine uygulamasının bazı kısıtlamalara sahip olduğunuz ortam ortamında çalıştırılmasından kaynaklanmaktadır. Hala uygulamanızı geliştirmek istemediğinizden herhangi bir kısıtlama sonra ben bu tür kısıtlamaları olmayan Managed VM deneyin öneririz.

+1

Aslında bir yönetilen VM ayar tüm güçlük gerek kalmadan temel veya manuel ölçeklendirme kullanarak konuları çalıştırabilir, tek kısıtlama otomatik ölçeklendirme üzerindedir: https://cloud.google.com/appengine/docs/ java/modules/# Java_Background_threads –

4

Google App Engine'in Java çalışma zamanında, yeni iş parçacıkları oluşturma konusunda bazı kısıtlamalar vardır. Ayrıntılar için the Threads section'a bakın.

-3

Sanırım this bağlantı size yardımcı olacaktır, bu, hizmet hesabını kullanarak sunucu uygulamasından firebase gerçek zamanlı veritabanını nasıl kullanabileceğimizi açıklar.

Firebase veritabanına bağlanmak için aşağıdaki kod parçacığını kullanabilirsiniz.

// Initialize the app with a service account, granting admin privileges 
FirebaseOptions options = new FirebaseOptions.Builder() 
    .setDatabaseUrl("https://databaseName.firebaseio.com") 
    .setServiceAccount(new FileInputStream("path/to/serviceAccountCredentials.json")) 
    .build(); 
FirebaseApp.initializeApp(options); 

// As an admin, the app has access to read and write all data, regardless of Security Rules 
DatabaseReference ref = FirebaseDatabase 
    .getInstance() 
    .getReference("restricted_access/secret_document"); 
ref.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Object document = dataSnapshot.getValue(); 
     System.out.println(document); 
    } 
}); 
+1

Belirtilen soruya hitap edecek bir şey yok. Yukarıdaki kod, orijinal gönderi ile tam olarak aynı şekilde başarısız olacaktır. –

+0

Merhaba @AaronSarazan, Herhangi bir hatayla karşılaşıyorsanız lütfen yayınlayın ve çalışıyordu, lütfen buradan gönderin. –