Posts Tagged Entwicklung
How to get rid of “Could not resolve a persistence unit corresponding to the persistence-context-ref-name …” exceptions
Verfasst von Hendrik Busch unter Java am 1. Oktober 2008
One error that's been bugging me since I started out using Spring together with JPA in a Glassfish Application Server was an exception such as the following:
com.sun.enterprise.deployment.backend.IASDeploymentException: Could not resolve a persistence unit corresponding to the persistence-context-ref-name [de.icanmakeit.jpokerstats.jpa.dao.GameDao/_entityManager] in the scope of the module called [jpokerstats]. Please verify your application.
The core problem here is that the mentioned GameDao uses the @PersistenceContext annotation to obtain an EntityManager from the container (or in this case Spring) but there are multiple persistence units defined in the persistence.xml (for the live system, for testing, etc.) and the Glassfish is unable to decide to which of these persistence units the annotation should be mapped.
Since I wanted all of this to be managed by Spring, I didn't bother this error and worked around it by downgrading the web.xml from 2.5 to 2.4 which disabled the J5EE dependency injection mechanism in Glassfish and let Spring do its job. Simply specifying @PersistenceContext(unitName="myunit") wasn't an option, since the same classes use a different persistence unit during JUnit tests and on the live server and explicitly specifying a persistence unit name breaks the unit tests.
Since my "inner ITIL" requires a developing solution after finding a workaround, I searched around the net, read a couple of dozen forum posts and finally figured out a way to solve the problem (...which I could have done earlier if I only had read the complete J5EE specification... *yawn*).
When deploying a 2.5 web application to Glassfish, the server examines it for any dependency injection annotations such as @PersistenceContext. It generates a default name for any unnamed annotation by using the FQCN, appended with a slash and the name of the field/property that is the injection target. In the above example, this would result in the name de.icanmakeit.jpokerstats.jpa.dao.GameDao/_entityManager. The server then tries find a persistence unit reference for this name. If there is only one persistence unit defined, this one will be used, otherwise the deployment descriptors are checked for configuration hints.
So in order to solve this problem, we have to provided these configuration hints. Adding the following few lines to the web.xml solves the problem:
-
<persistence-context-ref>
-
<persistence-context-ref-name>de.icanmakeit.jpokerstats.jpa.dao.GameDao/_entityManager</persistence-context-ref-name>
-
<persistence-unit-name>pokerstats_live</persistence-unit-name>
-
</persistence-context-ref>
This approach has one major drawback: if your software contains more than one @PersistenceContext injection target, you have to define a persistence-context-ref for each occurrence. This situation can be avoided by naming each @PersistenceContext annotation and giving them all the same name (note: the correct attribute is name, not unitName):
-
@PersistenceContext(name="pokerstats")
-
private EntityManager _entityManager;
All injection target with the same annotation name can now share a single persistence-context-ref (you can also use this name to look up the persistence unit using JNDI):
-
<persistence-context-ref>
-
<persistence-context-ref-name>pokerstats</persistence-context-ref-name>
-
<persistence-unit-name>pokerstats_live</persistence-unit-name>
-
</persistence-context-ref>
Update: Below you'll find the relevant parts of the Spring configuration file for the example above. It defines two beans, the first one makes the datasource, that has been configured in the Glassfish Server, available for use in Spring. The second one defines the entity manager factory that Spring will use to support the JPA context.
-
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
-
<property name="jndiName" value="jdbc/__pokerstats"/>
-
</bean>
-
-
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
-
<property name="dataSource" ref="dataSource"/>
-
<property name="persistenceUnitName" value="pokerstats_live"/>
-
<property name="loadTimeWeaver">
-
<bean class="org.springframework.instrument.classloading.glassfish.GlassFishLoadTimeWeaver"/>
-
</property>
-
<property name="persistenceProvider">
-
<bean class="oracle.toplink.essentials.PersistenceProvider"/>
-
</property>
-
</bean>
ITIL: Alles klar!
Verfasst von Hendrik Busch unter Computer & Technik am 6. November 2007
Puh! Zwei Tage Marathon-Schulung sind vorbei, ich habe jetzt ein ITIL Foundation Zertifikat. Eigentlich geht die Schulung drei Tage mit Prüfung im Anschluss, wir haben heute aber den Beweis erbracht, dass es auch in zweien geht. Als Belohnung gibt es den abgebildeten Pin, ein nettes Teil zum Angeben (Zitat Markus: "Der bringt ja nicht mal Intelligenz +3. Kann ich den entzaubern?").
Ich bin jetzt voll klug, ich weiß Bescheid über CMDB, RWO, KPI, CSF, CMM, SLM, SLA, RfC, CI, SPOC, PIR, KE, CAB, FSC, OLA, UC, DSL, DHS, SLR, SPEC, SQP, CAT, SLAM, SREP, SIP, MTTR, MTBF, MTBSI, CFIA, FTA, CRAMM, SOA, TOP, ITSCM. Weisse Bescheid!
Gestaltung dynamischer Webseiten
Verfasst von Hendrik Busch unter Allgemein am 4. Februar 2007
Inhalt des des Kurses
Statische Webseiten sind out, das Web von heute gehört den dynamischen Inhalten. War es früher noch ausreichend, seine Seiten aus Vorlagen von FrontPage generieren zu lassen, so locken derartige Seiten keinen mehr hinter dem Ofen hervor.
Der Einsteig in die Welt dynamischer Webseiten ist denkbar einfach und dieser Kurs bietet mit insgesamt zwei Terminen einen Einblick in die Struktur dynamischer Seiten, erklärt den Grundgedanken und stellt die leicht zu erlernende Programmiersprache PHP vor, mit der auch Anfänger recht schnell erste Ergebnisse erzielen können.
Der Kurs erklärt anhand eines kleinen PHP-Gästebuchs, wie man PHP und HTML verbindet, wie man Daten aus Formularen ausliest, wie man Einträge in eine Datenbank sichert und von dort wieder lädt und wie man einigen Sicherheitsprobleme begegnen kann.
Voraussetzungen
Da es in der Vergangenheit gelegentlich zu Missverständnissen bezüglich Inhalten und notwendigen Vorkenntnissen kam, möchte ich die Gelegenheit nutzen, und hier kurz alles Wesentliche aufführen.
Für diesen Kurs sind Kenntnisse in HTML unabdingbar, denn PHP baut in nahezu allen Fällen auf einer HTML-Seite als Grundlage auf. Die HTML-Vorkenntnisse sollten nach Möglichkeit bereits den Umgang mit Formularen umfassen.
Ansonsten helfen Fähigkeiten wie Abstraktionsvermögen und Verständnis des "teile und herrsche"-Prinzips, das bei der Programmentwicklung häufig benutzt wird. Diese Dinge sind aber kein Muss, Interesse an den Dingen reicht auch, denn im Kurs ergeben sich genügend Möglichkeiten, Fragen zu stellen.
Eins allerdings vorweg: Der Kurs stellt lediglich eine Einführung in das Thema "Gestaltung dynamischer Webseiten mit PHP" dar, es handelt sich nicht um einen Programmierkurs. Niemand, der vor dem Kurs nicht programmieren konnte, wird es danach wirklich können, es geht mehr darum, einen Eindruck von den wichtigsten Punkten zu bekommen und sich später beim Selbststudium an die vorgestellten Themen zu erinnern.
Unterlagen
Es folgen die Unterlagen zu diesem Kurs. Es handelt sich um eine zweiteilige Präsentation der Grundlagen von PHP sowie um den Quellcode für das fertige PHP-Gästebuch. Die hier veröffentlichte Version kann sich von den jeweiligen Kursergebnissen unterscheiden, da es sich um eine Musterlösung handelt. Für die Lauffähigkeit muss noch die Konfiguration den entsprechenden Gegebenheiten angepasst werden.
- Gestaltung dynamischer Webseiten Teil 1 (PDF, 374 KB, Stand 17.07.2008)
- Quellcode der Beispiele für Teil 1 (ZIP, 3 KB, Stand 17.07.2008)
- Gestaltung dynamischer Webseiten Teil 2 (PDF, 184 KB)
- Quellcode der Musterlösung (ZIP, 8 KB)
Linksammlung
Dieser Abschnitt enthält einige Links rund um den Kurs zu interessanten Seiten.
- Webseite von PHP: http://www.php.net
- Webseite von XAMPP: http://www.apachefriends.org/de/xampp.html
- Webseite von PHPMyAdmin: http://www.phpmyadmin.net
- Webseite von MySQL: http://www.mysql.com
- MySQL 5.0 Referenzhandbuch: http://dev.mysql.com/doc/refman/5.0/en/
- SelfHTML HTML-Hilfe: http://de.selfhtml.org
- PSPad Editor: http://www.pspad.com/de/
- Weaverslave Editor: http://www.weaverslave.ws
- PHP User Group Dortmund: http://www.phpugdo.de
- HeidiSQL MySQL-Client: http://www.heidisql.com





