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.