Autor Thema: Domino 7 und Hibernate  (Gelesen 3071 mal)

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
Domino 7 und Hibernate
« am: 11.07.07 - 12:51:37 »
Hallo @all,

Ich versuche Domino via Hibernate an eine RDB anzukoppeln und bekomme, wenn ich meine Factory über einen NotesAgent ansteuern möchte, diesen Fehler.

Ausserhalb von Domino funktioniert es wunderbar.

Vielleicht hat jemand eine Idee, ich jedenfalls hab keine mehr :(

Code
11.07.2007 12:35:11   HTTP JVM: java.lang.NullPointerException
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.type.EntityType.resolve(EntityType.java:303)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.Loader.doQuery(Loader.java:717)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.Loader.loadEntity(Loader.java:1785)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:47)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:41)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2730)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:177)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:799)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:792)
11.07.2007 12:35:11   HTTP JVM: 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11.07.2007 12:35:11   HTTP JVM: 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
11.07.2007 12:35:11   HTTP JVM: 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
11.07.2007 12:35:11   HTTP JVM: 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
11.07.2007 12:35:11   HTTP JVM: 	at java.lang.reflect.Method.invoke(Method.java:391)
11.07.2007 12:35:11   HTTP JVM: 	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301)
11.07.2007 12:35:11   HTTP JVM: 	at $Proxy0.get(Unknown Source)
11.07.2007 12:35:11   HTTP JVM: 	at com.bec.db.na.Factory.select(Factory.java:121)
11.07.2007 12:35:11   HTTP JVM: 	at CheckCandidate.NotesMain(CheckCandidate.java:11)
11.07.2007 12:35:11   HTTP JVM: 	at lotus.domino.AgentBase.runNotes(Unknown Source)
11.07.2007 12:35:11   HTTP JVM: 	at lotus.domino.NotesThread.run(Unknown Source)
« Letzte Änderung: 12.07.07 - 12:27:24 von thorsten_w »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Domino 7 und Hibernate
« Antwort #1 am: 11.07.07 - 17:31:45 »
Das hab ich bisher noch nicht gewagt.
Hibernate macht ziemlich viel unter der Haube.
Und gerade in dem Bereich mit dem createProxy wo die NullPointer auftritt. Dort befindest du dich tief im Electronik-Dschungel. Hibernate erzeugt mit den asm-libraries dynamisch Proxy Klasssen.
Zitat
ASM is a Java bytecode manipulation framework. It can be used to dynamically generate stub classes or other proxy classes, directly in binary form, or to dynamically modify classes at load time, i.e., just before they are loaded into the Java Virtual Machine.
Vielleicht geht das nicht mit der IBM Java VM. Vielleicht kannst du das mal von "ausserhalb von Domino" das mal mit der IBM VM versuchen (in Eclipse wäre das einfach in deinen Projekteigenschaften die IBM VM für dieses Projekt verwenden).

Netter Versuch. Halte mich bitte auf dem laufenden.
Wo hast du die hbm.xml Dateien hingetan?

Stellt sich natürlich auch die Frage, ob das überhaupt sinnvoll ist. HibernateSession ist beansprucht bei der Instantiierung eine Menge Ressourcen. In Web-Anwendungen oder auch GUI-Clients werden die normal gecached. Das geht in Notes Agenten ja zwischen den Aufrufen nicht.
« Letzte Änderung: 11.07.07 - 18:06:04 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
Re: Domino 7 und Hibernate
« Antwort #2 am: 12.07.07 - 12:27:10 »
Hallo @all,

Danke dir Axel für die Info :)


Ich bin nach und nach die hbm files durchgegangen und konnte das Problem auf die many-to-one Beziehungen reduzieren.

Die Lösung ist: Für alle many-to-one muss lazy auf false gesetzt werden, dann funktioniert es :)

@Axel um auf deine Frage mit dem hbm's zurück zu kommen.
Ich hänge die Jar Datei mit an, diese liegt bei mir auf dem Server im Verzeichnis jvm/lib/ext.

Btw, alle Jar´s, die Hibernate benötigt natürlich auch.


PS: net schimpfen wegen den Kennwörtern :) Der MySQL Server läuft bei mir lokal.

Gruss Thorsten.


Code
12.07.2007 11:58:23   HTTP JVM: log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
12.07.2007 11:58:23   HTTP JVM: log4j:WARN Please initialize the log4j system properly.
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tcandidate0_.tcandidate_pk as tcandidate1_0_0_, tcandidate0_.salutation as salutation0_0_, tcandidate0_.title as title0_0_, tcandidate0_.firstname as firstname0_0_, tcandidate0_.lastname as lastname0_0_, tcandidate0_.birthname as birthname0_0_, tcandidate0_.birthdate as birthdate0_0_, tcandidate0_.birthplace as birthplace0_0_, tcandidate0_.street_houseno as street9_0_0_, tcandidate0_.postalcode as postalcode0_0_, tcandidate0_.city as city0_0_, tcandidate0_.
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tschool0_.tschool_pk as tschool1_8_0_, tschool0_.schoolcode as schoolcode8_0_, tschool0_.level as level8_0_ from tschool tschool0_ where tschool0_.tschool_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tcountry0_.tcountry_pk as tcountry1_2_0_, tcountry0_.countryname as countryn2_2_0_ from tcountry tcountry0_ where tcountry0_.tcountry_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tinfofrom0_.tinfofrom_pk as tinfofrom1_3_0_, tinfofrom0_.infofrom as infofrom3_0_ from tinfofrom tinfofrom0_ where tinfofrom0_.tinfofrom_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tmstatus0_.tmstatus_pk as tmstatus1_6_0_, tmstatus0_.maritalstatus as maritals2_6_0_ from tmstatus tmstatus0_ where tmstatus0_.tmstatus_pk=?
12.07.2007 11:58:26   HTTP JVM: com.bec.db.na.Tcandidate@3945e52e
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tcandidate0_.tcandidate_fk as tcandidate3_1_, tcandidate0_.tcandidatejob_pk as tcandida1_1_, tcandidate0_.tcandidatejob_pk as tcandida1_1_0_, tcandidate0_.passed as passed1_0_, tcandidate0_.tcandidate_fk as tcandidate3_1_0_, tcandidate0_.tjob_fk as tjob4_1_0_ from tcandidatejob tcandidate0_ where tcandidate0_.tcandidate_fk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tjob0_.tjob_pk as tjob1_4_0_, tjob0_.jobtitle as jobtitle4_0_, tjob0_.year_from as year3_4_0_, tjob0_.year_to as year4_4_0_, tjob0_.deutsch as deutsch4_0_, tjob0_.foreign_lang as foreign6_4_0_, tjob0_.math as math4_0_, tjob0_.wpg as wpg4_0_, tjob0_.physic as physic4_0_, tjob0_.chemistry as chemistry4_0_, tjob0_.apprenticeship as apprent11_4_0_, tjob0_.average as average4_0_, tjob0_.tschool_fk as tschool13_4_0_ from tjob tjob0_ where tjob0_.tjob_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tschool0_.tschool_pk as tschool1_8_0_, tschool0_.schoolcode as schoolcode8_0_, tschool0_.level as level8_0_ from tschool tschool0_ where tschool0_.tschool_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tjob0_.tjob_pk as tjob1_4_0_, tjob0_.jobtitle as jobtitle4_0_, tjob0_.year_from as year3_4_0_, tjob0_.year_to as year4_4_0_, tjob0_.deutsch as deutsch4_0_, tjob0_.foreign_lang as foreign6_4_0_, tjob0_.math as math4_0_, tjob0_.wpg as wpg4_0_, tjob0_.physic as physic4_0_, tjob0_.chemistry as chemistry4_0_, tjob0_.apprenticeship as apprent11_4_0_, tjob0_.average as average4_0_, tjob0_.tschool_fk as tschool13_4_0_ from tjob tjob0_ where tjob0_.tjob_pk=?
12.07.2007 11:58:26   HTTP JVM: Hibernate: select tschool0_.tschool_pk as tschool1_8_0_, tschool0_.schoolcode as schoolcode8_0_, tschool0_.level as level8_0_ from tschool tschool0_ where tschool0_.tschool_pk=?
12.07.2007 11:58:26   HTTP JVM: com.bec.db.na.Tcandidatejob@79a7e52e
12.07.2007 11:58:26   HTTP JVM: com.bec.db.na.Tcandidatejob@78f3a52e
« Letzte Änderung: 12.07.07 - 13:01:23 von thorsten_w »

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Domino 7 und Hibernate
« Antwort #3 am: 12.07.07 - 15:02:31 »
Interessant, dass das überhaupt geht.  :D
So ohne ist das "lazy=false" auch nicht.
Es kann sein, dass dadurch Unmengen an SQL select statements gegen die MySQL geschickt werden.
Ziemlich wahrscheinlich sogar. Sieht fast so aus.
Wieviele Datensätze befinden sich in der Datenbank?
Die Anzahl der selects im log sehen jedenfalls ein bischen beängstigend aus und das ist wirklich inperformant.
Besser sind da meist left join fetch Geschichten im HQL-Query wie hier:
Code
from Stocktransaction o left join fetch o.stock left join fetch o.buyer left join fetch o.seller where o.buyer= :user or o.seller= :user order by o.creation DESC
Damit können verschiedene Tabellen mit 1 select erschlagen werden.
Da sollte man bei Hibernate drauf achten.
Hab Stunden damit zugebracht, die Anzahl der Selects klein zu halten. Problematischer ist das bei n-1 Beziehungen (nicht 1-n).

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
Re: Domino 7 und Hibernate
« Antwort #4 am: 12.07.07 - 20:38:56 »
Danke dir Axel,

ich stecke grad in einem Projekt, einen Tomcat Server mit Domino zu koppeln.
siehe diesen Thread http://atnotes.de/index.php?topic=35367.0


Die Datenbank wird vom Tomcat Server "gefüttert". Aber wir müssen lesend von Domino aus zugreifen.

Danke für den Tip, ich werde mir das ganz bestimmt genauer angucken.

Gruß Thorsten

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Domino 7 und Hibernate
« Antwort #5 am: 12.07.07 - 21:27:55 »
Thorsten,

was ich hier schreibe kann auch verwirren. Wenn es genug Performance hat, lass es einfach so.
Ich wollte nur darauf hinweisen, dass Hibernate da ein paar Spezialitäten hat.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz