Maven Spring Wicket Hibernate Entegration - Presentation Transcript
Maven – Spring – Hibernate – Wicket Entegrasyonu
İzleyeceğimiz adımlar:
1. Maven kurulumu
2. Pom.xml'in oluşturulması, Spring Container'i için gerekli paket bağımlılık ayarlarının yapılması
3. Spring application-context.xml'in oluşturulması ve basit bir uygulama ile injection yönetiminin test
edilmesi
4. Hibernate paket bağımlılık ayarlarının yapılması ve Hibernate konfigurasyonunun gerçekleştirilmesi
5. Wicket için pom.xml üzerinde paket bağımlılık ayarlarının yapılması
6. Spring application-context.xml ve web.xml de Spring ve Wicket ayarlarının yapılması
Maven kurulumu için www.maven.org sitesinden maven paketini indirip açtıktan sonra içerisindeki bin
klasörününü de sistemin “Ortam Değişkenleri”ne tanımlayabilirsiniz.
mvn archetype:create -DgroupId=org.jtpd
-DartifactId=maven_spring_hibernate_wicket
-DpackageName=org.jtpd.mshw
komutunu kullanarak maven projemizi oluşturalım.
Oluşan pom.xml :
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>org.jtpd</groupId>
<artifactId>maven_spring_hibernate_wicket</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>maven_spring_hibernate_wicket</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
</project>
Oluşan dizin yapısı:
maven_spring_hibernate_wicket/
maven_spring_hibernate_wicket/pom.xml
/src/
/src/main/
/main/java
/src/test/
/test/java
Log4j, Spring gibi konfigurasyon dosyalarını koymak için /src/main/resources dizinini ve web dosyalarını
koymak için /src/main/webapp oluşturalım. Ve sonrasında pom.xml'i açıp aşağıdaki ayarlamaları yapalım.
<build>
<resources>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
Yukarıdaki konfigurasyonda, spring injectionlarının ve transaction tanımlarının annotationlar üzerinden
yapılacağı belirtilir.
Uygulama içerisindeki kullanımı
@Entity
@Table(name=”User”)
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
...
}
@Repository //Spring Annotation
@Transactional
public abstract GenericDAO<T> {
@Autowired //Spring Annotation
private SessionFactory sessionFactory;
public Session getSession(){
return sessionFactory.openSession();
}
public void save(T entity){
getSession().save(entity);
}
}
@Repository //Spring Annotation
@Transactional
public class UserDAO extends GenericDAO<User> {
...
}
@Service //Spring Annotation
@Transactional
public UserService {
@Autowired //Spring Annotation
private IuserDAO userDAO;
//Ornek
public void save(User user){
// Transaction Yönetimi spring tarafindan yapilmakta
userDAO.save(user);
}
}
Şu ana kadar yazmış olduğumuz kod örneğini ve konfigurasyonu test etmek için standalone çalışabilecek bir
kod çalışması yapalım. Öncelikle pom.xml içerisinde aşağıdaki konfigurasyonu yapalım.
<build>
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.jtpd.App</mainClass>
</configuration>
</plugin>
...
</plugins>
</build>
org.jtpd.App java dosyasını oluşturalım:
package org.jtpd;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class App {
public static void main(String[] args) {
try {
ApplicationContext factory = new
FileSystemXmlApplicationContext(
"targetclassesapplication-context.xml");
IUserService userService = (IUserService) factory
.getBean("userService");
userService.save(new User());
} catch (Exception e) {
e.printStackTrace();
}
}
}
App sınıfını komut satırından
mvn exec:java
komutu ile çalıştırabiliriz.
Herşey istediğimiz gibi ise şimdi geliştirdiğimiz yapıyı web uygulaması haline getirelim. Bunun için
pom.xml'de :
<dependencies>
...
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-spring</artifactId>
Web.xml de Spring ve Wicket çatılarına ait tanımlamaları yaptık.application-context.xml içerisinde de Wicket
uygulamasını tanımlamamız gerekiyor. Web.xml içerisinde WicketFilter konfigurasyonunda Wicket çatısına
aşağıdaki WebApplication sınıfını hangi factory üzerinden alacağımızı belirtiyoruz. Burada Wicket ile Spring
entegrasyonunu gerçekleştirmiş oluyoruz.
...
<bean id="wicketApplication" class="org.jtpd.web.JTPDWicketApplication" />
...
Şu ana kadar Maven, Spring, Hibernate ve Wicket entegrasyonunu bir şekilde gerçekleştirmiş
bulunmaktayız. Fakat Wicket bileşenlerinden Spring bean'lerine injection yöntemiyle erişmek için
JTPDWicketApplication sınıfının yapılandırıcı yordamlarında
addComponentInstantiationListener(new SpringComponentInjector(this));
çağırımlarını yapmamız gerekmektedir.
JTPDWicketApplication sınıfı :
package org.jtpd.web.JTPDWicketApplication;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
/**
* Application object for your web application.
* <p/>
* If you want to run this application without deploying, run the Start class.
*/
public class JTPDWicketApplication extends WebApplication {
/* (non-Javadoc)
* @see org.apache.wicket.protocol.http.WebApplication#init()
*/
@Override
protected void init() {
// TODO Auto-generated method stub
super.init();
addComponentInstantiationListener(new
SpringComponentInjector(this));
}
@Override
public Class<Index> getHomePage() {
return Index.class;
}
}
WebApplication, WebPage gibi Wicket bileşenleri içerisinden Spring bean'lerini kullanabilmek için
@SpringBean annotation'ını kullanmamız gerekmektedir. JTPDWebApplication içerisinden çağırılan
Index.class yani WebPage'den türeyen Index sınıfını oluşturalım ve buradan userService Spring Bean'ini
nasıl çağırdığımızı görelim.
package org.jtpd.web;
/**
* @author tdiler
*
*/
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.jtpd.core.IUserService;
import org.jtpd.core.User;
/**
* Homepage
*/
public class Index extends WebPage {
private static final long serialVersionUID = 1L;
@SpringBean
IUserService userService;
public Index(final PageParameters parameters) {
User user = new User();
userService.save(user);
add(new Label("label", "Kullanıcı kaydedildi."));
}
}
Wicket çatısında yazılan WebPage, Panel gibi bileşenler için markup tanımlarını içeren sınıf ile aynı isimde *.html
uzantılı dosyalar bulunmalıdır. Maven ile derleme ve paket oluşturma sonucunda bu html dosyalarınında
değerlendirilmesi için pom.xml’de şu eklemeyi yapacağız:
<resources>
...
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
...
</resources>
İlgili çalışmaya ait kodlara buradan ulaşabilirsiniz.
0 comments
Post a comment