2015-04-06 19 views
5

Tôi hiện đang phát triển điểm cuối đám mây Google Java trong GAE. Bên trong điểm cuối, nó sẽ cố gắng kết nối với máy chủ Firebase để lấy một số dữ liệu.Lỗi khởi động Firebase trong Google App Engine

Tuy nhiên, khi tôi tạo ra các đối tượng căn cứ hỏa lực trong thiết bị đầu cuối của tôi,

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

GAE ném các lỗi sau:

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) 

Tôi đang sử dụng căn cứ hỏa lực của khách hàng 2.2.3. Có vẻ như GAE không cho phép ứng dụng tạo chuỗi mới. Bất kỳ ý tưởng?

Trả lời

3

@ Mario là chính xác, ứng dụng App Engine có thể không sinh ra chủ đề mới theo docs. Điều này là do ứng dụng AppEngine chạy trong môi trường sandbox mà bạn có một số hạn chế.Nếu bạn vẫn muốn phát triển ứng dụng của mình mà không cần bất kỳ hạn chế nào sau đó tôi khuyên bạn nên thử Managed VM mà bạn không có các loại hạn chế này.

+1

Bạn thực sự có thể chạy đề sử dụng rộng cơ bản hoặc bằng tay mà không đi qua tất cả những rắc rối của thiết lập một máy ảo quản lý, hạn chế duy nhất là về tỉ lệ tự động: https://cloud.google.com/appengine/docs/ java/modules/# Java_Background_threads –

4

Trong thời gian chạy Java cho Máy ứng dụng của Google, có một số hạn chế về tạo chủ đề mới.

Vui lòng xem the Threads section để biết chi tiết.

-3

Tôi nghĩ rằng liên kết this sẽ giúp bạn, nó mô tả cách chúng tôi có thể sử dụng cơ sở dữ liệu thời gian thực firebase từ ứng dụng máy chủ bằng tài khoản dịch vụ.

Bạn có thể sử dụng đoạn mã sau để kết nối với cơ sở dữ liệu Firebase.

// 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

Điều này không có gì để giải quyết câu hỏi đã nêu. Đoạn mã trên sẽ không chính xác giống như bài gốc. –

+0

Xin chào @AaronSarazan, tôi đã thử nghiệm nó trước khi đăng và đang hoạt động, nếu bạn gặp phải bất kỳ lỗi nào, vui lòng đăng bài đó tại đây. –