Could not find datasource message in client JPA although EAR
ezanih Dec 23, 2008 11:48 PMHi there
I created a very simple JPA Entity Project (BiddingTest) involving one bid entity (Bidder.java) and one bid client (BidClient.java) from the JPA Project Wizard in Eclipse Ganymede and JBoss 4.2.2.GA. I use Hibernate 3.3.1, Hibernate Annotations 3.4 and Hibernate Entity Manager 3.4.
My BiddingTestEAR was built and deployed succesfully by the JBoss Server and I checked in my OracleXE db and found out that it had successfully managed to create the BIDDER table.
However my problem occurs when I try to populate this BIDDER table from a JPA Test Client. The JPA Test Client keeps giving me the exception :
javax.persistence.PersistenceException: [PersistenceUnit: BiddingTest] Unable to build EntityManagerFactory
and
Caused by: org.hibernate.HibernateException: Could not find datasource
and
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial.
Here is my console output:
[BidClient] : creating EntityManagerFactory... log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. javax.persistence.PersistenceException: [PersistenceUnit: BiddingTest] Unable to build EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) at Main.main(Main.java:43) Caused by: org.hibernate.HibernateException: Could not find datasource at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:79) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:137) at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:89) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) ... 4 more Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:284) at javax.naming.InitialContext.lookup(InitialContext.java:351) at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75) ... 11 more [BidClient] : closing entity manager and factory... Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:88)
This is my persistence.xml file :
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="BiddingTest"> <jta-data-source>java:/OracleXE1_DS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> </properties> </persistence-unit> </persistence>
This is my oracle-ds.xml file :
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>OracleXE1_DS</jndi-name> <connection-url>jdbc:oracle:thin:system/system@localhost:1521:XE</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>system</user-name> <password>system</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> <metadata> <type-mapping>Oracle10g</type-mapping> </metadata> </local-tx-datasource> </datasources>
This is my BidClient.java file:
package my.com.eperolehan.client;
import javax.persistence.EntityManager;
//import javax.persistence.EntityTransaction;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
//import javax.persistence.PersistenceContext;
import my.com.eperolehan.entities.Bidder;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.SimpleLayout;
public class BidClient {
private static EntityManagerFactory f;
//@PersistenceContext(unitName="BiddingTest")
private static EntityManager em;
public static void main(String[] args) {
Logger log = Logger.getLogger(BidClient.class);
log.setLevel(Level.WARN);
SimpleLayout layout = new SimpleLayout();
ConsoleAppender appender = new ConsoleAppender(layout);
log.addAppender(appender);
try {
System.out.println("[BidClient] : creating EntityManagerFactory...");
log.debug("[BidClient] : creating EntityManagerFactory...");
f = Persistence.createEntityManagerFactory("BiddingTest");
System.out.println("[BidClient] : Created.");
log.debug("[BidClient] : Created.");
System.out.println("[BidClient] : creating EntityManager...");
em = f.createEntityManager();
System.out.println("[BidClient] : Created.");
log.debug("[BidClient] : Created.");
em.getTransaction().begin();
try {
System.out.println("[BidClient] : creating a Bidder...");
Bidder bidder = new Bidder();
bidder.setBidderName("Bidder No 1");
bidder.setBidSessionId(1);
em.persist(bidder);
em.getTransaction().commit();
System.out.println("[BidClient] : Bidder created and commited.");
log.debug("[BidClient] : Bidder created and commited.");
} catch (Exception ex) {
em.getTransaction().rollback();
}
System.out.println("[BidClient] : Bidder person created and persisted successfully.");
log.debug("[BidClient] : Bidder person created and persisted successfully.");
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
}
System.out.println("[BidClient] : closing entity manager and factory...");
log.debug("[BidClient] : closing entity manager and factory...");
em.close();
//f.close();
System.out.println("[BidClient] : Closed.");
log.debug("[BidClient] : Closed.");
}
}
Please can help me. Thank you very much in advance!