Date post: | 26-Jun-2015 |
Category: |
Documents |
Upload: | tayfun-celik |
View: | 453 times |
Download: | 0 times |
Java ve Axis2 Framework ile WebService Yayınlamak
Herkese merhaba arkadaşlar bu yazıda sizlere Axis2 Webservice altyapısı ile nasıl webservice
yayınlanabildiğinden bahsedeceğim.
Axis2 Webservice Framework
Axis2 Wersevice Framework’u Apache tarafından geliştirilmiştir. Axis2 gücü ve esnekliği sayesinde
açık kaynak kodlu dünyanın vazgeçilmez Webservice Framework’u olmuştur. Axis2 ile birlikte SOAP
1.1, SOAP 1.2 ve REST tipinde servisler yayınlamak mümkündür. Bu üç tip iletişim protokolunu
destekler.
Axis2 Webservice Framework’u aşağıdaki linkten indirilebilir.
http://axis.apache.org/axis2/java/core/download.cgi
Axis2 Webservice Framework’u “Preferences” sekmesinden dosya dizini belirtilerek yüklenir. Başarı
ile yüklendi yazısı görüldüğünde kullanıma hazır anlamına gelmektedir.
Eclipse ile Dynamic Web Project
Eclipse üzerinde yeni bir dinamik web projesi aşağıdaki gibi açılabilir.
Ardından projeye ait ayarlamalara geçilir. Aşağıdaki ekranda olduğu gibi “Target runtime” ayarı
“Apache Tomcat 7” şeklinde ayarlanır. “Dynamic Web module Version” ayarı ise “2.5” olarak
setlenir.
Proje oluşturulduktan sonra aşağıdaki package yapısı kurulmalıdır.
1. “ebookservice”
1.1. “core”
1.2. “service”
“package” yapısı kurgulandıktan sonra, projeye sağ tıklayıp yeni bir “Source Folder” eklenir. “Source
Folder” ‘ lar Java tarafında kaynakların tutulduğu özel sistem klasörleridir.
“Source Folder” ismi “resources” olarak belirlenir. “resources” klasörü altına EclipseLink JPA’nın
ihtiyaç duyduğu Persistence XML dosyası konulacaktır. Ancak, JPA’nın bu dosyayı bulabilmesi için
META-INF klasörü altında olmalıdır. META-INF klasörü yaratılır ve XML dosyası oluşturulur.
“persistence.xml” dosyasının içeriği aşağıdaki gibidir.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="bookdb.mysql" transaction-
type="RESOURCE_LOCAL">
<class>ebookservice.core.Ebook</class>
<properties>
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/BookDB"/>
<property name="javax.persistence.jdbc.password"
value=""/>
<property name="javax.persistence.jdbc.user"
value="root"/>
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver"/>
<property name="eclipselink.ddl-generation"
value="create-tables" /> <!-- none / create-tables / drop-and-
create-tables -->
<property name="eclipselink.ddl-generation.output-
mode" value="database" />
</properties>
</persistence-unit>
</persistence>
“core” package içinde Entity sınıfları ve veri servisi yapan sınıf bulunacaktır. “service” package’ı içinde
ise Webservice yayını için kullanılacak olan sınıf yer alacaktır.
Ebook POJO Sınıfı
package ebookservice.core;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity(name="Ebook")
@Table(name="Tbl_EBook", schema="BookDB")
public class Ebook implements Serializable {
//Primary Key Kolonu
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="book_id")
private Long id;
//Tablonun kolonlari ...
@Column(name="book_name")
private String bookName;
@Column(name="book_author")
private String bookAuthor;
@Column(name="book_page_count")
private String bookPageCount;
public Ebook() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
public String getBookPageCount() {
return bookPageCount;
}
public void setBookPageCount(String bookPageCount) {
this.bookPageCount = bookPageCount;
}
}
Yukarıdaki Entity sınıfı “Tbl_Ebook” tablosundaki bir satır kaydın veri modelini temsil eder.
Veritabanındaki satır halindeki kayıtları alıp Entity listesi halinde bir üst katmana verecek olan servis
“DataService” olarak adalndırılır. Bir üst katman ise webservice sınıfını oluşturan ve veriyi web
üzerinden yayına açan sınıfın ta kendisidir.
package ebookservice.core;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
public class DataService {
public static List<Ebook> getEbooks() {
//Veritabani baglantisi kurar.
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory("bookdb.mysql");
EntityManager entityManager =
entityManagerFactory.createEntityManager();
//Native SQL veya JPQL yerine Criteria ile sorgulama
yapilir.
CriteriaBuilder criteriaBuilder =
entityManager.getCriteriaBuilder();
//CriteriaBuilder uzeirnden Query olusturulur.
CriteriaQuery<Ebook> criteriaQuery =
criteriaBuilder.createQuery(Ebook.class);
//Tablodaki kayitlar liste halinde dondurulur.
return
entityManager.createQuery(criteriaQuery).getResultList();
}
}
Webservice sınıfı aşağıdaki gibidir. Bu sınıf içindeki “getEbooks” metodu veriyi dışarıya açacak olan
metoddur.
package ebookservice.service;
import java.util.List;
import ebookservice.core.DataService;
import ebookservice.core.Ebook;
public class EbookService {
public List<Ebook> getEbooks() {
return DataService.getEbooks();
}
}
Eclipselink JPA için gerekli olan kütüphaneler WEB-INF klasörü altındaki “lib” isimli klasöre kopyalanır.
“EbookService” sınıfı üzerine sağ tıklayıp Webservice oluşturma işlemi başlatılır.
Daha sonra webservice’in hangi kütüphaneyi kullanacağı hangi Uygulama Sunucusuna göre konfigüre
edileceği aşağıdaki gibi ayarlanır.
Webservice oluşturma işlemi böylece tamamlanır. Ardından tarayıcı üzerinden webservice’in yayına
alınıp alınmadığını bir WSDL dosyası isteğinde bulunarak anlayabiliriz. Görüldüğü üzere aşağıdaki gibi
WSDL dosyası tarayıcıya yüklenmiştir.
Tarayıcı üzerinden webservice URL’ın sonuna çağrılmak istenen metodun ismi yazılır ve parametre
alıyor bu parametrelerde geçilir.
http://localhost:8080/EbookService/services/EbookService/getBooks
yukarıdaki URL çağrıldığında aşağıdaki gibi sonuç kümesi veritabanından alınıp liste halinde yayına
verilir.
Veritabanı tarafındaki kayıtlar aşağıdaki gibidir.
Umarım yararlı bir yazı olmuştur. Bir sonraki makalemde görüşmek dileğiyle ...
Batuhan Düzgün
Bilgisayar Mühendisi
Endüstri Mühendisi