EntityManager wirft NullpointerException: JBoss-Hibernate

Status
Nicht offen für weitere Antworten.
C

Chris273

Gast
Hallo NG!

Ich bin Anfänger in JEE3.0 und versuche gerade meine erste Entity Bean
zu entwickeln.
Dazu habe ich eine Session Bean und eine Entity Bean; ich benutze
JBoss 4.0.5 und Hibernate als Persistence Provider, versuche eine
Connection zu einer Oracle-Datenbank aufzubauen und entwickle mit
NetBeans5.5.


Meine Persistence Unit ist wie folgt in der persistence.xml
beschrieben:
Code:
<?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="emu" transaction-type="JTA"> 
    <jta-data-source>java:db</jta-data-source> 
    <properties/> 
  </persistence-unit> 
</persistence>

Meine Data-source ist wie folgt in der jboss-ds.xml erklärt:
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<datasources> 
  <local-tx-datasource> 
    <jndi-name>db</jndi-name> 
    <connection- 
url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=11.11.11.33) 
(PROTOCOL=tcp)(PORT=1521))(CONNECT_DATA=(SID=xyz)))</connection-url> 
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
    <user-name>userid</user-name> 
    <password>pass</password> 
    <min-pool-size>5</min-pool-size> 
    <max-pool-size>20</max-pool-size> 
    <idle-timeout-minutes>5</idle-timeout-minutes> 
  </local-tx-datasource> 
</datasources>

In meinem Session Bean deklariere ich den EntityManager:
Code:
@PersistenceContext(unitName = "emu") 
    private EntityManager entMan;

Wenn ich nun versuche auf en EntityManager zuzugreifen wird an der
folgenden Stelle eine NullPointerException geworfen ("Dateinamen" ist
der Name meines Entity-Beans):
Code:
Dateinamen dat = new Dateinamen(); 
entMan.persist(dat); <=== hier wird die NullpointerException 
geworfen!!
Habs mir auch schon genauer angeschaut, entMan ist wirklich
null.


In der jmx-console wird die Persistence Unit richtig angezeigt. Beim
deployen meines Projekts (mit NetBeans5.5) scheint auch die Datenbank
gefunden zu werden:
11:29:38,401 INFO [InjectedDataSourceConnectionProvider] Using
provided datasource
11:29:38,401 INFO [SettingsFactory] RDBMS: Oracle, version: Oracle
Database 10g Release 10.2.0.2.0 - 64bit Production
11:29:38,401 INFO [SettingsFactory] JDBC driver: Oracle JDBC driver,
version: 10.1.0.4.0
11:29:38,401 INFO [Dialect] Using dialect:
org.hibernate.dialect.Oracle9Dialect


Was mache ich falsch, fehlen evtl. noch Konfigurationen? Wieso ist der
EntityManager NULL??


Vielen Dank für Eure Mithilfe!!


Beste Grüße
Christoph
 
G

Guest

Gast
Das sieht auf den ersten Blick vollkommen korrekt aus. Kommen beim Deployment keine anderen Exceptions?
 
G

Guest

Gast
Nein, es werde keine Exceptions geworfen.
Hier nochmal der komplette JBoss-Output beim Deployment:

Code:
16:45:01,479 INFO  [SessionFactoryImpl] closing
16:45:01,495 INFO  [EARDeployer] Undeploying J2EE application, destroy step: file:/C:/Programme/jboss-4.0.5.GA/server/default/deploy/quadrat.ear  16:45:01,495 INFO  [EARDeployer] Undeployed J2EE application: file:/C:/Programme/jboss-4.0.5.GA/server/default/deploy/quadrat.ear
16:45:01,557 INFO  [EARDeployer] Init J2EE application: file:/C:/Programme/jboss-4.0.5.GA/server/default/deploy/quadrat.ear
16:45:03,198 INFO  [Ejb3Deployment] EJB3 deployment time took: 610
16:45:03,198 INFO  [JmxKernelAbstraction] installing MBean: persistence.units:ear=quadrat.ear,jar=quadrat-ejb.jar,unitName=emu with dependencies:
16:45:03,198 INFO  [JmxKernelAbstraction] 	jboss.jca:name=db,service=DataSourceBinding
16:45:03,213 INFO  [Ejb3Configuration] found EJB3 Entity bean: math.ejb.entity.Dateinamen
16:45:03,213 WARN  [Ejb3Configuration] Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null.
16:45:03,338 INFO  [Configuration] Reading mappings from resource: META-INF/orm.xml
16:45:03,338 INFO  [Ejb3Configuration] [PersistenceUnit: emu] no META-INF/orm.xml found
16:45:03,338 INFO  [AnnotationBinder] Binding entity from annotated class: math.ejb.entity.Dateinamen
16:45:03,338 INFO  [QueryBinder] Binding Named query: Dateinamen.findByDateinamen => SELECT d FROM Dateinamen d WHERE d.dateinamen = :dateinamen
16:45:03,823 INFO  [QueryBinder] Binding Named query: Dateinamen.findByBenutzt => SELECT d FROM Dateinamen d WHERE d.benutzt = :benutzt
16:45:03,823 INFO  [QueryBinder] Binding Named query: Dateinamen.findByDatum => SELECT d FROM Dateinamen d WHERE d.datum = :datum
16:45:03,823 INFO  [EntityBinder] Bind entity math.ejb.entity.Dateinamen on table DATEINAMEN
16:45:03,870 INFO  [ConnectionProviderFactory] Initializing connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider
16:45:04,323 INFO  [InjectedDataSourceConnectionProvider] Using provided datasource
16:45:04,323 INFO  [SettingsFactory] RDBMS: Oracle, version: Oracle Database 10g Release 10.2.0.2.0 - 64bit Production
16:45:04,323 INFO  [SettingsFactory] JDBC driver: Oracle JDBC driver, version: 10.1.0.4.0
16:45:04,323 INFO  [Dialect] Using dialect: org.hibernate.dialect.Oracle9Dialect
16:45:04,323 INFO  [TransactionFactoryFactory] Transaction strategy: org.hibernate.ejb.transaction.JoinableCMTTransactionFactory
16:45:04,823 INFO  [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
16:45:04,823 INFO  [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
16:45:04,823 INFO  [SettingsFactory] Automatic flush during beforeCompletion(): disabled
16:45:04,823 INFO  [SettingsFactory] Automatic session close at end of transaction: disabled
16:45:05,323 INFO  [SettingsFactory] JDBC batch size: 15
16:45:05,323 INFO  [SettingsFactory] JDBC batch updates for versioned data: disabled
16:45:05,323 INFO  [SettingsFactory] Scrollable result sets: enabled
16:45:05,323 INFO  [SettingsFactory] JDBC3 getGeneratedKeys(): disabled
16:45:05,323 INFO  [SettingsFactory] Connection release mode: auto
16:45:05,323 INFO  [SettingsFactory] Default batch fetch size: 1
16:45:05,823 INFO  [SettingsFactory] Generate SQL with comments: disabled
16:45:05,823 INFO  [SettingsFactory] Order SQL updates by primary key: disabled
16:45:05,823 INFO  [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
16:45:05,823 INFO  [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
16:45:05,823 INFO  [SettingsFactory] Query language substitutions: {}
16:45:06,323 INFO  [SettingsFactory] JPA-QL strict compliance: enabled
16:45:06,323 INFO  [SettingsFactory] Second-level cache: enabled
16:45:06,323 INFO  [SettingsFactory] Query cache: disabled
16:45:06,323 INFO  [SettingsFactory] Cache provider: org.hibernate.cache.HashtableCacheProvider
16:45:06,323 INFO  [SettingsFactory] Optimize cache for minimal puts: disabled
16:45:06,323 INFO  [SettingsFactory] Structured second-level cache entries: disabled
16:45:06,823 INFO  [SettingsFactory] Statistics: disabled
16:45:06,823 INFO  [SettingsFactory] Deleted entity synthetic identifier rollback: disabled
16:45:06,823 INFO  [SettingsFactory] Default entity-mode: pojo
16:45:06,854 INFO  [SessionFactoryImpl] building session factory
16:45:06,854 INFO  [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured

16:45:06,854 INFO  [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
16:45:07,448 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=quadrat.ear,jar=quadrat-ejb.jar,name=PIBean,service=EJB3 with dependencies:
16:45:07,463 INFO  [EJBContainer] STARTED EJB: math.ejb.PIBean ejbName: PIBean
16:45:07,495 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=quadrat.ear,jar=quadrat-ejb.jar,name=QuadratBean,service=EJB3 with dependencies:
16:45:07,495 INFO  [JmxKernelAbstraction] 	persistence.units:ear=quadrat.ear,jar=quadrat-ejb.jar,unitName=emu
16:45:07,854 INFO  [EJBContainer] STARTED EJB: math.ejb.QuadratBean ejbName: QuadratBean
16:45:07,854 INFO  [SimpleStatefulCache] Initializing SimpleStatefulCache with maxSize: 100000 timeout: 300 for jboss.j2ee:ear=quadrat.ear,jar=quadrat-ejb.jar,name=QuadratBean,service=EJB3
16:45:07,854 INFO  [EJB3Deployer] Deployed: file:/C:/Programme/jboss-4.0.5.GA/server/default/tmp/deploy/tmp1559quadrat.ear-contents/quadrat-ejb.jar
16:45:07,932 INFO  [EARDeployer] Started J2EE application: file:/C:/Programme/jboss-4.0.5.GA/server/default/deploy/quadrat.ear
 
G

Guest

Gast
Hmm.. die Zeilen
Code:
Dateinamen dat = new Dateinamen(); 
entMan.persist(dat);
rufst du in einer SSB Methode auf, die von aussen aufgerufen wird,
nicht im Konstruktor der SSB, oder?

Das wird ein ziemliches Rätselraten hier. :wink: Es sieht eigentlich alles OK aus.
Versuche mal die folgenden Zeilen in persistence.xml (hauptsächlich das hibernate.archive.autodetection)
Code:
<jta-data-source>java:db</jta-data-source>
<properties>
  <property name="hibernate.archive.autodetection" value="class" />
  <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
  <property name="hibernate.show_sql" value="true" />
  <property name="hibernate.use_sql_comments" value="true" />
  <property name="hibernate.format_sql" value="true" />
</properties>
und in der *-ds.xml Datei das hier (auf gleicher Ebene wie das max-pool-size)
Code:
<metadata>
   <type-mapping>Oracle9i</type-mapping>
</metadata>
<max-pool-size>20</max-pool-size>
 
C

Chris273

Gast
Anonymous hat gesagt.:
Hmm.. die Zeilen
Code:
Dateinamen dat = new Dateinamen(); 
entMan.persist(dat);
rufst du in einer SSB Methode auf, die von aussen aufgerufen wird,
nicht im Konstruktor der SSB, oder?

Genau das war mein Fehler!
Ich hab das entMan.persist() im Konstruktor der SSB aufgerufen. In einer anderen Methode, die von aussen aufgerufen wird, funktioniert es (auch ohne die angesprochenen Änderungen in der persistence.xml) einwandfrei.

Muss mir das mit dem Lebenszyklus von EJBs und Entities nochmal genauer anschauen.

Vielen Dank für deine Antwort!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben