No Persistence provider for EntityManager
jhannoy Dec 24, 2007 6:37 PMHi,
I am using the following configuration:
JBoss 4.2.2 GA and EJB3/JPA.
Here follows a simple session bean and its remote interface that I've been using:
public interface Monitor { abstract EntityManager getEm(); abstract void setEm(EntityManager em); public State create(String id, float in, int r, int b); public void createState(State s); public State findById(String id); } @Stateless @Remote(Monitor.class) public class MonitorBean implements Monitor { EntityManagerFactory emf; @PersistenceUnit(name = "StateMonitor") protected EntityManager em; public MonitorBean() { em = emf.createEntityManager(); } public static final String RemoteJNDIName = MonitorBean.class .getSimpleName() + "/remote"; public static final String LocalJNDIName = MonitorBean.class .getSimpleName() + "/local"; public State create(String id, float in, int r, int b) { final State state = new State(id, in, r, b, Calendar.getInstance().getTime()); getEm().persist(state); return state; } public void createState(State s) { em.persist(s); } public State findById(String id) { return em.find(State.class, id); } public EntityManager getEm() { return em; } public void setEm(EntityManager em) { this.em = em; } }
As it can be seen the PU named "StateMonitor" is mentioned.
Here follows my persistence.xml file:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.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_1_0.xsd"> <persistence-unit name="StateMonitor"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/OracleDS</jta-data-source> <mapping-file>/META-INF/orm.xml</mapping-file> <properties> <property name="hibernate.show_sql" value="false" /> <property name="hibernate.format_sql" value="false" /> <property name="hibernate.connection.datasource" value="java:/OracleDS" /> <property name="oracle.jdbc.driver.OracleDriver" value="org.hsqldb.jdbcDriver" /> <property name="hibernate.connection.url" value="jdbc:oracle:thin:@<ip.ip.ip.ip>:1521:<DB>" /> <property name="hibernate.connection.username" value="aaaaa" /> <property name="hibernate.connection.password" value="aaaaa" /> <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.jdbc.use_streams_for_binary" value="false" /> </properties> </persistence-unit> </persistence>
Here how my build .xml looks like:
<?xml version="1.0"?> <!-- ======================================================================= --> <!-- JBoss build file --> <!-- ======================================================================= --> <project name="JBoss" default="ejbjar" basedir="."> <property environment="env" /> <property name="src.dir" location="${basedir}/ejbModule/" /> <property name="src.resources" value="${basedir}/ejbModule/" /> <property name="jboss.home" value="${env.JBOSS_HOME}" /> <property name="build.dir" value="${basedir}/build" /> <property name="build.classes.dir" value="${build.dir}/classes" /> <!-- Build classpath --> <path id="classpath"> <fileset dir="E:/jboss-4.2.2.GA/server/default/lib"> <include name="*.jar" /> </fileset> <fileset dir="${jboss.home}/server/default/deploy/ejb3.deployer"> <include name="*.jar" /> </fileset> <fileset dir="${jboss.home}/server/default/deploy/jboss-aop-jdk50.deployer"> <include name="*.jar" /> </fileset> <fileset dir="${jboss.home}/server/default/deploy/jboss-bean.deployer"> <include name="*.jar" /> </fileset> <fileset dir="${jboss.home}/lib"> <include name="*.jar" /> </fileset> <fileset dir="E:/eclipse/plugins/org.junit4_4.3.1"> <include name="*.jar" /> </fileset> <fileset dir="E:/jboss-EJB-3.0_Embeddable_ALPHA_8/lib"> <include name="jboss-ejb3-all.jar" /> </fileset> <fileset dir="E:/eclipse/plugins/org.apache.derby.core_10.3.1"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-entitymanager-3.3.1.GA"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-entitymanager-3.3.1.GA/lib"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-annotations-3.3.0.GA"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-annotations-3.3.0.GA/lib"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-3.2/lib"> <include name="*.jar" /> </fileset> <fileset dir="E:/hibernate-3.2"> <include name="*.jar" /> </fileset> <fileset dir="{src.dir}/../oraclelibs"> <include name="*.jar" /> </fileset> <fileset dir="{src.dir}/../oraclelibs"> <include name="*.zip" /> </fileset> <pathelement location="${build.classes.dir}" /> <!-- So that we can get jndi.properties for InitialContext and log4j.xml file --> <pathelement location="${basedir}/ejbModule/META-INF" /> </path> <property name="build.classpath" refid="classpath" /> <!-- =================================================================== --> <!-- Prepares the build directory --> <!-- =================================================================== --> <target name="prepare"> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes.dir}" /> <copy file="Oracle-ds.xml" todir="${jboss.home}/server/default/deploy" /> </target> <!-- =================================================================== --> <!-- Compiles the source code --> <!-- =================================================================== --> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="**"> <classpath refid="classpath" /> </javac> </target> <target name="ejbjar" depends="compile"> <jar jarfile="build/statemonitor.jar"> <fileset dir="${build.classes.dir}"> <include name="entity/*.class" /> <include name="session/*.class" /> <include name="exception/*.class" /> <include name="util/*.class" /> <include name="testcases/*.class" /> </fileset> <fileset dir="${src.resources}/"> <include name="META-INF/persistence.xml" /> <include name="META-INF/orm.xml" /> <include name="META-INF/jndi.properties" /> </fileset> </jar> <copy file="build/statemonitor.jar" todir="${jboss.home}/server/default/deploy" /> </target> <target name="run.client" depends="ejbjar"> <java classname="testcases.TestClient" fork="yes" dir="."> <classpath refid="classpath" /> </java> </target> <!-- =================================================================== --> <!-- Cleans up generated stuff --> <!-- =================================================================== --> <target name="clean"> <delete dir="${build.dir}" /> <delete file="${jboss.home}/server/default/deploy/statemonitor.jar" /> <delete file="${jboss.home}/server/default/deploy/Oracle-ds.xml" /> </target> </project>
As it can be seen I've used all the required jars in the classpath.
It seems that the server has no issues deploying the application. The following server log confirms this:
...................
...................
....................
2007-12-24 19:23:29,296 DEBUG [org.jboss.ejb3.Ejb3AnnotationHandler] found EJB3: ejbName=MonitorBean, class=session.MonitorBean, type=STATELESS
2007-12-24 19:23:29,390 DEBUG [org.hibernate.util.DTDEntityResolver] trying to resolve system-id [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd]
2007-12-24 19:23:29,390 DEBUG [org.hibernate.cfg.EJB3DTDEntityResolver] recognized EJB3 ORM namespace; attempting to resolve on classpath under org/hibernate/ejb
2007-12-24 19:23:29,390 DEBUG [org.hibernate.cfg.EJB3DTDEntityResolver] located [http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd] in classpath
2007-12-24 19:23:29,421 DEBUG [org.jboss.ejb3.Ejb3Deployment] EJB3 deployment time took: 203
2007-12-24 19:23:29,421 DEBUG [org.jboss.ejb3.Ejb3Module] Created jboss.j2ee:service=EJB3,module=statemonitor.jar
2007-12-24 19:23:29,421 DEBUG [org.jboss.system.ServiceController] Creating dependent components for: jboss.j2ee:service=EJB3,module=statemonitor.jar dependents are: []
2007-12-24 19:23:29,421 DEBUG [org.jboss.deployment.MainDeployer] Done with create step of deploying statemonitor.jar
2007-12-24 19:23:29,421 DEBUG [org.jboss.deployment.MainDeployer] Begin deployment start file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
2007-12-24 19:23:29,421 DEBUG [org.jboss.ejb3.EJB3Deployer] start application, deploymentInfo: org.jboss.deployment.DeploymentInfo@206491c1 { url=file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar }
deployer: MBeanProxyExt[jboss.ejb3:service=EJB3Deployer]
status: Starting
state: START_DEPLOYER
watch: file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
altDD: null
lastDeployed: 1198504409203
lastModified: 1198504409203
mbeans:
, short name: statemonitor.jar, parent short name: null
2007-12-24 19:23:29,421 DEBUG [org.jboss.system.ServiceController] starting service jboss.j2ee:service=EJB3,module=statemonitor.jar
2007-12-24 19:23:29,421 DEBUG [org.jboss.ejb3.Ejb3Module] Starting jboss.j2ee:service=EJB3,module=statemonitor.jar
2007-12-24 19:23:29,421 INFO [org.jboss.ejb3.JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.entity.PersistenceUnitDeployment
2007-12-24 19:23:29,437 INFO [org.jboss.ejb3.JmxKernelAbstraction] installing MBean: persistence.units:jar=statemonitor.jar,unitName=StateMonitor with dependencies:
2007-12-24 19:23:29,437 INFO [org.jboss.ejb3.JmxKernelAbstraction] jboss.jca:name=OracleDS,service=DataSourceBinding
2007-12-24 19:23:29,437 DEBUG [org.jboss.system.ServiceController] Creating service persistence.units:jar=statemonitor.jar,unitName=StateMonitor
...................
...................
....................
2007-12-24 19:23:29,437 DEBUG [org.jboss.ejb3.ServiceDelegateWrapper] Starting persistence.units:jar=statemonitor.jar,unitName=StateMonitor
2007-12-24 19:23:29,437 INFO [org.jboss.ejb3.entity.PersistenceUnitDeployment] Starting persistence unit persistence.units:jar=statemonitor.jar,unitName=StateMonitor
2007-12-24 19:23:29,437 DEBUG [org.jboss.ejb3.entity.PersistenceUnitDeployment] Found persistence.xml file in EJB3 jar
2007-12-24 19:23:29,453 INFO [org.hibernate.ejb.Version] Hibernate EntityManager 3.2.1.GA
2007-12-24 19:23:29,484 INFO [org.hibernate.cfg.annotations.Version] Hibernate Annotations 3.2.1.GA
2007-12-24 19:23:29,484 INFO [org.hibernate.cfg.Environment] Hibernate 3.2.4.sp1
2007-12-24 19:23:29,500 INFO [org.hibernate.cfg.Environment] hibernate.properties not found
2007-12-24 19:23:29,500 INFO [org.hibernate.cfg.Environment] Bytecode provider name : javassist
2007-12-24 19:23:29,500 INFO [org.hibernate.cfg.Environment] using JDK 1.4 java.sql.Timestamp handling
2007-12-24 19:23:29,625 DEBUG [org.hibernate.ejb.Ejb3Configuration] Processing PersistenceUnitInfo [
name: StateMonitor
persistence provider classname: org.hibernate.ejb.HibernatePersistence
classloader: org.jboss.mx.loading.UnifiedClassLoader3@1ca5b68{ url=file:/E:/jboss-4.2.2.GA/server/default/tmp/deploy/tmp22123statemonitor.jar ,addedOrder=46}
Temporary classloader: org.jboss.mx.loading.UnifiedClassLoader3@19a19fd{ url=file:/E:/jboss-4.2.2.GA/server/default/tmp/deploy/tmp22123statemonitor.jar ,addedOrder=0}
excludeUnlistedClasses: false
JTA datasource: org.jboss.resource.adapter.jdbc.WrapperDataSource@1963273
Non JTA datasource: null
Transaction type: JTA
PU root URL: file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
Jar files URLs []
Managed classes names []
Mapping files names [
/META-INF/orm.xml]
Properties [
hibernate.jacc.ctx.id: statemonitor.jar
hibernate.connection.password: orvetl
hibernate.cache.region_prefix: statemonitor_jar,StateMonitor
hibernate.show_sql: false
hibernate.bytecode.use_reflection_optimizer: false
hibernate.connection.datasource: java:/OracleDS
hibernate.transaction.manager_lookup_class: org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.hbm2ddl.auto: create
hibernate.jdbc.use_streams_for_binary: false
hibernate.format_sql: false
hibernate.session_factory_name: persistence.units:jar=statemonitor.jar,unitName=StateMonitor
hibernate.connection.username: orvetl
hibernate.jndi.java.naming.factory.url.pkgs: org.jboss.naming:org.jnp.interfaces
hibernate.jndi.java.naming.factory.initial: org.jnp.interfaces.NamingContextFactory
oracle.jdbc.driver.OracleDriver: org.hsqldb.jdbcDriver
hibernate.cache.provider_class: org.hibernate.cache.HashtableCacheProvider
hibernate.dialect: org.hibernate.dialect.Oracle10gDialect
hibernate.connection.url: jdbc:oracle:thin:@10.5.2.101:1521:DBADP1
hibernate.bytecode.provider: javassist]
2007-12-24 19:23:29,625 DEBUG [org.hibernate.ejb.Ejb3Configuration] Detect class: true; detect hbm: true
2007-12-24 19:23:29,625 DEBUG [org.hibernate.ejb.Ejb3Configuration] Detect class: true; detect hbm: true
........................
...........................
........................
2007-12-24 19:23:29,750 INFO [org.hibernate.ejb.Ejb3Configuration] [PersistenceUnit: StateMonitor] META-INF/orm.xml found
2007-12-24 19:23:29,765 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Execute first pass mapping processing
2007-12-24 19:23:29,843 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process hbm files
2007-12-24 19:23:29,843 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process annotated classes
2007-12-24 19:23:29,843 INFO [org.hibernate.cfg.AnnotationBinder] Binding entity from annotated class: entity.State
........................
...........................
........................
2007-12-24 19:23:30,921 INFO [org.hibernate.impl.SessionFactoryObjectFactory] Factory name: persistence.units:jar=statemonitor.jar,unitName=StateMonitor
2007-12-24 19:23:30,937 INFO [org.hibernate.util.NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
2007-12-24 19:23:30,937 DEBUG [org.hibernate.impl.SessionFactoryImpl] Returning a Reference to the SessionFactory
2007-12-24 19:23:30,937 DEBUG [org.hibernate.util.NamingHelper] Bound name: persistence.units:jar=statemonitor.jar,unitName=StateMonitor
2007-12-24 19:23:30,937 INFO [org.hibernate.impl.SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.units:jar=statemonitor.jar,unitName=StateMonitor
2007-12-24 19:23:30,937 WARN [org.hibernate.impl.SessionFactoryObjectFactory] InitialContext did not implement EventContext
2007-12-24 19:23:30,937 DEBUG [org.hibernate.impl.SessionFactoryImpl] instantiated session factory
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Execute first pass mapping processing
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process hbm files
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process annotated classes
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] processing manytoone fk mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing extends queue
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing collection mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing native query and ResultSetMapping mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing association property references
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing foreign key constraints
2007-12-24 19:23:30,937 DEBUG [org.hibernate.validator.ClassValidator] ResourceBundle ValidatorMessages not found in Validator classloader. Delegate to org.hibernate.validator.resources.DefaultValidatorMessages
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Execute first pass mapping processing
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process hbm files
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] Process annotated classes
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.AnnotationConfiguration] processing manytoone fk mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing extends queue
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing collection mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing native query and ResultSetMapping mappings
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing association property references
2007-12-24 19:23:30,937 DEBUG [org.hibernate.cfg.Configuration] processing foreign key constraints
2007-12-24 19:23:30,937 DEBUG [org.hibernate.validator.ClassValidator] ResourceBundle ValidatorMessages not found in Validator classloader. Delegate to org.hibernate.validator.resources.DefaultValidatorMessages
2007-12-24 19:23:30,937 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] Running hbm2ddl schema export
........................
...........................
........................
2007-12-24 19:23:31,375 DEBUG [org.jboss.ejb3.Ejb3Deployment] Bound ejb3 container jboss.j2ee:jar=statemonitor.jar,name=OSMonitorBean,service=EJB3
2007-12-24 19:23:31,375 DEBUG [org.jboss.ejb3.Ejb3Module] Started jboss.j2ee:service=EJB3,module=statemonitor.jar
2007-12-24 19:23:31,375 DEBUG [org.jboss.system.ServiceController] Starting dependent components for: jboss.j2ee:service=EJB3,module=statemonitor.jar dependent components: []
2007-12-24 19:23:31,375 INFO [org.jboss.ejb3.EJB3Deployer] Deployed: file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
2007-12-24 19:23:31,375 DEBUG [org.jboss.deployment.MainDeployer] End deployment start on package: statemonitor.jar
2007-12-24 19:23:31,375 DEBUG [org.jboss.deployment.MainDeployer] Deployed package: file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
2007-12-24 19:23:31,375 DEBUG [org.jboss.deployment.scanner.URLDeploymentScanner] Watch URL for: file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar -> file:/E:/jboss-4.2.2.GA/server/default/deploy/statemonitor.jar
..................
..................
....................
Finally here follows a typical test client:
public class TestClient { private EntityManagerFactory emf; private EntityManager em; Monitor bean = null; public void runTest() throws Exception { try { InitialContext ctx = new InitialContext(); Agent agent = new Agent(); bean = (Monitor) ctx.lookup(MonitorBean.RemoteJNDIName); initEmfAndEm(); bean.getEm().getTransaction().begin(); System.out.println("Monitor Sateless..."); bean.create(agent.getId(), agent.getIn(), agent.getR(), agent.getB()); bean.toString(); bean.getEm().getTransaction().rollback(); } catch (NamingException e) { e.printStackTrace(); } } public void initEmfAndEm() { emf = Persistence.createEntityManagerFactory("StateMonitor"); em = emf.createEntityManager(); bean.setEm(em); } public void closeEmAndEmf() { bean.getEm().close(); emf.close(); } public static void main(String[] args) { try { TestClient cli = new TestClient(); System.out.println("Created Class..."); cli.runTest(); } catch (Exception e) { e.printStackTrace(); } } }
While running this using ant (build.xml) I am getting the following error:
Buildfile: E:\E_WSPACE_EURO\StateMonitor\build.xml
prepare:
compile:
ejbjar:
run.client:
[java] Created Class...
[java] log4j:WARN No appenders could be found for logger (org.hibernate.ejb.Version).
[java] log4j:WARN Please initialize the log4j system properly.
[java] javax.persistence.PersistenceException: No Persistence provider for EntityManager named StateMonitor
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
[java] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
[java] at testcases.TestClient.initEmfAndEm(TestClient.java:68)
[java] at testcases.TestClient.runTest(TestClient.java:39)
[java] at testcases.TestClient.main(TestClient.java:82)
BUILD SUCCESSFUL
Total time: 1 second
Requesting all to help please. Do I need any more config/xmls?
-Thanks,
J.