Ebean ClassPathScanner scanning entire driver

148 views
Skip to first unread message

Tian Jie

unread,
Sep 8, 2017, 2:31:51 AM9/8/17
to Ebean ORM
Hi, 
I'm trying to set up ebean in a legacy codebase, after I changed the pom, I wrote a simple class to run ebean, it seems ebean is scanning entire E driver, and got a NPE .
Any ideas? 

Thanks.


13:39:51.050 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner - determining location urls for classpath: using ClassLoader java.net.URLClassLoader@b0649f3 ...
13:39:51.051 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner - scanning URL: file:/E:/projects/#EBEAN_PROJECT#/target/classes/
13:39:51.056 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning starting at classpath root in filesystem: E:\projects\#EBEAN_PROJECT#\target\classes\
...
13:39:53.354 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#EBEAN_PROJECT#\xxx\xxx ()
13:39:53.355 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#EBEAN_PROJECT#\xxx\yyy ()
13:39:53.361 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner - scanning URL: file:/
13:39:53.363 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning starting at classpath root in filesystem: E:\
13:39:53.363 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\ ()
13:39:53.364 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\$RECYCLE.BIN ()
13:39:53.364 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\$RECYCLE.BIN\S-1-5-21-1812419434-266073208-705020799-500 ()
.....
.....
.....
.....
13:40:37.358 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#OTHER_PROJECTS#\\src\test ()
13:40:37.358 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#OTHER_PROJECTS#\\src\test\java ()
13:40:37.359 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#OTHER_PROJECTS#\\src\test\java\org ()
13:40:37.359 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\projects\#OTHER_PROJECTS#\\src\test\java\org\foo ()
13:40:38.015 [com.example.EbeanDemo.main()] DEBUG org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner - Scanning for resources in path: E:\System Volume Information ()
[WARNING] 
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Error in classpath search (looking for entities etc)
at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.getBootupClasses(BootupClassPathSearch.java:68)
at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.search(BootupClassPathSearch.java:31)
at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses1(DefaultContainer.java:230)
at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses(DefaultContainer.java:203)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:100)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:44)
at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:108)
at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:67)
at com.example.EbeanDemo.main(EbeanDemo.java:57)
... 6 more
Caused by: java.lang.NullPointerException
at org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner.findResourceNamesFromFileSystem(FileSystemClassPathLocationScanner.java:67)
at org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner.findResourceNamesFromFileSystem(FileSystemClassPathLocationScanner.java:72)
at org.avaje.classpath.scanner.internal.scanner.classpath.FileSystemClassPathLocationScanner.findResourceNames(FileSystemClassPathLocationScanner.java:47)
at org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner.findResourceNames(ClassPathScanner.java:166)
at org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner.scanForClasses(ClassPathScanner.java:104)
at org.avaje.classpath.scanner.Scanner.scanForClasses(Scanner.java:86)
at org.avaje.classpath.scanner.Scanner.scanForClasses(Scanner.java:98)
at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.getBootupClasses(BootupClassPathSearch.java:59)
... 14 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 52.444 s
[INFO] Finished at: 2017-09-08T13:40:38+08:00
[INFO] Final Memory: 26M/555M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project core: An exception occured while executing the Java class. null: InvocationTargetException: Error in classpath search (looking for entities etc): NullPointerException -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
13:40:38.452 [Thread-1] DEBUG io.ebeaninternal.server.lib.ShutdownManager - Shutting down

Rob Bygrave

unread,
Sep 11, 2017, 5:52:37 AM9/11/17
to ebean@googlegroups
Ah interesting.  That looks like a bug there in FileSystemClassPathLocationScanner.java:67 ... so yes, I'll have a look to fix that.

Note that we can define a ebean.mf manifest file in src/main/resources to restrict/specify what packages to scan for enhancement. 



entity-packages: org.example.domain
transactional-packages: org.example
querybean-packages: org.example

If we are not using @Transactional or Query beans we can use the value none to mean do not scan/enhance for that. For example:


entity-packages: org.example.domain
transactional-packages: org.example
querybean-packages: none



Cheers, Rob.


--

---
You received this message because you are subscribed to the Google Groups "Ebean ORM" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ebean+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Rob Bygrave

unread,
Sep 11, 2017, 6:08:59 AM9/11/17
to ebean@googlegroups

Rob Bygrave

unread,
Sep 11, 2017, 7:27:58 AM9/11/17
to ebean@googlegroups

Tian Jie

unread,
Sep 11, 2017, 11:07:08 PM9/11/17
to Ebean ORM
Hi, thanks for the quick fix.
I still don't understand why in my project it's scanning the entire E driver (and it's very slow). 
I write a basicly the same test based on the example-minimal project, and I removed the ebean.mf, ebean only scaning the project's directory.
Is there anything I'm missing?

Best regards,
To unsubscribe from this group and stop receiving emails from it, send an email to ebean+un...@googlegroups.com.

Rob Bygrave

unread,
Sep 12, 2017, 4:29:03 AM9/12/17
to ebean@googlegroups
> Is there anything I'm missing?

Not that I am aware.  I note you are on windows but otherwise not sure.  You might be able to use the debugger to determine what is going on there?



To unsubscribe from this group and stop receiving emails from it, send an email to ebean+unsubscribe@googlegroups.com.

Tian Jie

unread,
Sep 12, 2017, 7:41:45 AM9/12/17
to Ebean ORM


On Tuesday, September 12, 2017 at 4:29:03 PM UTC+8, Rob Bygrave wrote:
> Is there anything I'm missing?

Not that I am aware.  I note you are on windows but otherwise not sure.  You might be able to use the debugger to determine what is going on there?


org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner#getLocationUrlsForPath line:203
Enumeration<URL> urls = classLoader.getResources(location.getPath());

Here, one project urls.size is 1("file:/E:/project_path/) another is 2 ("file:/E:/project_path/ and "file:/" )
Haven't find out why yet.

Tian Jie

unread,
Sep 12, 2017, 11:22:08 PM9/12/17
to Ebean ORM
Some jar's ill formatted MANIFEST.MF caused this problem.
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.2 
Created-By: 1.3.1_07-b02 (Sun Microsystems Inc.)
Implementation-Title: Batik All Jar
Implementation-Version: 1.5
Implementation-Vendor: Apache Software Foundation (http://xml.apache.o
 rg/batik/)
Main-Class: org.apache.batik.apps.svgbrowser.Main
Class-Path: lib/batik-ext.jar \           lib/batik-dom.jar \         
   lib/batik-css.jar \           lib/batik-svg-dom.jar \           lib
 /batik-gvt.jar \           lib/batik-parser.jar \           lib/batik
 -script.jar \           lib/batik-bridge.jar \           lib/batik-sw
 ing.jar \           lib/batik-transcoder.jar \           lib/batik-gu
 i-util.jar \           lib/batik-awt-util.jar \           lib/batik-u
 til.jar \           lib/batik-root.jar \           lib/batik-svggen.j
 ar \           lib/batik-xml.jar \           batik-squiggle.jar \    
        batik-rasterizer.jar \           batik-pp.jar \           lib/
 xerces_2_3_0.jar \           lib/xml-apis.jar \           lib/pdf-tra
 nscoder.jar \           lib/js.jar

seems those "\" become "file:/" when loading this jar in URLClassPath.getLoader

Thibault Meyer

unread,
Jan 24, 2018, 3:20:39 AM1/24/18
to Ebean ORM
Hello Rob,

I still have this issue when I try to use a second server.


Ebean.getServer("toto").find(AccountModel.class).where().findOne();

val EbeanVersion = "11.8.1"
val
EbeanAgentVersion = "11.5.1"
val
EbeanDBMigrationVersion = "11.2.1"


"C:\Program Files\Java\jdk1.8.0_162\bin\java" -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -javaagent:C:\Users\thiba\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.4301.25\lib\idea_rt.jar=52907:C:\Users\thiba\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\173.4301.25\bin -Dfile.encoding=windows-1252 -classpath "C:\Program Files (x86)\sbt\bin\sbt-launch.jar" xsbt.boot.Boot run
[info] Loading settings from idea.sbt ...
[info] Loading global plugins from C:\Users\thiba\.sbt\1.0\plugins
[info] Loading settings from plugins.sbt ...
[info] Loading project definition from C:\Users\thiba\Documents\Programmation\stationski\station-api\project
[info] Loading settings from build.sbt,version.sbt ...
[info] Set current project to station-api (in build file:/C:/Users/thiba/Documents/Programmation/stationski/station-api/)


--- (Running the application, auto-reloading is enabled) ---


[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000


(Server started, use Enter to stop and go back to the console...)


[info] application - Creating Pool for datasource 'toto'
[info] c.z.h.HikariDataSource - HikariPool-1 - Starting...
[info] c.z.h.HikariDataSource - HikariPool-1 - Start completed.
[info] p.a.d.DefaultDBApi - Database [toto] connected at jdbc:postgresql://127.0.0.1/db?autoReconnect=true&ApplicationName=test2
[info] application - Creating Pool for datasource 'default'
[info] c.z.h.HikariDataSource - HikariPool-2 - Starting...
[info] c.z.h.HikariDataSource - HikariPool-2 - Start completed.
[info] p.a.d.DefaultDBApi - Database [default] connected at jdbc:postgresql://127.0.0.1/db?autoReconnect=true&ApplicationName=test1
[info] a.e.s.Slf4jLogger - Slf4jLogger started
[info] i.e.m.MigrationRunner - local migrations:4  existing migrations:4  checkState:true

[warn] comm.event - Can't initialize Event module: Connection refused: connect
[info] c.z.p.m.r.PlayRedis - Redis connected at redis://127.0.0.1:6379
[info] play.api.Play - Application started (Dev)
[error] application - Fatal error on GET /healthcheck called by 127.0.0.1
java.util.concurrent.CompletionException: java.lang.RuntimeException: Error in classpath search (looking for entities etc)
 at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
 at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
 at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:593)
 at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
 at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
 at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1977)
 at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:21)
 at scala.concurrent.java8.FuturesConvertersImpl$CF.apply(FutureConvertersImpl.scala:18)
 at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
 at scala.concurrent.BatchingExecutor$Batch.processBatch$1(BatchingExecutor.scala:63)

Caused by: java.lang.RuntimeException: Error in classpath search (looking for entities etc)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.getBootupClasses(BootupClassPathSearch.java:69)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.search(BootupClassPathSearch.java:29)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses1(DefaultContainer.java:246)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses(DefaultContainer.java:219)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:112)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:91)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:46)
 at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:54)
 at io.ebean.Ebean$ServerManager.getWithCreate(Ebean.java:203)
 at io.ebean.Ebean$ServerManager.get(Ebean.java:190)
Caused by: org.avaje.classpath.scanner.core.ClassPathScanException: java.lang.ClassNotFoundException: ErrorHandler$1
 at org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner.scanForClasses(ClassPathScanner.java:128)
 at org.avaje.classpath.scanner.core.Scanner.scanForClasses(Scanner.java:89)
 at org.avaje.classpath.scanner.core.Scanner.scanForClasses(Scanner.java:101)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.getBootupClasses(BootupClassPathSearch.java:60)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.search(BootupClassPathSearch.java:29)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses1(DefaultContainer.java:246)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses(DefaultContainer.java:219)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:112)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:91)
 at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:46)
Caused by: java.lang.ClassNotFoundException: ErrorHandler$1
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner.scanForClasses(ClassPathScanner.java:110)
 at org.avaje.classpath.scanner.core.Scanner.scanForClasses(Scanner.java:89)
 at org.avaje.classpath.scanner.core.Scanner.scanForClasses(Scanner.java:101)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.getBootupClasses(BootupClassPathSearch.java:60)
 at io.ebeaninternal.server.core.bootup.BootupClassPathSearch.search(BootupClassPathSearch.java:29)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses1(DefaultContainer.java:246)
 at io.ebeaninternal.server.core.DefaultContainer.getBootupClasses(DefaultContainer.java:219)



Rob Bygrave

unread,
Jan 24, 2018, 3:37:16 AM1/24/18
to ebean@googlegroups
Ok (different problem to the original post I see -  Caused by: java.lang.ClassNotFoundException: ErrorHandler$1

I see on line 115 of org.avaje.classpath.scanner.internal.scanner.classpath.ClassPathScanner it catches NoClassDefFoundError

... could catch ClassNotFoundException and that would fix that issue I'd say.




To unsubscribe from this group and stop receiving emails from it, send an email to ebean+unsubscribe@googlegroups.com.

Rob Bygrave

unread,
Jan 25, 2018, 5:21:04 PM1/25/18
to ebean@googlegroups
I have released avaje-classpath-scanner version 2.2.6 ... and this has the catch of ClassNotFound moved such that it isn't fatal.

Try that ...  (add that dependency, replacing the existing version).



Cheers, Rob.
Reply all
Reply to author
Forward
0 new messages