SprinMVC ve MongoDB 1: Projenin Hazırlanması

SpringMVC ve MongoDB

Daha önceki yazılarda Rest servislerinin nasıl geliştirilebileceği üzerine konuşmuştuk. Bu sefer RDB yerine NoSQL, JPA yerine Spring Data ve Jersey yerine de SpringMVC kullanacağız. Ek olarak en temel halindeki rest servis mimarisini değil daha gelişmiş bir Rest servis mimarisini kullanacağız. Fakat bu servis mimarisi Hateoas kadar gelişmiş olmayacak. Gelişmişlik açısından Hateoas’ın bir tık altını hedef alacağız. Ayrıca uygulamamızı cloud servislere deploy edeceğiz. Cloud Servis sağlayıcısı olarak heroku kullanacağız. Projenin paket yönetimi yine maven yönetecek, test ve canlı ortamımızda servlet container olarak Jetty kullanacağız.

Yazı dizisinin özeti aşağıdaki gibidir.

SprinMVC ve MongoDB 1: Projenin Hazırlanması

Öncelikle projemizi ve cloud servislerimizi hazırlayalım. Amacım herokunun ve diğer cloud servislerinin nasıl kullanılacağını göstermek. Tutorial çerçevesinde, temel Spring ve Java bilginizin olduğunu varsayacağım. Aynı şekilde heroku sistemine kayıt yaptırdığınızı ve komut satırı araçlarını yüklediğinizi varsayacağım. Benim komut satırından anlattığım herşeyi online web uygulaması üzerinden yapmakta mümkün tabi.

Projenin Yaratılması

Şimdi öncelikle projemizi oluşturalım. Basit bir projemiz olacak. Temel olarak sadece bir User nesnemiz olacak. Servisler üzeirnden bu User nesnesinde CRUD(Create, Read, Update ve Delete) işlemleri yapılabilecek. Bu sebepten projemizin adı user-application olsun.

Maven ile projeyi oluştururken aşağıdaki adımları izleyebilirsiniz. Genelde diğer tutoriallarda yaptığım gibi önce Maven ve komut satırı araçlarından ilerleyip sonrasında IDE’ye geçiş yapacağım.spring-mongo-heroku

  • mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
  • Group Id olarak, com.bahadirakin
  • ArtifactId olarak user-application
  • Paket adı olarak ise com.bahadirakin

Projemiz oluştuğuna göre, bağımlılıkların tanımlanması gerekiyor. Bunun için pom.xml dosyasının içeriğini aşağıdaki gibi yapıyoruz.

pom.xml

Daha sonrasında mvn clean install diyerek pom.xml içerisinde bir hata yapıp yapmadığınızı kontrol edebilirsiniz. Burada proje genelindeki tüm bağımlılıkları tanımladık. Bundan sonra başka bir tanımlama yapmamıza gerek olmayacak.

 Genel Proje Ayarları

Herbir alt modül her ne kadar kendi içerisinde ayarlanacak olsa da genel ayarlamaları burada belirtmekte fayda var. Öneğin SpingMVC anlatırken SpringMVC ile ilgili ayarlara ya da Spring Data anlatırken Spring Data ile ilgili ayarlara değinilecektir. Fakat alt modüllerin ayarlamaları bu bölümde yapılanlar dikkate alınarak yapılacaktır.

Öncelikle web.xml dosyamızı ayarlayalım.

web.xml

Genel spring ayarlamalarını belirttik. Şimdi ise web.xml içerisinde spring ayarlarını yaparken belirttiğimiz applicationContext.xml dosyasını yaratlım. Bunun için src/main/resources dizinin altına applicationContext.xml isminde bir dosya oluşturuyoruz ve içeriğini aşağıdaki gibi yapıyoruz.

applicationContext.xml

Taslak halindeki ayarlamalarımız da yaptık. Ayarlarımızın doğru olup olmadığını anlamak için önce “mvn clean install jetty:run” komutunu çalıştırıyoruz. Ardından tarayıcıdan “http://localhost:8080” adresine giderek uygulamamızın düzgün başlayıp başlamadığını kontrol ediyoruz.

Heroku’da Projenin Nasıl Yaratılır?

Heroku’da projenin nasıl yaratılacağına geçmeden önce, tutorial çerçevesinde kullanacağım komutlardan kısaca bahsetmek istiyorum.

  • heroku: Ana heroku komutu. Sisteme login olmaktan tutunda, sistemdeki git reposunu kullanmaya kadar tüm işlemlerinizi bu komut üzerinden yapacaksınız. İlgili komutlarınızı çalıştırmaya başlamadan önce illaki sisteme login olmalısınız.
  • forearm: Sık sık kullanacağımız diğer komut. Bu komut heroku projenizin, cloud’ta çalıştırıldığı gibi lokalinizde çalıştırmanıza olanak sağlar. Örneğin her heroku projesinde Procfile isminde dosyalar bulunur. Heroku sunucuda bu dosyaları okuyarak sizin için hangi modülleri ayağa kaldıracağını bilir. Procfile içerisinde yaptığınız değişiklikleri lokalinizde forearm kullanarak test edebilirsiniz.

Öncelikle heroku’ya login oluyoruz. Bunun için komut satırından “heroku login” komutunu kullanıyoruz. Bu komutu çalıştırdığımızda bize heroku’ya kayıt olduğumuz email ve şifreyi soracaktır. Bu bilgileri sağladıktan sonra herokuya başarılı şekilde login yapmış oluyoruz.

Login yaptıktan sonra “heroku create” diyerek heroku sisteminde proje yaratıyoruz. Komut çalıştıktan sonra, komut satırında aşağıdakine benzer bir çıktı göreceksiniz.

$ heroku create

More information here: https://blog.heroku.com/archives/2014/12/23/updateyourgitclientsonwindowsandosx

Creating mysterious-woodland-4843… done, stack is cedar-14

https://mysterious-woodland-4843.herokuapp.com/ | https://git.heroku.com/mysterious-woodland-4843.git

Burada koyu işaretlediğim(mysterious-woodland-4843) yer herokunun uygulamanız için atadığı isim. Her kullanıcı için ismi otomatik olarak yaratacaktır. Bu ismi değiştirmeniz mümkün, fakat nasıl yapacağınıza bu tutorial kapsamında değinmeyeceğim.

Projenizi herokuya deploy etmeden önce, projenizin nasıl çalıştırılacağını belirtmeniz gerekiyor. Bunun için ana dizinde Procfile isimli bir dosya oluşturup içeriğini aşağıdaki gibi yapıyoruz.

Procfile

Procfile dosyasınıda oluşturduktan sonra forearm uygulamasıyla test ediyoruz. Bunun için projenin ana dizininde “forearm start” komutunu çalıştırdıktan sonra localhost:5000 adresinden projemizin doğru çalışıp çalışmadığını test ediyoruz.

Herokuya projenizi deploy edebilmek için git kullanmanız gerekiyor. Bu sebepten projenizin ana dizininde “git init” komutunu çalıştırıyoruz. Bu komut bizim için lokalde git repository’si oluşturuyor. Tüm dosyalarımızı git repository’sine commitleyebilmek için “git add .” komutuyla ekliyoruz. Tüm dosyalar eklendikten sonra git commit -m “Initial Commit” diyerek lokal repository’mize commit geçiyoruz. Daha sonra “heroku git:remote -a <uygulama_adi>” şeklinde komutumuzu çalıştırıyoruz. Bu komut bizim için git uzak adresi (remote) olarak heraku adresini veriyor. Benim için bu örnekte komut heroku git:remote -a mysterious-woodland-4843 şeklinde oluyor. Eğer uygulamanızı herokuya deploy etmek isterseniz “git push heroku master” komutunu çalıştırmanız yeterli olacaktır. Eğer procfile dosyanızda bir sorununuz bulunmuyorsa deployment başarıyla gerçekleşecektir. Hemen ardından projeniz oluşturulurken verilen adresten (benim proje adıma göre bu adres https://mysterious-woodland-4843.herokuapp.com/ şeklindedir) uygulamanızı test edebilirsiniz.

MongoLab – Cloud Servis Olarak MongoDB

Projemizi herokuya deploy ettiğimize göre şimdi sırada MongDB kurulumuna geldi. Herşeyimizi Cloud’ta yönettiğimize göre, gidip lokalimize mongodb kurmak saçma olacak. Bu sebepten heroku servisimize MongoLab eklentisini kuracağız ve mongodb’mizi bu şekilde yöneteceğiz.

MongoLab tahmin edeceğiniz üzere Cloud servis olarak mongodb sağlıyor. Bedava olan planıda mevcut. Zaten proje genelinde de biz bu planını kullanacağız. MongoLab eklentisini yüklemek için, sisteme login olduktan sonra heroku addons:add mongolab komutunu çalıştırıyoruz.

Eğer heroku sistemine kayıt olurken kredi kartı bilgilerinizi vermediyseniz, bu eklenti kurulumunu gerçekleştiremezsiniz. Eğer kredi kartı bilgilerinizi vermek istemiyorsanız, MongoLab üzerinde kendiniz gidip hesap açabilir ve veritabanınızı burada oluşturabilirsiniz. Eğer heroku sistemine kayıt olurken kredi kartı bilgilerinizi vermediyseniz fakat şimdi vermek istiyorsanız https://heroku.com/verify adresindeki yönergeleri takip edebilirsiniz. Bundan sonra yukarıdaki komutu tekrar çalıştırdığınızda sorunsuzca eklentinizi ekleyebilmiş olmanız gerekiyor. Örnek komut satırı çıktısı aşağıdaki gibidir.

$ heroku addons:add mongolab

Adding mongolab on mysterious-woodland-4843… done, v7 (free)

Welcome to MongoLab.  Your new subscription is being created and will be available shortly.  Please consult the MongoLab Add-on Admin UI to check on its progress.

Use heroku addons:docs mongolab to view documentation.

MongoDB’nizi mongolab üzerinden yarattıktan sonra şimdi buna nasıl bağlanabileceğinize bakalım. Bunun için aşağıdaki komutu çalıştırmanız yeterli olacaktır. Daha sonradan favori MongoDB(ben mac’te robomongo arayüzünü kullanıyorum) arayüzünüzden bağlantı bilgilerinizi test edebilirsiniz.

$ heroku config | grep MONGOLABURI

MONGOLABURI: mongodb://<kullaniciadi>:<sifre>@ds031601.mongolab.com:31601/herokuapp33810136

Bu bağlantı bilgilerini ileride SpringData ile MongoDb bağlantısı yaparken kullanacağız. Burada ek bir bilgi olarak şunu belirteyim, isterseniz komut satırından yaptığımız gibi heroku bağlantı bilgilerini heroku config üzerinden almanızda mümkün, fakat basitlik sağlaması açısından biz elle vereceğiz.

Son Dokunuslar

Projenin hazırlanması kısmını bitirmeden önce son dokunuşlarımızı yapalım. GIT reposunu yarattık fakat .gitignore dosyamızı eklemedik. Öncelikle bu dosyamızı ekleyelim. Örnek .gitignore dosyamız aşağıdaki gibidir.

.gitignore

Eğer kendiniz başka sistemler için de gitignore dosyası oluşturmayı planlıyorsanız https://www.gitignore.io adresini tavsiye ederim.

Arzu ederseniz projenin son halinin kaynak kodlarına Git adresi üzerinden erişebilirsiniz.

End Of line