Service dan Controller (Lanjutan Java Spring Hibernate Annotation) Bag. 1

Mei 31, 2010 pukul 3:52 am | Ditulis dalam java, programming | Tinggalkan komentar
Tag: , , ,

Okehh sesuai judul saya melanjutkan tutorial java sebelumnya tentang hibernate annotation dengan contoh kelas ruangan. Sekarang kita akan membuat paket service dan controller nya. Karena pada tutorial sebelumnya menggunakan project java application di netbeans. Sekarang dibuat memakai java web pada netbeans.

Beri nama proyeknya misalnya absensi. Kemaren sudah ada applicationContext.xml, sekarang kita tambahkan web.xml dan absensi-servlet.xml.

web.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″ xmlns=”http://java.sun.com/xml/ns/javaee&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”&gt;
<display-name>Absensi Online</display-name>
<description>Absensi Online Unila</description>

<!– Master configuration –>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!– config single user –>
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!– The front controller of this Spring Web application, responsible for handling all application requests –>
<servlet>
<servlet-name>absensi</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>sitemesh-velocity</servlet-name>
<servlet-class>com.opensymphony.module.sitemesh.velocity.VelocityDecoratorServlet</servlet-class>
</servlet>

<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

<servlet-mapping>
<servlet-name>sitemesh-velocity</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>absensi</servlet-name>
<url-pattern>/absensi/*</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

bean contextParam untuk memanggil path konfigurasi yang dipakai di applicationContext.xml. Bean nama servlet dapat diganti yang  berarti nama file servlet-nya pun harus diganti. Disini nama servlet adalah  “absensi”, maka filenya pun menjadi absensi-servlet.xml. Letak file absensi-servlet.xml ini berada di bawah direktori WEB-INF. Dalam satu aplikasi bisa jadi terdiri dari lebih dari satu servlet. Bean filter mapping, servlet mapping menjelaskan mengenai mapping (pemetaan) servlet. Servlet-name menandakan nama servlet yang akan di-mapping. Dan url-pattern menandakan pola url yang akan digunakan yaitu /absensi/. Tipe file yang biasa digunakan adalah .html ataupun .htm yang menyiratkan bahwa file selanjutnya yang akan dibuka bertipe .htm/.html.

absensi-servlet.xml

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans&#8221;
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xmlns:p=”http://www.springframework.org/schema/p&#8221;
xmlns:context=”http://www.springframework.org/schema/context&#8221;
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
“>

<context:component-scan base-package=”com.absensi.controller” />
<bean />

<bean id=”velocityConfig”
>
<property name=”resourceLoaderPath” value=”/WEB-INF/templates/velocity/” />
</bean>

<bean id=”viewResolver”
>
<property name=”basename” value=”views”/>
<property name=”order” value=”1″ />
<property name=”cache” value=”false” />
</bean>

<bean id=”velocityView”
>
<property name=”cache” value=”true” />
<property name=”prefix” value=”” />
<property name=”suffix” value=”.html” />
<property name=”exposeSpringMacroHelpers” value=”true”/>
<property name=”toolboxConfigLocation” value=”/WEB-INF/toolbox.xml”/>
<property name=”attributesMap”>

</property>
<property name=”order” value=”2″ />
</bean>

</beans>

Servlet absensi adalah servlet yang berfungsi untuk menerima HTTP request dan meneruskannya menuju proses selanjutnya berdasarkan mapping yang didefinisikan di dalamnya. Servlet absensi dideklarasikan keberadaannya di web.xml. (link ke web.xml). Pada absensi-servlet ini terdapat tag <context:component-scan base-package=”com.absensi.controller” /> yang digunakan untuk scan komponen yang berada di paket com.absensi.controller.

Konfigurasi bean velocityConfig yang diimplementasikan dengan objek untuk mengkonfigurasi dan mengatur sebuah VelocityEngine untuk pencarian otomatis pada lingkungan web. Cara yang paling mudah untuk konfigurasi ini menggunakan “resourceLoaderPath” dengan langsung mengambil path velocity di “/WEB-INF/templates/velocity/” .

Mungkin penjelasannya diatas kurang lengkap, silahkan cari di homep page nya Spring dan Hibernate.

Buat paket com.absensi.service.master dan buat kelas RuanganService.class

import com.absensi.model.master.Ruangan;
import java.util.List;

public interface RuanganService {
public Ruangan saveOrUpdate(Ruangan ruangan);
public void delete(Ruangan ruangan);
public List<Ruangan> getAllRuangan();
public Ruangan getRuanganById(String namaRuangan);
}

Buat paket com.absensi.service.master.impl dan buat kelas RuanganServiceImpl.class

@Repository(“ruanganService”)
@Transactional(readOnly=true)
public class RuanganServiceImpl implements RuanganService {
private RuanganDao ruanganDao;

@Autowired

public void setRuanganDao(RuanganDao ruanganDao) {
this.ruanganDao = ruanganDao;
}

@Transactional(readOnly=false)
public Ruangan saveOrUpdate(Ruangan ruangan) {
ruanganDao.saveOrUpdate(ruangan);
return ruangan;
}

@Transactional(readOnly=false)
public void delete(Ruangan ruangan) {
ruanganDao.delete(ruangan);
}

public List<Ruangan> getAllRuangan() {
return ruanganDao.getAllRuangan();
}

public Ruangan getRuanganById(String namaRuangan) {
return ruanganDao.getRuanganById(namaRuangan);
}

}

Anotasi @Transactional menandakan bahwa semua method dalam class ini akan dijalankan dalam transaksi database. Kita memberikan nilai readOnly=true pada deklarasi class, menandakan bahwa secara default transaksi hanya digunakan untuk mengambil data dari database. Pada method saveOrUpdate(), transaksi akan memanggil method update jika identifier sudah ada dan jika belum ada maka akan memanggil method save(). Untuk method saveOrUpdate() dan delete(), kita membutuhkan transaksi yang tidak readOnly agar bisa di tulis atau baca. Karena itu, kita override konfigurasi default dengan cara memberikan anotasi @Transactional(readOnly=false).

Sampai disini dulu biar gak pusing ngebacanya dan memahaminya. Saya harap teman-teman mencari juga referensi lain. Karena yang saya tulis hanya yang saya tau saja. Sama-sama belajar hehe. Kapan-kapan di lanjut lagi.

Iklan

Tinggalkan sebuah Komentar »

RSS feed for comments on this post. TrackBack URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Buat situs web atau blog gratis di WordPress.com.
Entries dan komentar feeds.

%d blogger menyukai ini: