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