Zugriff auf entity bean. EJB3 Jboss hibernate

derHarri

Grünschnabel
Hallo,

ich versuche erste EJB's zum laufen zu bekommen und scheitere daran auf eine Entity-Bean zuzugreifen.
Eine stateless und eine statefull session bean funktionieren bereits.
Beim Erzegen der EntityManagerFactory hängt es allerdings. Dabei bekomme ich immer eine PersistenceException:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named harri_em

Ich packe die EntityBean sowie die SesionBeans in jars, die wiederum in einem ear gepackt sind. Innerhalb des jars der EntityBean im Verzeichnis META-INF befindet sich meine persistence.xml:

PHP:
 <?xml version="1.0" encoding="UTF-8"?> 

<persistence> 
    <persistence-unit name="harri_em"> 
       <jta-data-source>java:/MySqlDS</jta-data-source> 
       <provider>org.hibernate.ejb.HibernatePersistence</provider> 
       <class>org.emetis.testejb3.server.accessteschd.AccessTeschdBean</class> 
       <properties> 
         <property name="hibernate.show_sql" value="true"/>     
         <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> 
       </properties> 
   </persistence-unit> 
</persistence>


Meine Datasource befindet sich im deploy-Verzeichnis meines Servers und definiert eine Datasource zu einer MySql-Datenbank:
PHP:
 <?xml version="1.0" encoding="UTF-8"?> 

<datasources> 
   <local-tx-datasource> 
   <jndi-name>MySqlDS</jndi-name> 
   <connection-url>jdbc:mysql://localhost:3306/emetis_one</connection-url> 
   <driver-class>com.mysql.jdbc.Driver</driver-class> 
   <user-name>testuser</user-name> 
   <password>testUserPwd</password> 
   <min-pool-size>1</min-pool-size> 
   <max-pool-size>20</max-pool-size> 
     <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> 
    <metadata> 
       <type-mapping>mySQL</type-mapping> 
    </metadata> 
  </local-tx-datasource> 
</datasources>

Das Deployment schein auch schon irgendwie zu funktionieren. Ich kann über den Initalcontext auf die SessionBeans zugreifen.
In der Jboss JMX-Console erscheint meine perisstence unit:

persistence.units
* ear=testEjb3.ear,unitName=harri_em

In meinem Testclient wird dann allerdings beim Erzeugen der EntitymanagerFactory die PersistenceException geworfen:

PHP:
 Hashtable<String, String> env = new Hashtable<String, String>(); 
env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); 
env.put("java.naming.provider.url","localhost:1099"); 
env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces "); 

InitialContext ctx = new InitialContext(env); 
                    
HelloWorld hello = (HelloWorld)ctx.lookup("testEjb3/HelloWorldBean/remote"); 
System.out.println(">"+hello.getGreeting()); 
         
HelloWorld2 hello2 = (HelloWorld2)ctx.lookup("testEjb3/HelloWorldBean2/remote"); 
System.out.println(">>"+hello2.getGreeting()); 
hello2.setName("Harri"); 
System.out.println(">>"+hello2.getGreeting()); 
         
EntityManagerFactory emf = Persistence.createEntityManagerFactory("harri_em"); 
EntityManager manager = emf.createEntityManager(); 
EntityTransaction tx = manager.getTransaction(); 
         
tx.begin(); 
manager.persist(new AccessTeschdBean("valOne", "valTwo")); 
tx.commit(); 
manager.close();


Ich habe wirklich keine Ahnung mehr wo ich den Fehler noch suchen soll.

Was ich nicht verstehe ist, wenn ich auf SessionBeans zugreife gebe ich über die Properties des InitialContexsts beispielsweise an auf welchem Rechner der jboss läuft. Über dieses Propertie bekommt der Client die Infomation wo er zu "suchen" hat.
Woher kommt diese Information im Falle der EntityBeans? Sprich Eruegen des Entitymanagers?
Möglicherweise muss dies auch noch konfiguriert werden? Aber wie?

Vielen Dank schonmal für die Hilfe.


Gruß
Harri Eleftheriadis







 

Neue Beiträge

Zurück