Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java Reflection fail on thread #735

Closed
nabil-mansouri opened this issue Mar 24, 2017 · 6 comments
Closed

Java Reflection fail on thread #735

nabil-mansouri opened this issue Mar 24, 2017 · 6 comments
Assignees
Labels

Comments

@nabil-mansouri
Copy link

nabil-mansouri commented Mar 24, 2017

Hi Guys
WHEN USING ANDROID THREAD, SOME CLASSES ARE NOT FOUND BY CLASSLOADER (tns.Runtime.callJS failed).

platform: android
tns-core-modules 2.5.0 version
Runtime version: 2.5.0 version
My Plugin : 1.0.0 version (https://github.com/nabil-mansouri/nativescript-couchbaselite)

I am trying to create a couchbase plugin that make available all features. But when i am trying to create view , i need to emit keys. This is done in couchbase in a separate thread. When my emit bloc is called, it throws a "ClassnotfoundException" on tns runtime. But when i try to get java.lang.Class.forName("com.couchbase.lite.store.SQLiteViewStore$AbstractMapEmitBlock") on main thread , it works! It seems that runtime is not looking on the same classloader?

Here are my unit tests (npm run test-android):
https://github.com/nabil-mansouri/nativescript-couchbaselite/blob/master/tests/app/tests/couchbase.ts
"should live query" failed

On adb logcat i have this stacktrace:

03-24 07:19:19.067 2366 2441 V View : Re-indexing view: users_live
03-24 07:19:19.069 2366 2441 V View : users_live last indexed at #0
03-24 07:19:19.069 2366 2441 V View : Updating indexes of (users_live) from #0 to #4 ...
03-24 07:19:19.164 2366 2441 V View : #1: map '1' for view users_live...
03-24 07:19:19.166 2366 2440 W System.err: java.lang.ClassNotFoundException: com.couchbase.lite.store.SQLiteViewStore$AbstractMapEmitBlock
03-24 07:19:19.185 2366 2440 W System.err: at java.lang.Class.classForName(Native Method)
03-24 07:19:19.185 2366 2440 W System.err: at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
03-24 07:19:19.185 2366 2440 W System.err: at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
03-24 07:19:19.185 2366 2440 W System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
03-24 07:19:19.185 2366 2440 W System.err: at com.tns.Runtime.getTypeMetadata(Runtime.java:719)
03-24 07:19:19.185 2366 2440 W System.err: at com.tns.Runtime.callJSMethodNative(Native Method)
03-24 07:19:19.185 2366 2440 W System.err: at com.tns.Runtime.access$2400(Runtime.java:33)
03-24 07:19:19.185 2366 2440 W System.err: at com.tns.Runtime$3.run(Runtime.java:1214)
03-24 07:19:19.185 2366 2440 W System.err: at android.os.Handler.handleCallback(Handler.java:739)
03-24 07:19:19.185 2366 2440 W System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
03-24 07:19:19.185 2366 2440 W System.err: at android.os.Looper.loop(Looper.java:148)
03-24 07:19:19.185 2366 2440 W System.err: at android.os.HandlerThread.run(HandlerThread.java:61)
03-24 07:19:19.185 2366 2440 W System.err: Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

Edit: proper formatting to help readability

@petekanev
Copy link
Contributor

Hey @nabil-mansouri

What are the minimal steps to reproduce the exceptions that you are experiencing? Can you provide a repository with a demo project where the problem can be reproduced reliably every time?

And please use the provided Issue template when posting issue and/or pull requests.

@nabil-mansouri
Copy link
Author

Hi @Pip3r4o of course!
you can clone my repo : https://github.com/nabil-mansouri/nativescript-couchbaselite

I have a demo app in "tests/app":
https://github.com/nabil-mansouri/nativescript-couchbaselite/tree/master/tests/app

You can launch tests using (it runs on android emulator): npm run test-android

The test "should live query" in the following file will failed (you can see the exception on adb logcat only):
https://github.com/nabil-mansouri/nativescript-couchbaselite/blob/master/tests/app/tests/couchbase.ts

@petekanev
Copy link
Contributor

@nabil-mansouri I fetched your project and made a few changes, to be able to build it, but I am unable to test it, as it lacks karma.conf.js configuration.

I went over the code however, and could find all of your tests - it would be great if you isolated the chunk that crashes the application, and provide a simpler demo application, so we may find the problem faster.

@petekanev petekanev self-assigned this Mar 27, 2017
@nabil-mansouri
Copy link
Author

Hi @Pip3r4o thank you for your reply!

I made a small app as demo here:
https://github.com/nabil-mansouri/nativescript-couchbaselite-demo

I run live queries at stratup (appcomponent.ngOnInit).
You can see stacktrace on logcat.

I tried to play with classloader manually (setting classloader context) but still have exception. I have seen that TnsRuntime have a cachclass. Maybe i will try to set class in cache using reflection i will try to see... But it is a hack lol

@Plamen5kov Plamen5kov added the bug label Mar 29, 2017
@NickIliev
Copy link

@nabil-mansouri I've tried to reproduce the described scenario using your demo application but on several configurations, all that is happening is that the application freezes on the initial load (right after the splash screen before ngOnInit is fired in app.component.ts) On secondary load the app crashes n createDocument with status 409. At this moment we can not reproduce your case with your application as the app is never hitting Class not found using the boot class loader; no stack trace available

Are there additional steps needed to be taken in order to start the app? If so please describe the workflow.
The apop was tested on several devices and emulators (API19,21 and 23) and all are consistent with the freeze black screen on initial load.

@petekanev
Copy link
Contributor

@nabil-mansouri we haven't heard from you in a while, so I am going to close this issue.

Feel free to reopen it if this continues to be a problem for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants