play-jongo icon indicating copy to clipboard operation
play-jongo copied to clipboard

Path to MyMongoClientFactory for the ClassLoader

Open yingding opened this issue 8 years ago • 3 comments

I have created a MyMongoCientFactory.java

under app->db->MyMongoClientFactory.java (db is a subfolder under app folder)

As suggested i have declared in my application.conf playjongo.mongoClientFactory="db.MyMongoClientFactory"

But i got an error [error] application - ClassNotFoundException java.lang.ClassNotFoundException: db.AppMongoClientFactory

It seems like the ClassLoader can't find MyMongoClientFactory.class. How should i declare the path to my MyMongoClientFactory in my case. Thanks a lot for you help.

yingding avatar Jun 05 '16 18:06 yingding

Something in your description is wrong. You're speaking of "MyMongoCientFactory", which does not match "ClassNotFoundException: db.AppMongoClientFactory".

magro avatar Jun 05 '16 21:06 magro

Thank for the quick reply, i thought at first it may be the case, but unfortunately it is just a typo of error output in my issue. I have renamed the class to get issue description consistent.

I have created a AppMongoClientFactory.java under app->db->AppMongoClientFactory.java (db is a subfolder under app folder)

As suggested i have declared in my application.conf playjongo.mongoClientFactory="db.AppMongoClientFactory"

But i still got the error

[info] play.api.Play - Application started (Dev)
[error] application - InstantiationException
java.lang.InstantiationException: db.AppMongoClientFactory
        at java.lang.Class.newInstance(Class.java:427)
        at uk.co.panaxiom.playjongo.PlayJongo.getMongoClientFactory(PlayJongo.java:78)
        at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:44)
        at uk.co.panaxiom.playjongo.PlayJongo.getInstance(PlayJongo.java:103)
        at uk.co.panaxiom.playjongo.PlayJongo.forceNewInstance(PlayJongo.java:115)
        at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:31)
        at uk.co.panaxiom.playjongo.PlayJongo$$FastClassByGuice$$eca2f8fb.newInstance(<generated>)
        at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
        at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
        at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
Caused by: java.lang.NoSuchMethodException: db.AppMongoClientFactory.<init>()
        at java.lang.Class.getConstructor0(Class.java:3082)
        at java.lang.Class.newInstance(Class.java:412)
        at uk.co.panaxiom.playjongo.PlayJongo.getMongoClientFactory(PlayJongo.java:78)
        at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:44)
        at uk.co.panaxiom.playjongo.PlayJongo.getInstance(PlayJongo.java:103)
        at uk.co.panaxiom.playjongo.PlayJongo.forceNewInstance(PlayJongo.java:115)
        at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:31)
        at uk.co.panaxiom.playjongo.PlayJongo$$FastClassByGuice$$eca2f8fb.newInstance(<generated>)
        at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
        at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)

After some research i have found this post about Dev-Mode ClassLoader does not contain app classes https://github.com/playframework/playframework/issues/822

I am currently using play 2.5.3. The issue about ClassLoader not cotain app classes is closed for play 2.1.0, i am not sure if it is still relevant for play 2.5.x.

yingding avatar Jun 06 '16 13:06 yingding

I am using play 2.6.6 and I am having the same issue. In my case, my custom cassandra connection factory class that implement CassandraConnectionFactory interface/trait from spark-cassandra-connector library is throwing ClassNotFoundException.

vdogan avatar Oct 24 '17 13:10 vdogan