FAQ

From Salespoint 5
(Difference between revisions)
Jump to: navigation, search
(Spring MVC)
(Spring)
 
(9 intermediate revisions by one user not shown)
Line 21: Line 21:
  
  
'''Ich will eine Liste haben, viele Methoden im Framework geben aber ein Iterable zurück, muss ich die wirklich manuell zu einer Liste konvertieren?'''<br />
+
'''Ich will eine Liste haben, viele Methoden im Framework geben aber ein Iterable<T> zurück, muss ich die wirklich manuell zu einer Liste konvertieren?'''<br />
 
Nein, es gibt mehrere Hilfsmethoden dafür Iterables.asList(), Iterables.asSet() und Iterables.asArray().
 
Nein, es gibt mehrere Hilfsmethoden dafür Iterables.asList(), Iterables.asSet() und Iterables.asArray().
  
Line 31: Line 31:
 
= Web =
 
= Web =
  
== Spring MVC ==
+
== Spring ==
 +
''' Ich bekomme die Meldung "absent line number information" beim starten unter "Debug as"? ''' <br />
 +
Ignorieren, die Breakpoints sollten trotzdem getroffen werden.
  
== JSTL ==
+
== Thymeleaf ==
'''Der JSTL forEach-Tag funktioniert nicht mit den im Framework zurückgegebenen Iterable<T>.'''<br />
+
Der JSTL Tag kann nicht mit java.lang.Iterable<T> umgehen, der forEach-Tag in der Salespoint Taglib löst dieses Problem.
+
 
+
 
+
'''Gibt es eine Übersicht über alle JSTL Tags?'''<br />
+
Eine sehr magere Javadoc ist hier zu finden: http://download.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/
+
  
 
= JPA =
 
= JPA =
  
 
'''Wo finde ich Informtionen zu JPA?'''<br />
 
'''Wo finde ich Informtionen zu JPA?'''<br />
Tutorial: http://download.oracle.com/javaee/6/tutorial/doc/bnbpy.html
+
[[External Documentation]]
Javadoc: http://download.oracle.com/javaee/6/api/javax/persistence/package-summary.html<br />
+
 
+
 
+
'''Wie erstelle ich Tabellen für meine Entities?'''<br />
+
Rechtsklick auf das Projekt-> JPA Tools -> Generate Tables from Entities
+
 
+
 
+
'''Muss ich Tabellen für meine Entities erstellen ?'''<br />
+
Nicht unbedingt, das kann EclipseLink auch automatisch beim Start machen, was sinnvoller ist, dazu muss die persistence.xml unter dem Knoten <properties> folgende Zeile ergänzt werden <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
+
 
+
 
+
'''Wo kann man die erstellten Tabellen betrachten?'''<br />
+
JPA View -> Datasource Explorer -> aktive Connection -> Schemas -> APP -> Tables
+
 
+
 
+
'''Es werden nicht für alle Entities Datenbanktabellen erstellt?'''<br />
+
Entity Klassen müssen in der persistence.xml gelistet werden, dies macht Eclipse automatisch mit Rechtsklick auf die xml -> “Synchronize Class List”
+
 
+
 
+
'''Es werden nicht für alle Entites Tabellen erstellt, obwohl diese in der xml gelistet sind?'''<br />
+
Stimmt die Datenbank Connection mit der aus der persistence.xml (javax.persistence.jdbc.url) überein?
+
 
+
  
 
'''Exception: “Class XYZ is not a known Entity Type”'''<br />
 
'''Exception: “Class XYZ is not a known Entity Type”'''<br />
 
Besitzt XYZ eine @Entity Annotation?
 
Besitzt XYZ eine @Entity Annotation?
 
 
'''Exception: "No Persistence provider for EntityManager named $Name"'''<br />
 
Stimmt der $Name der persistence-unit in der persistence.xml mit dem Namen zum call von Database.INSTANCE.initializeEntityManagerFactory($Name) überein?
 
 
 
'''Exception: [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException'''<br />
 
'''Internal Exception: java.sql.SQLException: Failed to start database '$PATH' with class loader WebappClassLoader'''<br />
 
'''Error Code: 40000'''<br />
 
Besteht schon eine Verbindung zur Datenbank?<br />
 
Lösung: JPA View -> Datasource Explorer ->Database Connections -> disconnect
 
 
  
 
'''Meine eigene Entity Klasse enthält eine Joda DateTime, dies kann nicht gespeichert werden?'''<br />
 
'''Meine eigene Entity Klasse enthält eine Joda DateTime, dies kann nicht gespeichert werden?'''<br />
 
JPA kann nur mit dem alten java.util.Date/Calendar umgehen, benutzt das als Attribut in der Klasse, wrapt es aber bei Herausgabe in ein Joda DateTime.
 
JPA kann nur mit dem alten java.util.Date/Calendar umgehen, benutzt das als Attribut in der Klasse, wrapt es aber bei Herausgabe in ein Joda DateTime.
 
 
'''Es gibt Probleme beim Einstellen einer neuen DB Verbindung in Eclipse, genauer gesagt beim wählen der derby.jar "A driver already exists with that name. Please provide a unique driver name."'''<br />
 
Lösung:Window -> Preferences -> Data Management -> Connectivity -> Driver Definitions -> vorhandene derby.jar löschen
 
 
= Eclipse =
 
 
'''Wie ändere ich den Standardbrowser?'''<br />
 
In der Menüleiste Window --> Preferences wählen. In der linken Spalte des Fensters den ersten Punkt (General) aufklappen, dann unter "Web Browser" die entsprechenden Einstellungen vornehmen.
 
 
 
'''Das Projekt hat keine Einstellungen für JPA/Web.'''<br />
 
Rechtsklick auf das Projekt --> Properties.
 
Dort in der linken Spalte "Project Facets" auswählen, dann "Dynamic Web Module", "Java" und "JPA" aktivieren.
 
Dabei kann ein Fehler von JPA kommen. Dann hilft es, die JPA-Facette einzeln nach den anderen zu aktivieren.
 
 
 
'''Ich finde den Menüpunkt "Run As --> Run on Server" nicht'''<br />
 
Siehe "Das Projekt hat keine Einstellungen für JPA/Web."
 
 
= JUnit =
 
 
''' Exception: java.lang.RuntimeException: Please initialize persistence unit first. For exampe by adding "PersistenceUnitInitializer" as bean in dispatch-servlet.xml '''
 
 
In jede Testklasse:
 
<syntaxhighlight lang="Java">
 
@BeforeClass
 
public static void beforeClass() {
 
Database.INSTANCE.initializeEntityManagerFactory(persistence-unit name, der steht in der persistence.xml);
 
}
 
</syntaxhighlight>
 
 
 
''' Exception: An exception was thrown while searching for persistence archives with ClassLoader: ....... Caused by: java.io.FileNotFoundException: C:\Users\Paul\workspace_salespoint\WorldDominationProject\build\lib\salespoint5.2.jar (Das System kann den angegebenen Pfad nicht finden) '''
 
 
Durch die relative Pfadangabe zur salespoint.jar in der persistence.xml sucht der Junit/Eclipse Testrunner im falschen Verzeichnis.
 
Einfach die salespoint.jar ins passende Verzeichnis kopieren.
 
 
 
'''Die Tests werden abgebrochen, obwohl eine Transaktion noch offen ist.'''<br />
 
 
Du hast wahrscheinlich einen Test der eine Exception erwartet. In diesem wird zum Ändern von Daten in der Datenbank eine Transaktion geöffnet. Sobald JUnit die Exception erhält wird der nächste Test gestartet und der Befehl zum Schließen wird nicht erreicht.<br />
 
Lösung: Überprüfe nach jedem Test (junit “@after”-Annotation) ob die Transaktionen deiner Entitymanager im Test noch offen sind [entititymanager.getTransaciton().isActive()] und starte gegebenfalls einen rollback [entititymanager.getTransaciton().rollback()].
 
 
= Tutorials =
 
'''Im importierten Guestbook erhalte ich folgende Fehlermeldung: The method compareTo(GuestbookEntry) of type GuestbookEntry must override a superclass method GuestbookEntry.java /guestbook/src/guestbook/model line 38 Java Problem'''<br />
 
Properties -> Project Facets -> Java auf mindestens 1.6 stellen
 

Latest revision as of 23:51, 4 November 2013

Contents

Core

Warum braucht Salespoint Java 1.7
Warum nicht? Außerdem nutzt Salespoint einige Features und Klassen die es nur in 1.7 gibt.


Wieso hat das Framework Feature XYZ nicht?
Weil wir wahrscheinlich nicht daran gedacht haben oder keine Zeit mehr hatten, Featurewünsche dürfen im Forum abgegeben werden, noch bessere wäre eine fertige Implementierung des Features, welches wir dann, wenn es sinnvoll ist, einbinden können. ;)


Ist es möglich mehrere verschiedene Inventare (Kataloge) vom selben Typ zu verwalten?
Nein, dies ist eine Einschränkung durch JPA, Inventare vom selben Typ zeigen auf die selbe Tabelle in der Datenbank.


Wieso sind so viele Konstruktoren @Deprecated?
Parameterlose, nicht private Konstruktoren sind zwingend notwending für JPA, diese sollten nicht genutzt werden. Wenn eine Klasse einen deprecated Konstruktor besitzt, gibt es mindestens noch einen anderen der genutzt werden sollte.


Wieso sind so einige Methoden final und damit nicht überschreibar?
Weil wir keinen Grund sahen diese nicht final zu machen, aber wir lassen uns gerne überzeugen dies zu ändern (via Forum).


Ich will eine Liste haben, viele Methoden im Framework geben aber ein Iterable<T> zurück, muss ich die wirklich manuell zu einer Liste konvertieren?
Nein, es gibt mehrere Hilfsmethoden dafür Iterables.asList(), Iterables.asSet() und Iterables.asArray().


Warum geben denn viele Methoden ein Iterable<T> statt einer Collection<T> oder List<T> zurück?
Weil man Collections modifizieren kann, Iterables dagegen nicht. Falls man also z.B. den Inhalt eines Kataloges verändern will sollte man die dazu gehörigen Methoden wie add oder remove verwenden.

Web

Spring

Ich bekomme die Meldung "absent line number information" beim starten unter "Debug as"?
Ignorieren, die Breakpoints sollten trotzdem getroffen werden.

Thymeleaf

JPA

Wo finde ich Informtionen zu JPA?
External Documentation

Exception: “Class XYZ is not a known Entity Type”
Besitzt XYZ eine @Entity Annotation?

Meine eigene Entity Klasse enthält eine Joda DateTime, dies kann nicht gespeichert werden?
JPA kann nur mit dem alten java.util.Date/Calendar umgehen, benutzt das als Attribut in der Klasse, wrapt es aber bei Herausgabe in ein Joda DateTime.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox