Wicket ve GAE

Google App Engine, geliştirdiğini wicket uygulamasını yüklemek adına en iyi alternatiflerden biri. Tabi bulut yapısında olduğu için kendine özgü kısıtlamalar barındırmaktadır. Fakat yeni geliştireceğiniz uygulamayı yayımlamak için biçilmiş kaftan. Wicket frameworkü ile geliştirilmiş bir uygulamanın Google App engine’e nasıl yükleneceğine bakalaım.

Gereksinimler

Uygulamamızı Maven kullanarak gerçekleyeceğiz. Bunun için Wicket quickstart Achetype’ını kullanacağız. Başka türlü archetype ile goolge app engine’e yükleme yapmanız kolaylaşacak olsa da bu kısım geliştirme sürecini etkilemeyeceği için ben alışık olduğum archetype’ı kullanmayı tercih ediyorum. Wicket ve ilgili archetype ile nasıl proje geliştireceğimizi önceki yazımda konuşmuştuk. Ondan dolayı wicket, maven gibi şeylerin kurulumundan bahsetmeyeceğim.

Google App Engine’e yükleme yapmak için öncelikle https://appengine.google.com/ adresinden kayıt yaptırmanız gerekiyor. Kayıt yaptırırken size projenizle ilgilide bilgiler sunacak. Bu bilgiler hem projenize erişim url’inizi belirleyeceği gibi hemde kodunuzu yüklerken kullanacağınız bilgileri de belirleyecektir. Kendi uygulamanızı yaratıp kendi bilgilerinizi almanız gerekmektedir.

Tüm bağımlılıklarımızı maven halletse bile, google app engini kodunuzu yüklerken kendi çalıştırabilir dosyasını kullanmanızı istemektedir. Eğer GAE archetype’ı kullanıyor olsaydık, yine bu çalıştırılabilir dosyaların yollarını maven’e göstermemiz gerekecekti. Tek farkı maven kendisi GAE’ine yükleme yaparken burada biz kendi kodumuzu kendimiz yükleyeceğiz. Bu çalıştırılabilir dosylar GAE SDK’sı ile birlikte gelmektedir. GAE SDK indirmek için tıklayın! Eğer GAE’ni benim yaptığım gibi sadece deployment serverı olarak kullanacaksanız Eclipse eklentisi indirmenize gerek kalmayacaktır.

Uygulama

Gereksinimlerinizi tamamladıktan sonra, maven ile bir wicket uygulaması yaratıyoruz. Wicket kısmında yapamız gereken maven üzerinden bir bağımlılık eklemek ve appengine-web.xml dosyasını yaratmak olacaktır.

Bagımlılıklar

Burada tek bağımlılığımız var oda, wicketstuff-gae-initializer kütüphanesi. Bu kütüphanede topu topu 4-5 sınıf olmasına rağmen GAE’ne bağlanmak için gerekli olan tüm işlemleri yapıyor. Temelde wicket objelerini serileştirdikten sonra belirli dosyalarda tutar. Fakat GAE dosya yapısına izin vermediği için bu şekilde tutamaz ve bu sebeptende GAE üzerinde çalışması mümkün olmaz. Yüklediğimiz kütüphane ise serileştirilen sınıfların GAE için uygun şekilde tutulmasını sağlamaktadır. Unutmayın ki GAE bir bulut yapısıdır ve katı sayılabilecek kuralları vardır. Örneğin aynı anda harici ikinci bir Thread bile çalıştıramazsınız[*]. Java’nın kendi kütüphanelerinden bile sadece bilirli sınıfları kabul etmektedir. Bu sınıfları buraya tıklayarak ulaşabilirsiniz.

Şimdi bağımlılıkların maven üzerinden nasıl ekleneceğine bakalım.

pom.xml

<dependencies>
...
<dependency>
<groupId>org.wicketstuff</groupId>
<artifactId>wicketstuff-gae-initializer</artifactId>
<version>${wicket.version}</version>
</dependency>
...
</dependencies>
...
<repositories>
...
<repository>
<id>wicketstuff-core-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
...
</repositories>

Burada dikkat etmeniz gereken, yeni yüklediğiniz sınıfın versiyonuyla kullandığınız wicket sınıflarının versiyonları aynı olmalıdır. Aksi halde bir hata ile karşılaşabilirsiniz.

appengine-web.xml Dosyasının Eklenmesi

Sırada sadece appengine-web.xml dosyasının eklenmesi kaldı. Bu dosyayı projenize ait web.xml dosyasının yaına oluşturuyorsunuz. İçerisini ise aşağıdaki gibi dolduyorsunuz.


<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>[Buraya Application Adı gelecek]</application>
<version>[Buraya Version Gelecek ilk yükleme için tabikide 1]</version>
<sessions-enabled>true</sessions-enabled>

<!-- Configure java.util.logging -->
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/>
</system-properties>

</appengine-web-app>

GAE Uygulamanın Yüklenmesi

Burdan sonra artık kodumuzu GAE’e yükleyebiliriz. Bunun için öncelikle pom.xml dosyamızın olduğu klasöre gidiyoruz. Burada yapmamız gereken şey kodumuzu derlemek. Bunun için aşağıdaki komutu çalıştırıyoruz.

  • mvn package

Projemiz doğru şekilde derlendikten sonra, aynı klasör içerisinde target isminde bir klasör oluşacaktır. Bu klasörde, *.war dosyamızı ve bu dosyanın arşivlenmemiş halde yani klasör halindeki versiyonunu göreceksiniz. Bunlar haricinde test sonuçlarınız gibi daha bir çok bilgi target klasörünün altında mevcut. Fakat bizi ilgilendiren kısım klasör halindeki derlenmiş projeniz. Bu klasörün yolunu alıyoruz ve buna DERLENMİŞ_PROJE_YOLU diyelim. Yani <pom.xml yolu>/target/projeadı-0.o.1-snapshot şeklinde bir yol elde ediyoruz.

Şimdi ise daha önce indirdiğimiz ve istediğimiz bir yere çıkardığımız GAE SDK’sının ana klasörüne geliyoruz. Buradan ise bin klasörüne geliyoruz. Yani <arşiv yolu>/appengine-java-sdk-<version>/bin klasörüne geliyoruz. Burada bir komut penceresi açıp aşağıdaki komutu çalıştırıyoruz.

  • appcfg update DERLENMİŞ_PROJE_YOLU

Bu şekilde çalıştırdığımızda, eğer appengine-web.xml dosyasında uygulama adını doğru girdiysek, sorunsuz bir şekilde uygulamamızı GAE üzerinde görebiliriz.

Eğer google üzerinde güvenliğinize dikkat ediyorsanız, muhtemelen şifre sorunu ile karşılaşacaksınız. Proje gönderirken size uygulama bazında şifre sorarsa uygulama bazlı şifre almanız gerekecektir.

End Of Line