persistence.xml meta-inf hibernate spring jpa maven

isaias_b

Grünschnabel
hallo leute,

ich versuch mich gerade an einer kleineren anwendung begleitend zu der aus dem buch "hibernate und die java persistence api", leider sind die sourcen aus dem buch auf der angegebenen seite (hibernatebuch.de) nicht mehr anzutreffen und die code fragmente aus dem buch nicht vollständig bzw. der kontext nicht immer ganz ersichtlich.
wenn jemand die sourcen von dem original hat und bereitstellen könnte, das wäre göttlich, oder n funktionierender link :) wär auch gut.

Sonst bleibt da noch die möglichkeit mir direkt bei dem problem zu helfen, hab da heute und gestern mit nem kumpel schon drüber gegrübelt/gegoogelt, und überall steht dieselbe info wie im buch, ich vermute langsam ^^ das das zu hoch für mich sein muss, oder so einfach, das man hinterher dafür ohrfeigen sollte.

mein problem:
in der persistence.xml soll eine entityManagerFactory erzeugt werden, diese soll im META-INF des classpaths liegen allerdings harpert es hier...
was ist damit genau gemeint? ich hab ein maven-quickstart archetype unter verwendung des maven2eclipse plugins erzeugt und alle notwendigen dependencies hinzugefügt.
allerdings weiß ich nicht was genau in die persistence.xml hineingehört, noch wo sie genau hinsoll, oder vielmehr wo die meta-inf in einem maven projekt hinmuss oder ob maven noch zusätzlicher konfiguration bedarf...

im buch fängt der codeschnipsel so an, ich glaube das in der datei noch iwas vorangestellt werden müsste son <?xml> tag oder so
Code:
<persistence ...> <!-- was ist denn mit den .... hier gemeint? -->
	<persistence-unit name="punit" transaction-type="RESOURCE_LOCAL">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<properties>
			<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.connection.username" value="booksonline" />
			<property name="hibernate.connection.password" value="db" />
			<property name="hibernate.connection.url"
				value="jdbc:postgresql://localhost:5432/booksonline" />
		</properties>
	</persistence-unit>
</persistence>
vorher hab ich wie im buch beschrieben hibernate mittels hibernate.cfg.xml gefüttert mit denselben parametern, nun heißt es man könnte die settings dort iwie wohl durch die der persistence.xml ersetzen, müssten dann nicht aber noch die mapping infos darein:confused:

dann hab ich noch 2 weitere codeschnippsel die vermutlich beide in dieselbe datei gehören
Code:
<beans>
	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="punit" />
	</bean>
</beans>

Code:
<beans>
	<bean id="genericDao" class="de.elbs.ics.dao.GenericDaoImpl"
		abstract="true">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	<bean id="userDao" class="de.elbs.ics.dao.UserDaoImpl" parent="genericDao" />
	<!-- weitere konkrete daos die aber noch nicht implementiert sind und daher 
		noch fehlen -->
</beans>
von dem letzten codefragment wird behauptet das es in die booksonline-dao.xml gehört.

ich habe ein kleines spring dependency injection hallo welt programm nachvollzogen dort musste ich explizit den zugriff auf die XmlBeanFactory mit der passenden resource von hand vornehmen, hat super geklappt!
In den folgenden codeschnippseln taucht leider kein expliziter verweis auf booksonline-dao.xml auf daher hab ich nich so recht die peilung ob ich es nun selber tun soll oder ob das beispiel auf irgendeine konfiguration zurückgreift, in der verlangt wird das eine booksonline-dao.xml an einer festgelegten stelle existieren muss.
bei dem hibernate jpa krams muss die datei ja einen besonderen namen haben und an einer bestimmten stelle liegen... narf! :(
wie muss mein projekt ausschauen damits klappt.

ich hab noch ne generelle frage zu dem meta-inf dir.
das kommt doch erst in der gepackten jar zum tragen, wie kann ich angenommen ich hab das richtig verstanden meine software ohne sie zu packen dann vorher in eclipse testen, wenn teile der sourcen/resourcen in ordnern liegen die erst beim packen verfügbar sind?

ich hoff es gibt jemanden der geduldig genug ist das bis hierher zu lesen :D :D

vielen dank schon mal
greez isaias
 

isaias_b

Grünschnabel
huhu nochma,

ich bin nu n stück weiter gekommen,

mein META-INF dir ist nun im src/main/java/META-INF dir gelandet

ich hab einfach mal ne EntityManagerFactory und n EntityManager versucht zu erzeugen
dann hatter iwann nach ausschlussverfahren gemeckert das die persistence.xml inkorrekt wär.
:) dann hab ich dran rumgebastelt bis das aufgehört hat...
dabei hab ich rausgefunden das das eine codefragment bestehend aus der "entityManagerFactory" wohl nicht in die persistence.xml gehört... ^^

ich kann mein eigentliches problem jetzt ja mal weiter verfeinern:
meine DAO implementierung erbt von JpaDaoSupport und delegiert die dao operationen an ein JpaTemplate weiter allerdings ist es ihm bisher nicht möglich gewesen dieses zu erzeugen und dieser delegate führt dann zu einer null pointer ex. WEIL das entityManagerFactory feld nicht gesetzt ist... das hab ich nun selbst getan, und es funktioniert. ich bin mir nich tsich ob das nun so die eleganteste lösung ist oder wie der author des beispiels sich das an der stelle gedacht hat, aber fürs erste tuts nun ersma was es soll.

vielleicht kann ja mal jemand sagen ob ich das in etwa richtig gelöst hab.
ich hab eine hilfsklasse angelegt die ein singleton EntityManagerFactory object erzeugt.
und in meiner Dao implementierung wird in jedem neu erzeugten Dao auf die JpaDaoSupport methode "setEntityManagerFactory(...)" zugegriffen und das aus der hilfsklasse kommende objekt übergeben. dann hab ich für die anwendung nur ein EMF das ich am ende der anwendung noch schließen müsste.

danke nochmal,
oft reicht es ^^ wenn man mit jemandem über das problem spricht um zu merken wo der hase im pfeffer begraben ist oder so ähnlich ;)

greez isaias
 
Zuletzt bearbeitet: