Tapestry 5 mit GORM und Maven
1. Tapestry einrichten
Aus Gründen der Einfachheit starte ich mit dem Tapestry archetype der folgendermaßen erstellt wergden kann
mvn archetype:generate -DarchetypeCatalog=http://tapestry.formos.com/maven-repository
und ich setze grundlegende Fähigkeiten im Umgang mit Maven und Tapestry voraus. Ich benutze den neuesten Snapshot (zur Zeit dieses Beitrags 5.1.0.1-SNAPSHOT).
Da die Gorm-Konfiguration von Spring abhängt muss man Tapestry mit Spring einrichten. In der pom.xml folgende dependency hinzufügen:
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-spring</artifactId>
<version>${tapestry-release-version}</version>
</dependency>und die <tapestry-release-version> property anpassen.
In web.xml folgendes hinzufügen:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/appContext-main.xml</param-value> </context-param>
I halte meine Spring Konfiguration normalerweise in /WEB-INF/classes , aber natürlich kann jeder sein bevorzugtes Verzeichnis wählen, dann einfach nur den Pfad in obigem Eintrag anpassen.
Ebenso in der web.xml den <filter> Eintrag von Tapestry anpassen:
<filter> <filter-name>app</filter-name> <filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class> </filter>
Weitergehende Informationen zur Einrichtung der Tapestry-Spring Integration findet man hier für den neuesten Snapshot und hier ffür die letzte stabile version. Da sich die Spring Integration mit Tapestry 5.1. erheblich geändert hat, würde ich die Version 5.1 empfehlen.
2. Spring einrichten
Wenn Sie dem obigen Beispiel gefolgt sind, erstellen Sie einfach die Datei appContext-main.xml im Verzeichnis WEB-INF/classes und kopieren Sie folgenden Inhalt dort hinein. Bitte beachten Sie, dass die de.pija.tgorm in der Gorm namespace Konfiguration durch <yourpackage>, also die Paketstruktur ersetzen müssen, die Sie bei der Erstellung des Tapestry archetype gewählt haben.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:gorm="http://grails.org/schema/gorm" xmlns:util="http://www.springframework.org/schema/util" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://grails.org/schema/gorm http://grails.org/schema/gorm/gorm.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="jdbc:hsqldb:mem:tapestryDB"/> <property name="password" value=""/> <property name="username" value="sa"/> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> </bean> <!-- - Message source for this context, loaded from localized "messages_xx" files. --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="messages"/> </bean> <gorm:sessionFactory base-package="de.pija.tgorm" data-source-ref="dataSource" message-source-ref="messageSource"> <property name="hibernateProperties"> <util:map> <entry key="hibernate.hbm2ddl.auto" value="update"/> </util:map> </property> </gorm:sessionFactory> <!-- Activates various annotations to be detected in bean classes: Spring's @Required and @Autowired, as well as JSR 250's @Resource. --> <context:annotation-config/> <!-- Instruct Spring to perform declarative transaction management automatically on annotated classes. --> <tx:annotation-driven/> </beans>
3. Gorm einrichten
In der pom.xml benötigen wir noch einige weitere dependencies. Spring natürlich, aber auch die HSQL Datenbank, die in der appContext-main.xml referenziert wird und die Groovy dependencies.
<dependencies>
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-core</artifactId>
<version>${tapestry-release-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-spring</artifactId>
<version>${tapestry-release-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-test</artifactId>
<version>${tapestry-release-version}</version>
<scope>test</scope>
</dependency>
<!-- Gorm dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.0.1B_spec</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.grails</groupId>
<artifactId>grails-bootstrap</artifactId>
<version>1.1-RC2</version>
</dependency>
<dependency>
<groupId>org.grails</groupId>
<artifactId>grails-gorm</artifactId>
<version>1.1-RC2</version>
</dependency>
<dependency>
<groupId>org.grails</groupId>
<artifactId>grails-web</artifactId>
<version>1.1-RC2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.3.0.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-commons-annotations</artifactId>
<version>3.3.0.ga</version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.8.0.GA</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.4</version>
<scope>test</scope>
</dependency>
<!-- Just to be sure -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
Darüber hinaus benötogen wir auch noch folgenes repository und plugin repository falls noch nicht vorhanden:
<repositories>
[...]
<repository>
<id>codehaus-snapshots</id>
<url>http://snapshots.repository.codehaus.org</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
[...]
<pluginRepository>
<id>codehaus-plugin-snapshots</id>
<url>http://snapshots.repository.codehaus.org</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
</pluginRepositories>
Und nun die letzte und wichtigste Konfiguration: das GMaven plugin Als Grundeinstellung kompiliert es alle Groovy-Dateien unter /src/main/groovy, aber da ich alle meine Quelldateien unter /src/main/java halten mächte, habe ich die <configuration> Abteilung in die Plugin-Konfiguration eingetragen.
<plugins>
[...]
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.0-rc-5-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy.maven.runtime</groupId>
<artifactId>gmaven-runtime-1.6</artifactId>
<version>1.0-rc-5-SNAPSHOT</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<fileset>
<directory>${pom.basedir}/src/main/java</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</fileset>
</sources>
</configuration>
</plugin>
</plugins>
Zum Testen kann man jetzt noch folgende Dateien erstellen::
In src/main/java/<yourpackage>/entities die Datei TestBean.groovy. Bitte beachten, dass die @Entity Annotation NICHT diejenige aus der JPA ist, sondern aus dem grails.persistence package!
import grails.persistence.Entity
@Entity
public class TestBean
{
String name
String text
}
In src/main/java/<yourpackage>/pages die Datei TestPage.groovy:
import <yourpackage>.entities.TestBean
import org.apache.tapestry5.annotations.Property
import org.apache.tapestry5.ioc.annotations.Inject
import org.slf4j.Logger
public class TestPage
{
@Inject
private Logger log
@Property
private List<TestBean> testBeans
Object setupRender()
{
testBeans = TestBean.list()
if (testBeans == null || testBeans.size() == 0)
{
new TestBean(name: "Test1", text: "Text 1").save()
testBeans = TestBean.list()
}
return null
}
}
Und zuguterletzt das template TestPage.tml im WEB-INF Verzeichnis:
<html t:type="layout" title="TGorm TestPage" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" xmlns:p="tapestry:parameter"> <h1>Gorm Test</h1> <t:grid t:id="testBeanGrid" source="testBeans"/> </html>
Wenn Sie nun die Anwendung mit mvn jetty:run starten und nach http://localhost:8080/<yourcontext>/TestPage browsen, sollten Sie das Grid mit einem Eintrag sehen.
Viel Spaß!
- Weblog von Admin
- Anmelden oder Registrieren um Kommentare zu schreiben
- English











