I'm going through "The best book about Hibernate..." and I'm working on using JPA annotation with Hibernate. I created a servlet that is packaged as a JAR file. Inside the servlet I created a POJO and added @javax.persistence.Entity to the class. If I don't add
<exclude-unlisted-classes>true</exclude-unlisted-classes> to persistence.xml, I get the error
No ClassLoaders found for: WEB-INF.classes.com.mckesson.hbi.servlets.printing.Twit What's throwing me off is the
WEB-INF.classes.. How did that get in there? If I add the exclude tag, and add the class explicitly in persistence.xml, it works.
Any thoughts on how I'm supposed to tell the class detector that WEB-INF.classes is not part of the package name?
Hibernate core version: 3.2
Hibernate annotations version: 3.3.1 GA
Hibernate entity manager version: 3.3.2 GA
Name and version of the database you are using: SQL Server 2005
persistence.xml:
Code:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="WebTrend">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.mckesson.hbi.servlets.printing.Twit</class>
<!-- Need this to make it work -->
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="use_sql_comments" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.connection.driver_class" value="net.sourceforge.jtds.jdbc.Driver"/>
<property name="hibernate.connection.username" value="removed"/>
<property name="hibernate.connection.password" value="removed"/>
<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://localhost/WebTrend"/>
</properties>
</persistence-unit>
</persistence>
Class:Code:
package com.mckesson.hbi.servlets.printing;
import javax.persistence.Table;
import javax.persistence.Entity;
@Entity
@Table(name = "highlight_print_data")
public class Twit {
}
Stack trace:Code:
exception
javax.persistence.PersistenceException: [PersistenceUnit: WebTrend] class or package not found
org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1089)
org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:886)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:772)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:183)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240)
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
com.mckesson.hbi.servlets.printing.HighlightPDFDocument.<init>(HighlightPDFDocument.java:98)
com.mckesson.hbi.servlets.printing.PrintServlet.doPost(PrintServlet.java:126)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
root cause
java.lang.ClassNotFoundException: No ClassLoaders found for: WEB-INF.classes.com.mckesson.hbi.servlets.printing.Twit
org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
java.lang.ClassLoader.loadClass(ClassLoader.java:251)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:242)
org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:112)
org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1005)
org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1077)
org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:886)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:772)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:183)
org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240)
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
com.mckesson.hbi.servlets.printing.HighlightPDFDocument.<init>(HighlightPDFDocument.java:98)
com.mckesson.hbi.servlets.printing.PrintServlet.doPost(PrintServlet.java:126)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
Debug level Hibernate log excerpt:Code:
2008-05-07 09:26:03,061 DEBUG [org.hibernate.ejb.Ejb3Configuration] Look up for persistence unit: WebTrend
2008-05-07 09:26:03,061 DEBUG [org.hibernate.util.DTDEntityResolver] trying to resolve system-id [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd]
2008-05-07 09:26:03,061 DEBUG [org.hibernate.cfg.EJB3DTDEntityResolver] recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb
2008-05-07 09:26:03,061 DEBUG [org.hibernate.cfg.EJB3DTDEntityResolver] located [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd] in classpath
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.Ejb3Configuration] Detect class: true; detect hbm: true
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Searching mapped entities in jar/par: file:/C:/devtools/jboss/server/hbi/tmp/deploy/tmp10384hbi-servlets-exp.war
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$Cell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$EventHandler
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell$DateCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell$EmptyCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell$NameCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell$PageCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell$PageOfCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument$SectionCell
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HBIPDFDocument
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HighlightData
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.HighlightPDFDocument
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.PrintOptions$Margins
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.PrintOptions$Section
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.PrintOptions
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.PrintServlet
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Filtering: WEB-INF.classes.com.mckesson.hbi.servlets.printing.Twit
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.packaging.JarVisitor] Java element filter matched for WEB-INF.classes.com.mckesson.hbi.servlets.printing.Twit
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.Ejb3Configuration] Detect class: true; detect hbm: true
2008-05-07 09:26:03,076 DEBUG [org.hibernate.ejb.Ejb3Configuration] Creating Factory: WebTrend
2008-05-07 09:26:03,092 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/hbi-servlets].[PrintServlet]] Servlet.service() for servlet PrintServlet threw exception
javax.persistence.PersistenceException: [PersistenceUnit: WebTrend] class or package not found
at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1089)
at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:886)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:772)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:183)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:240)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at com.mckesson.hbi.servlets.printing.HighlightPDFDocument.<init>(HighlightPDFDocument.java:98)
at com.mckesson.hbi.servlets.printing.PrintServlet.doPost(PrintServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:856)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:566)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: WEB-INF.classes.com.mckesson.hbi.servlets.printing.Twit
at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:112)
at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1005)
at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1077)
... 29 more