2016-04-12 7 views
0

Innen drools Werkbank i Java-Klasse erstellt EntityManager zu bekommen, und ich innen TFL-Dateien verwendet, aber mein Problem ist, dassKein Persistence Provider für EntityManager namens xxx

  1. , wenn ich neues Projekt in Workbench erstellen erstellen i Projektstruktur wie maven
  2. die persistence.xml ist innerhalb src/main.resources/METE-Inf/persistence.xml

wenn ich Klasse nennen unten zu bekommen EntityManager wie

package demo.test; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import org.hibernate.jpa.HibernateEntityManagerFactory; 
import org.hibernate.Session; 

/** 
* This class was automatically generated by the data modeler tool. 
*/ 

public class Factory implements java.io.Serializable { 

    static final long serialVersionUID = 1L; 

    public Factory() { 
    } 


public Session getSessionHibernate(){ 

    HibernateEntityManagerFactory ha = (HibernateEntityManagerFactory) Persistence 
       .createEntityManagerFactory("flightdataunit"); 
     EntityManager emf = ha.createEntityManager(); 

     Session session = emf.unwrap(Session.class); 

     session.beginTransaction().begin(); 
     return session; 
} 
} 

Und persistence.xml wie unten

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> 
    <persistence-unit name="flightdataunit" transaction-type="JTA"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <jta-data-source>java:jboss/sqlserver/flightdata</jta-data-source> 
     <class>demo.test.Aircraftfleetdetail</class> 
     <class>demo.test.Flightdatacrew</class> 
     <class>demo.test.Airfield</class> 
     <class>demo.test.FlightdatacrewPK</class> 
     <class>demo.test.Flighttype</class> 
     <class>demo.test.Repository</class> 
     <class>demo.test.Seatconfig</class> 
     <class>demo.test.Aircraftidentity</class> 
     <class>demo.test.Place</class> 
     <class>demo.test.Flightdata</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/> 
      <property name="hibernate.max_fetch_depth" value="3"/> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.show_sql" value="false"/> 
      <property name="hibernate.id.new_generator_mappings" value="false"/> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

und pom.xml wie

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>demo</groupId> 
    <artifactId>TEST</artifactId> 
    <version>1.0</version> 
    <name>TEST</name> 
    <dependencies> 
    <dependency> 
     <groupId>sqlserver</groupId> 
     <artifactId>jarfile</artifactId> 
     <version>4.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>antlr</groupId> 
     <artifactId>antlr</artifactId> 
     <version>2.7.6</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2.2</version> 
    </dependency> 
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.common</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>5.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.kie</groupId> 
     <artifactId>kie-maven-plugin</artifactId> 
     <version>6.3.0.Final</version> 
     <extensions>true</extensions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

als ich versuchte, i für Namen XXX keine Persistenz-Provider

neue bekam Factory-Klasse zu rufen Fabrikklasse

package demo.test; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import org.hibernate.jpa.HibernateEntityManagerFactory; 
import org.hibernate.Session; 
import javax.ejb.Stateless; 
import javax.persistence.PersistenceContext; 
/** 
* This class was automatically generated by the data modeler tool. 
*/ 

@Stateless                    
public class Factory implements java.io.Serializable { 

    static final long serialVersionUID = 1L; 

    @PersistenceContext(unitName ="flightdataunit") 
    EntityManager entityManager; 

    public Factory() { 
    } 


public Session getSessionHibernate(){ 

     Session session = entityManager.unwrap(Session.class); 


     return session; 
} 
} 
+0

Welche Umgebung versuchen Sie es laufen? Sie definieren die Persistenzeinheit mit dem Transaktionstyp gleich JTA. Dies bedeutet, dass der Container für das Erstellen des Entitätsmanagers verantwortlich sein sollte, Sie ihn jedoch manuell selbst erstellen. Bitte lese dies: http://tomee.apache.org/jpa-concepts.html für weitere Informationen – rapasoft

+0

tatsächlich ich benutze Wildfly 8.1.Final Application Server, in diesem Kie-Server und Kie-WB Kriege sind im Einsatz, ich brauche Hibernate-Session-Objekt für den Zugriff auf Daten in Kie-Workbench –

Antwort

0

Sie mischen zwei verschiedene Dinge. Wenn Sie Java EE-kompatiblen Anwendungsserver verwenden, können Sie die EntityManager unter Verwendung von @PeristenceContext annoation tatsächlich injizieren. Wenn Sie JPA verwenden möchten, versuchen Sie nicht, eine Hibernate-Sitzung zu erstellen (z. B. eine herstellerspezifische Implementierung), und starten Sie Transaktionen auf keinen Fall selbst - verwenden Sie container managed transactions.

So werden Sie brauchen, um

  • Factory eine @Stateless Session Bean machen (oder Stateful, hängt von der Nutzung)
  • Inject @PersistenceContext EntityManager em in der Fabrik
  • In Ihrem Coderuf Methoden der em, z.B. die EntityManager

Dies ist eine schöne Ressource, die Sie auf dem richtigen Weg zu bringen: http://www.tutorialspoint.com/ejb/ejb_persistence.htm

+0

, durch Verwendung von EJB, ich muss Methoden schreiben, um auf Daten innerhalb der Schnittstelle zugreifen, dann ich implimiment, aber ich muss Hibernate-Session-Objekt benannten Abfragen innerhalb drools drl-Dateien wie FF: Flightdata verwenden ($ flightNo: flightNo) von new Factory(). getSessionHibernate(). getNamedQuery ("Flightdata.findAll"). setParameter ("flightNo", "5j-110"). list(); –

+0

In EJB3 + müssen Sie keine separate Schnittstelle für EJB-Bean schreiben. Wenn Sie wirklich die Hibernate-Sitzung für benannte Abfragen verwenden müssen, können Sie den Entity Manager (wie ich in der Antwort geschrieben habe) injizieren und dann die HibernateSession daraus entpacken. – rapasoft

+0

** @ rapasoft ** Ich erstellte Datenquelle in Wilfly-Server mit jndi Name Java: jboss/sqlserver, aber wenn ich versuchte, Daten mit Hibernate-Sitzung zuzugreifen, null Zeiger Ausnahme ich bin, die Fabrikklasse ist über –