| During development I use Tomcat 8 deploy descriptor: {{<Context docBase="/home/user/devel/app/src/main/webapp" reloadable="true"> <Resources> <!-- To override application.properties, logback.xml, etc. --> <PreResources className="org.apache.catalina.webresources.DirResourceSet" base="/home/user/devel/app/.config" internalPath="/" webAppMount="/WEB-INF/classes" /> <!-- To load compiled classes. --> <PostResources className="org.apache.catalina.webresources.DirResourceSet" base="/home/user/devel/app/target/classes" webAppMount="/WEB-INF/classes" /> <!-- To load *.jar. --> <PostResources className="org.apache.catalina.webresources.DirResourceSet" base="/home/user/devel/app/target/app-1.1-SNAPSHOT/WEB-INF/lib" webAppMount="/WEB-INF/lib" /> </Resources> </Context> }} I extend classpath in order to load development version of config/auth files. Tomcat detect changes in specified paths and try to reload context. Tomcat 8 checks for changes of class/web.xml files. Sometimes changes triggered by NetBeans IDE. Sometimes I do "mvn package". My editor (Emacs) create temporary file which name look like: .#liquibase.properties After file saving this file disappear. For some strange reason org.hibernate.ejb.Ejb3Configuration.scanForClasses call org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree for each individual file in classpath: {{ private void getClassNamesInTree(File jarFile, String header) throws IOException { File[] files = jarFile.listFiles(); header = header == null ? "" : header + "/"; for ( File localFile : files ) { if ( !localFile.isDirectory() ) { String entryName = localFile.getName(); addElement( header + entryName, new BufferedInputStream( new FileInputStream( localFile ) ), new BufferedInputStream( new FileInputStream( localFile ) ) ); } else { getClassNamesInTree( localFile, header + localFile.getName() ); } } } }} Because editor remove unnecessary temp file, Hibernate fail with following stacktrace: {{2015-12-20 00:01:20,569 ERROR org.springframework.web.context.ContextLoader Caller+0 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:319) => Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/root-context.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: error trying to scan <jar-file>: file:/home/user/devel/lombardsvn/.config/ at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1117) ~[spring-context-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:922) ~[spring-context-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) ~[spring-context-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) ~[spring-web-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) ~[spring-web-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) [spring-web-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3755) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:292) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5542) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381) [tomcat8-catalina-8.0.28.jar:8.0.28] at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349) [tomcat8-catalina-8.0.28.jar:8.0.28] at java.lang.Thread.run(Thread.java:745) [na:1.7.0_91] Caused by: java.lang.RuntimeException: error trying to scan <jar-file>: file:/home/user/devel/lombardsvn/.config/ at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:864) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:606) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:75) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288) ~[spring-orm-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310) ~[spring-orm-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] ... 23 common frames omitted Caused by: java.lang.RuntimeException: Error while reading file:/home/user/devel/lombardsvn/.config/ at org.hibernate.ejb.packaging.NativeScanner.getFilesInJar(NativeScanner.java:195) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:506) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:861) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] ... 29 common frames omitted Caused by: java.io.FileNotFoundException: /home/user/devel/lombardsvn/.config/.#liquibase.properties (No such file or directory) at java.io.FileInputStream.open(Native Method) ~[na:1.7.0_91] at java.io.FileInputStream.<init>(FileInputStream.java:146) ~[na:1.7.0_91] at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:126) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.packaging.ExplodedJarVisitor.doProcessElements(ExplodedJarVisitor.java:92) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.packaging.AbstractJarVisitor.getMatchingEntries(AbstractJarVisitor.java:149) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] at org.hibernate.ejb.packaging.NativeScanner.getFilesInJar(NativeScanner.java:192) ~[hibernate-entitymanager-4.2.2.Final.jar:4.2.2.Final] ... 31 common frames omitted }} I think that Hibernate do wrong in: new BufferedInputStream( new FileInputStream( localFile ) ) on files that are not .class or .jar This lead to application crashes during development. Also it is obviously have performance impact - Hibernate just open any file in classpath!! |