Reputation: 53
I'm writing a simple Swing app for university and using Hibernate and Oracle XE.
I'm stuck with that error:
29.06.2011 14:54:10 org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.1.GA
29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
29.06.2011 14:54:10 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
29.06.2011 14:54:10 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
29.06.2011 14:54:10 org.hibernate.ejb.Version <clinit>
INFO: Hibernate EntityManager 3.3.2.GA
29.06.2011 14:54:31 org.hibernate.ejb.packaging.PersistenceXmlLoader$ErrorLogger warning
WARNING: Warning parsing XML: XML InputStream(2) schema_reference.4: Failed to read schema document 'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
29.06.2011 14:54:52 org.hibernate.ejb.packaging.PersistenceXmlLoader$ErrorLogger warning
my persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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_2_0.xsd">
<persistence-unit name="airportPU">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>my.airport.model.Crew</class>
<class>my.airport.model.Country</class>
<class>my.airport.model.City</class>
<class>my.airport.model.Plane</class>
<class>my.airport.model.Model</class>
<class>my.airport.model.Passenger</class>
<class>my.airport.model.Role</class>
<class>my.airport.model.Airport</class>
<class>my.airport.model.Spec</class>
<class>my.airport.model.AverageFlightTime</class>
<class>my.airport.model.CrewInTheRoleOnTheFlight</class>
<class>my.airport.model.Flight</class>
<class>my.airport.model.PassengersOnTheFlight</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@172.16.0.3:1521:XE"/>
<property name="javax.persistence.jdbc.password" value="AIRPORT"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="AIRPORT"/>
</properties>
</persistence-unit>
</persistence>
Creating entity manager factory:
public static EntityManagerFactory emf;
public static EntityManager em;
static {
try {
emf = Persistence.createEntityManagerFactory("airportPU");
em = emf.createEntityManager();
} catch (Exception e) {
System.exit(1);
}
}
Upvotes: 5
Views: 13254
Reputation: 523
As alternatives if you don't want to mess with hosts files, you could change the schemaLocation to a classpath resource, for instance
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee classpath:/com/sun/faces/web-facesconfig_2_0.xsd"
Or even to something random like
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com.file.was.not.there.so.changed.so.hibernate.takes.its.own.xsd.from.classpath.or.ignores.the.validation/xml/ns/persistence/orm_2_0.xsd"
Upvotes: 0
Reputation: 356
Adding to @Szocske's answer, Hibernate seems to want to retrieve the JPA 2.0 xsd from the Internet if it doesn't recognize that version.
My older Hibernate 3.2 jars were trying to connect to the Internet when I inadvertently used a persistence.xml that specified a version 2.0 xsd. So, if Hibernate is behaving that way for you, it might indicate a version mismatch between your XMLs and your Hibernate jars.
Upvotes: 1
Reputation: 7661
Bottom line: adding this line to the /etc/hosts file solves this:
127.0.0.1 java.sun.com
It seems Hibernate recognizes this and other "standard" XSD-s as something it has, and has no problem working with its internal copy without Internet access.
Problems arise when the HTTP GET for the XSD does not succeed, but does not fail either: Returns something else or takes forever to respond. Hibernate is not prepared for these situations. Right now the URL takes forever to respond, and Hibernate does not employ a quick timeout as it should for situations like today.
Systems without Internet access are unaffected.
So as a solution I am emulating lack of Internet access by resolving the java.sun.com hostname to the loopback interface IP address, guaranteeing a quick failure.
Upvotes: 11
Reputation: 47310
the link is down where did you get the reference for it, double check it... the http ref should work but obviously isn't as it does not exist.
A quick google suggests there is a glitch in the matrix (oracle servers).
Upvotes: 2