maven etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
maven etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

9 Haziran 2020 Salı

JHipster-6 (JDL ile OneToMany(master-detail) ilişkili ekranlar oluşturma)

Merhaba,
bu yazımda sizlere jhipster ile jdl dosyasından entity oluşturmayı ve iki entity arasında oneToMany ilişkisi kurmayı paylaşacağım.

ilk olarak terminalden jhipster projenizin bulunduğu dizine gidin.
$ cd  hipster-angular/ 

touch komuturyla içinde entity tanımlamalarını yapacağımzı  one-to-many.jdl adında bir dosya oluşturun.
$ touch one-to-many.jdl 

dosya içeriği aşağıdaki gibi olmalıdır.

entity Owner {
    name String required
}
 
entity Pet {
    name String required,
    species String required
}
 
relationship OneToMany {
    Owner{pet} to Pet{owner}
} 


import-jdl komutuyla dosya içindeki entityleri oluşturun.
jhipster import-jdl   one-to-many.jdl 

Bu komut ile one-to-many.jdl dosyasında ilişkisi kurulan  owner ve pet entity lerinin frontend ve backend tarafındaki tüm dosyaları oluşturulacaktır.

projede git status ile değişen dosyalara ve yeni oluşan dosyalara bakmanız biraz daha konunun anlaşılmasına yardımcı olabilir
$ git status  

işlem tamamlandıktan sonra Owner ve Pet oluşturarak mutlaka aşıdaki ekranları inceleyiniz.

Owner Listesi : http://localhost:8080/owner
Yeni Owner : http://localhost:8080/owner/new
Pet Listesi : http://localhost:8080/pet
Pet görüntüle : http://localhost:8080/pet/11/view

NOT: içerik hazırlanırken aşağıdaki adresten faydalanılmıştır.
https://dadtechblog.com/2017/05/27/creating-a-master-detail-relationship-with-jhipster/


JHipster-5 (AngularJS ile frontend tarafında yetki kontrolü)

Merhaba,
bu yazımda sizlere JHipster ile oluşturduğunuz monolitik projelerde angularJS ile frontend tarafında role kontrolünün nasıl yapılacağını palaşcağım.

Aslında angularJS bilenler için işlem çok tanıdık gelecektir. Her nekadar JHipster projesi desekte içinde springboot ve angularJs implementasyonu yapılmış bir yapı kastedilmektedir.

frontend tarafında erişim kontrolü örneği için projedeki anasayfaya bir mesaj yazdırılacaktır. Eğer kullanıcı admin ise mesaj ekranda görüntülenecektir. Admin değilse gizlenecektir.

ilk olarak gösterilecek mesajı projedeki lokalizasyon dosyası içine ekleyin.
./src/main/webapp/i18n/en/home.json dosyasına giderek
home.titleAdmin karşılığına aşağıdaki içeriği ekleyin
  "Welcome, Java Hipster ADMIN!"

son hali aşağıdaki gibi olmaldıır.

{
  "home": {
    "title": "Welcome, Java Hipster!",
    "titleAdmin": "Welcome, Java Hipster ADMIN!",
    "subtitle": "This is your homepage",
    "logged": {
      "message": "You are logged in as user \"{{username}}\"."
},... 


ikinci ve son olarak  ./src/main/webapp/app/home/home.component.html dosyasına giderek <h1 class="display-4" jhiTranslate="home.title">Welcome, Java Hipster!</h1> satırının altına aşağıdaki satırı ekleyin.
<h1 *jhiHasAnyAuthority="'ROLE_ADMIN'" class="display-4" jhiTranslate="home.titleAdmin"></h1>

 son hali aşağıdaki gibi olacaktır.

<h1 class="display-4" jhiTranslate="home.title">Welcome, Java Hipster!</h1>
<h1 *jhiHasAnyAuthority="'ROLE_ADMIN'" class="display-4" jhiTranslate="home.titleAdmin"></h1> 


NOT: Bu dosya üzerinde <div [ngSwitch]="isAuthenticated()"> şeklinde tanımlana bir div bulunmaktadır. Bu div'in içeriği de yine sadece authanticated kullanıcılar için görünür olacaktır.

Browser üzerinde http://localhost:9000/ adresine girerek hem giriş yapmadan hem de giriş yaparak aradaki farkı inceleyebilirsiniz.

kaynak : https://github.com/Tonterias/JhipsterPress


JHipster-4 (Oluşturulan Angular JS sayfasını public erişime açma)

Merhaba,
bu yazımda oluşturulan  monolitik  JHipster projesinin ekranlarının public erişime nasıl açılacağını paylaşacağım.

ilk olarak bir önceki yazımda paylaştığım üzere student adında bir entity oluşturun. Varsayınlan olarak bu student entity'sine ait ekranlara erişebilmek için sisteme login olmak gerekmektedir. Çünkü hem backend tarafında hemde Frontend tarafında erişim kontrolü yapılıp eğer kullanıcı sisteme login olmamışsa bu ekranlar kullanıcıya gösterilmemektedir.

 Ancak JHipster ile proje geliştirirken  register sayfası gibi login olmadan da erişilebilecek sayfalar yapma ihtiyacınız doğabilir. Dolayısıyla böyle bir ihtiyaç doğması durumunda projede aşağıdaki değişiklikleri yaparak erkanları public erişime açabilirsiniz.

Projede forntend ve backend tarafı ayrı olduğu için hem Backend ten hemede Frontend tarafında gereken tanımlamaları yapmanız gerekmektedir.

ilk olarak Backend tarafı için  erişim tanımlamalarının yapıldığı  SecurityConfiguration#configure(HttpSecurity) methoduna giderek      .antMatchers("/api/register").permitAll()  satırının altına aşağıdaki satırları ekleyin.
 .antMatchers("/api/students").permitAll()
.antMatchers("/api/students/*").permitAll()

son hali aşağıdaki gibi olmalıdır.

.authorizeRequests()
.antMatchers("/api/authenticate").permitAll()
.antMatchers("/api/register").permitAll()
.antMatchers("/api/students").permitAll()
.antMatchers("/api/students/*").permitAll()
.antMatchers("/api/activate").permitAll()
.antMatchers("/api/account/reset-password/init").permitAll()
.antMatchers("/api/account/reset-password/finish").permitAll()
.antMatchers("/api/**").authenticated()
.antMatchers("/management/health").permitAll()
.antMatchers("/management/info").permitAll()
.antMatchers("/management/prometheus").permitAll()
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN)


Frontend tarafı içinse aşağıdaki dosyada canActivate olan satırları silin.
src/main/webapp/app/entities/student/student.route.ts

Yine student.route.ts dosyası içinde    authorities alanlarının karşılığını boş array olarak set edin (authorities: []).

son hali aşağıdaki şekilde olmalıdır

export const studentRoute: Routes = [
  {
    path: '',
    component: StudentComponent,
    data: {
      authorities: [],
      pageTitle: 'demoHipster.student.home.title',
    },
  },
  {
    path: ':id/view',
    component: StudentDetailComponent,
    resolve: {
      student: StudentResolve,
    },
    data: {
      authorities: [],
      pageTitle: 'demoHipster.student.home.title',
    },
  },
  {
    path: 'new',
    component: StudentUpdateComponent,
    resolve: {
      student: StudentResolve,
    },
    data: {
      authorities: [],
      pageTitle: 'demoHipster.student.home.title',
    },
  },
  {
    path: ':id/edit',
    component: StudentUpdateComponent,
    resolve: {
      student: StudentResolve,
    },
    data: {
      authorities: [],
      pageTitle: 'demoHipster.student.home.title',
    },
  },
]; 



Bu işlemden sonra angular ekranı aktif etmek için herhangi bir rule ve role aramayacak ve ekranlar public erişime açılmış olacaktır.

kaynak:
https://github.com/Tonterias/JhipsterPress
https://www.jhipster.tech/creating-an-entity/



JHipster-3 (Controller, Service, Language ve Entity oluşturma)

Merhaba, bu yazımda sizlere JHipster projelerinize servis, controller, language ve entity eklemenin nasıl yapılacağını paylaşacağım.

JHipster ile proje oluşturduktan sonra terminali açıp projenin kök(root) dizinine gidin.
 $ cd ./demoJHipster

Foo adında bir controller oluşturmak için aşağıdaki komutu çalıştırın(https://www.jhipster.tech/creating-a-spring-controller/).
 $ jhipster spring-controller Foo

Komut satırındaki wizard ile sorulan soruları  aşağıdaki şekilde yanıtlayın.
? Do you want to add an action to your controller? Yes
? What is the name of your action? getInfo
? What is the HTTP method of your action? GET
? Do you want to add an action to your controller? No

Bu işlemler sonunda hem FooResource adında bir controller hemde FooResourceIT adında bu controller'ın class'ı oluşturulacaktır. Ayrıca controller'a getInfo methodu eklenecektir.

Bar adında bir spring service oluşturmak için aşağıdaki komutu terminalden çalıştırın(https://www.jhipster.tech/creating-a-spring-service/)
 $ jhipster spring-service Bar

Burada Interface eklemeden devam edilmiştir. Siz interface eklemek isterseniz yanıtı "yes" olarak işaretleyin.
 ? (1/1) Do you want to use an interface for your service? No

Bu işlemler sonrunda BarService adında bir spring service oluşturulacaktır.

JHipster projenize dil desteği eklemek için aşağıdaki komutu terminalden çalıştırın(https://www.jhipster.tech/installing-new-languages/)
 $ jhipster languages

Eklemek istediğiniz dil seçimlerini yaparak projenize hem UI(frontend) hemde backend tarafına dil desteği ve dosyalarını eklemiş olacaksınız.

Projenize entity eklemek için aşağıdaki komutu çalıştırın (https://www.jhipster.tech/creating-an-entity/)
 $ jhipster entity student

Yine wizard ile gelen soruları aşağıdaki şekilde yanıtlayın.
? Do you want to add a field to your entity? Yes
? What is the name of your field? name
? What is the type of your field? String
? Do you want to add validation rules to your field? Yes
? Which validation rules do you want to add? Required, Minimum length, Maximum length
? What is the minimum length of your field? 2
? What is the maximum length of your field? 20

? Do you want to add a field to your entity? Yes
? What is the name of your field? age
? What is the type of your field? Integer
? Do you want to add validation rules to your field? No

? Do you want to add a field to your entity? No
? Do you want to add a relationship to another entity? No

================= Student =================
Fields
name (String) required minlength='2' maxlength='20'
age (Integer)

? Do you want to use separate service class for your business logic? No, the REST controller should use the repository directly
? Is this entity read-only? No
? Do you want pagination on your entity? No

Aşağıdaki mesajşarı gördüğünüzde işlem başarılı demektir

Everything is configured, generating the entity...
Entity Student generated successfully.

Bu işlemler sonunda jhipster aşağıdaki adımları uygulayacaktır.
- name ve age alanlarına sahip Student adında bir entity oluşturulur.
- liquebase ile Student tablosu create edilir.
- Bu entity'nin ihtiyaç duyacağı controller,repository  ve servis katmanları eklenir.
- Yine bu entity nin kullanılacağı CRUD ekranlarını  Forntend tarafında oluşturur.
- Sayfalama var ise pagingModeller oluşturulur
- Entity leri frontend tarafına  taşımak için DTO lar oluşturulur.
- CRUD ekranları dummy datalarla birlikte gelecektir. Bu veriler üzerinden değişiklikler yaparak ekranları inceleyebilirsiniz.

oluşturduğunuz entity'e ait ekranları görüntülemek ve incelemek için browser üzerinden aşağıdaki adresi ziyaret edebilirsiniz.

WEB : http://localhost:8080/student

JHipster-2 (Kurulum ve Proje oluşturma)

Merhaba, bu yazımda sizlere JHipster kurulumunu ve JHipster ile bir spring projesinin nasıl oluşturulacağını paylaşacağım.
ilk olarak JHipster'ın çalışabilmesi için kendi işletim siteminize uygun olan  Java'yı bilgisayarnıza indirip kurun (https://www.oracle.com/java/technologies/javase-downloads.html).
JHipster kurulumdan sonra projenizi git'te tutacağınızı varsayarak git tanımlamasını yaparak projedeki tüm dosyaları intial commit ile local repoda commitler. Bunun için git'i de bilgisayarnınıza kurmanız gerekmektedir(https://git-scm.com/).
Diğer bir zorunlulta nodeJs tir. NodeJS'i de bilgisayarınıza kurun (https://nodejs.org/).

Java, NodeJS ve Git kurulumundan sonra bilgisayarnızdan terminal'i açarak aşağıdaki komutu çalıştırarak JHipster kurulumunu başlatırn.

$ npm install -g generator-jhipster 

 

işlem tamamalandıktan sonra yeni jhipster projesi için bilgisarınızda bir dizin oluşrurun ve bu dizine gidin.

$ mkdir jhipster-demo && cd jhipster-demo 

 

jhipster komutuyla proje oluşturmaya başlayın
$ jhipster 

 

Ekrandaki sorulara ihtiyacınız doğrultusunda cevaplar verin. Tüm adımlar tamamlandıktan sonra projeyi bilgisayarınızda çalıştırip inceleyebilirsiniz.

NOT: Frontend tarafının da create edilmesi için "Which type of application would you like to create?" sorusunu "Monolithic application" olarak yanıtlayın. Bu sayede oluşturacağınız projenin bir ekranı olur ve bu ekranlar üzerinde işlemler yapabilirsiniz.

Backend(springboot) tarafını ayağa kaldırmak için aşağıdaki maven komutunu çalıştırın

$ ./mvnw 


Frontend tarafını ayağa kaldırmak için npm start komutunu kullanın

 $ npm start

 

uygulama ayağa kalktıktan sonra browser üzerinden aşağıdaki url leri inceleyebilirsiniz.

root: http://localhost:9000/
kullanıcı yönetimi : http://localhost:9000/admin/user-management
metrikler : http://localhost:9000/admin/metrics
kofigürasyonlar : http://localhost:9000/admin/configuration
swagger API : http://localhost:9000/admin/docs
Database : http://localhost:9000/h2-console

18 Ekim 2016 Salı

Manuel Olarak Maven Kurulumu (maven install)

Mehaba, bu yazımda sizlere linux ortama manuel maven kurmayı anlatacağım.
Aşağıdaki adımları takip ederek maven'ı istediğiniz dizine kurup kullanabilirsiniz.


1-) Öncelikle maven sürümünü doğrulayın. Bilgisayarınızda kurulu olmadığından emin olun
#mvn -version 

2-) Önce buradan  maven'ı indirin

3-) indirdiğiniz zip dosyasını  dosyayı açıp adını M2 olarak değiştirin.

4-) bu dosyanın içine gidip path bilgisini alın
#cd M2 
  
#pwd 

ÖRN: #/Users/levent.yildiz/DEVELOPMENT/TOOLS/M2

5-) bash_profile dosyasını açın.
vi  ~/.bash_profile 

6-) aşağıdaki satırları dosyaya ekleyin.
M2_HOME=/Users/levent.yildiz/DEVELOPMENT/TOOLS/M2
PATH=$PATH:$M2_HOME/bin

7-) terminali kapatıp tekrar açın.

8-) Path bigisini ekrana yazdırın
echo $PATH 

9-) sürüm bilgisini test edin.
 #mvn -version


NOT: Eğer MAC üzerinde çalışıyorsanız ve Maven'ı homebrew ile yüklediyseniz aşağıdaki komutla unlink yapabilirsiniz. Bu işlemden sonra yukarıdaki adımlarla custom kurulum yapabilirsiniz.
#brew unlink maven 

9 Nisan 2015 Perşembe

Linux(ubuntu/linuxmint..) üzerinde maven kurulumu

 Herkese merhaba,  son günlerde ubuntu ve linux mint üzerinde geliştirmeler yapmaya başladım. Bu geliştirmeleri yapacağım ortamları  sıfırdan kendim hazırlamam gerekti.  Unix sistemlerle çok geniş geçmişim olmadığı için  bir çok noktada internet üzerinden araştırma yaparak ilerlemek durumunda kaldım.   İlerleyen zamanlarda yine lazım olur diye kısa ve öz notlar  aldım. Bu notlarımı sizlere de yardımcı olması  adına paylaşıyorum.


Maven kurulumu kontrol edin.
 mvn –version


Erişilebilen tüm maven paketlerini alın.
apt-cache search maven


son maven sürümünü yükleyin.
sudo apt-get install maven


Maven kurulumu  tekrar kontrol edin.
mvn –version


  
Kaynak :  http://www.mkyong.com/maven/how-to-install-maven-in-ubuntu/


NOT:  En kısa zamanda Java ile alakalı yazılar yazmaya tekrar başlayacağım.

15 Aralık 2014 Pazartesi

Repositoryde Olmayan Jar ları Local Repository Oluşturarak Projeye Dahil Etmek. // Maven

Herkese merhaba, bu yazıma başlıktan da anlaşılacağı üzere diye başlayamıyorum. Çünkü bu yazının  başlığını atarken esasen biraz güçlük çektim.  Muhtemelen başlığa bakarak sizde ne demek istendiğini anlayamayacaksınız. Ancak  arkadaşlar konumuzun yine  Maven olduğunu belirterek okumaya devam etmenizi tavsiye ediyorum..

Daha önce size Maven'ın ne amaçla kullanıldığından bahsetmiştim. Uzak sunuculardaki kütüphaneleri sizin projenize dahil eden bir asistan olduğunu hatırlayın.  Şimdi hemen bir senaryo canlandıralım kafamızda. Bir Jar dosyası bulup indirdiniz internetten. Yada kendiniz kodlamasını yaparak  bir Jar oluşturdunuz. Ve bu Jar dosyası  remote repository lerden hiçbirinde yok. Zaten kendi yazdığınızın olmaması normal.  Peki bu Jar dosyasını Maven projenize dahil edemeyecek misiniz? Cevap : Tabii ki edebileceksiniz...

Bunun yöntemi şudur. Localde(Kendi bilgisayarınızda) bir Maven repository(Depo) oluşturarak bu Jar dosyasını içine atıyorsunuz ve Pom dosyanıza, Repository'e bakarken   kendi oluşturduğunuz local repositorye de  bakmasını söylüyorsunuz.  Maven bu komutu alır almaz göreve başlıyor. Bundan sonra sizin local repository nizi de  tarayarak bağımlılıkları(dependency) projenizin çıktısına ekliyor.


Şimdi yukarıda yazdıklarımı komutlarla anlatayım:

Önce maven ayarlarını kontrol etmenizi tavsiye ediyorum.
mvn –version


aşağıdaki gibi bir çıktı alıyorsanız (versiyon ve path bilgisi geliyorsa) sorun yok demektir.





Komut satırından aşağıdaki kodu çalıştırarak repository oluşturun. Ayrıca jar dosyanızı local repository de konumlandırın.
mvn deploy:deploy-file  -DgroupId=com.company.uniApi -DartifactId=eml-creator -Dversion=1.0 -Dpackaging=jar -Dfile=C:\_projects-company\eml-creator\eml-creator\target\eml-creator.jar  -DrepositoryId=companyRepo -Durl=file:///C:\_projects-local-repo




Yine komutları  çalıştırdığınızda alttaki gibi bir çıktı alıyorsanız (BUILD SUCCESS) işleminiz başarılı demektir.


Şimdi yazdığımız komutun içeriğini açıklayayım :

deploy:deploy-file  // Bir dosyanın deploy edileceği
-DgroupId=com.company.uniApi // Ekleyeceğimiz Jar dosyasının groupId değeri.
-DartifactId=eml-creator // Eklenecek Jar Dosyasının artifactid değeri
-Dversion=1.0 //Eklenen Jar Dosyasının versiyonu
-Dpackaging=jar // Eklenecek Dosyanın Jar dosyası olduğu
-Dfile=C:\_projects-company\eml-creator\eml-creator\target\eml-creator.jar //eklenecek  Jar dosyasının dosya yolu(Path)
-DrepositoryId=companyRepo // EKlenecek[Oluşturulacak ] repostry ID si
-Durl=file:///C:\_projects-local-repo // Oluşturulacak Repository dizininin yolu(Destination Path)



Pom Güncellemeleri :

Bu işlemlerden sonra Jar dosyanızı eklemek istediğiniz maven projesinin pom dosyasına dahil etmelisiniz. bunun için pom.xml dosyasında önce oluşturduğunuz repository yi tanıtın.
pom.xml
   <repositories>
        <repository>
            <id>companyRepo</id>
            <url>file://C:\_projects-local-repo</url>
        </repository>
    </repositories>





Daha sonra dependency kısmına Jar dosyanızın bağlılığını ayarlayın

pom.xml
    <dependencies>
        <dependency>
            <groupId>com.company.uniApi</groupId>
            <artifactId>eml-creator</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>


Bütün bu yaptıklarımızdan sonra son bir işlem kaldı maven install diyerek  finali yapmak..

Arkadaşlar  remote repository de olmayan dosyaları maven'a dahil etmenin birden fazla yöntemi var aslında. Ben kendi araştırmalarım dahilinde bu yöntemi kullanmayı tercih ettim. Sizlerede Türkçe kaynak oluşturmak adına paylaşayım istedim.

21 Eylül 2014 Pazar

javax ile smtp mail gönderme

Merhabalar herkese,
bu yazımda sizlere javax ile smtp doğrulama yaparak mail gönderme işlemi yapacağız. Java da Mail gönderme işlemi yapan birkaç yöntem var ben sadece bir tanesini anlatacağım. Bu size şimdilik  yol göstermiş olsun ilerleyen zamanlarda ihtiyaç duyulursa diğer metodları da yazarım.


Öncelikle yine intelliJ ile bir web(Spring MVC) projesi oluşturarak işe başlıyoruz.
projenin bitmiş hali aşağıdaki yapıda olacaktır:


projeyi oluşturduktan sonra maven dosyasını(pom.xml) aşağıdaki tanımlamaları ekleyelim.
pom.xml 
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.7.1</version>
        </dependency>

burada gördüğünüz üzere iki farklı tanımlama var. Birincisi mail göndermemize yarayan jar diğeri ise json değerleri okumamıza yarar.


index html sayfasında basit bir form oluşturalım ve bu form sayesinden son kullanıcıdan mail bilgilerini alalım.

index.html 
<div class="mailDiv">
    <form role="form" id="mailForm" method="POST" onsubmit="return false;">
        <div class="form-group">
            <input type="text" class="form-control" name="firstname" id="firstname" placeholder="Ad">
        </div>

        <div class="form-group">
            <input type="text" class="form-control" name="lastname" id="lastname" placeholder="Soyad">
        </div>
        <div class="form-group">
            <input type="email" class="form-control" id="email" name="email" placeholder="E-Posta">
        </div>

        <div class="form-group">
            <input type="password" class="form-control" id="password" name="password" placeholder="Sifre">
        </div>

        <div class="form-group">
            <input type="text" class="form-control" id="subject" name="subject" placeholder="Konu">
        </div>

        <div class="form-group">
            <textarea class="form-control" rows="3" name="message"></textarea>
        </div>
        <button type="submit" id="btnFormPost" class="btn btn-primary">Gonder</button>
    </form>
</div>

özetle bu formdan bilgileri post edip java ile karşılayacağız. Daha sonra  gelen değerli alarak Javax ile mail gönderme yapacağız.

 MailController.java
        final Mail mail = new Mail();
        mail.setFirstname(request.getParameter("firstname")); // Adı
        mail.setLastname(request.getParameter("lastname")); // Soyadı
        mail.setFromMail(request.getParameter("email")); //Gönderen Mail
        mail.setToMail(request.getParameter("email")); // Alan Mail
        mail.setPassword(request.getParameter("password")); // Gönderen Mail Şifresi
        mail.setMessage(request.getParameter("message")); // Mail mesajı
        mail.setSubject(request.getParameter("subject")); //mail konusu


        mail.setHost("smtp.gmail.com"); //sender smtp host
        mail.setPort(587);//smtp port

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", mail.getHost());
        props.put("mail.smtp.port", "587");//gönderen mail port

üstteki kodlar ile formdan gelen bilgilerle Mail nesnesini dolduracağız. Ayrıca Properties sınıfını da gmail in mail sunucu bilgilerine göre dolduruyoruz. Diğer mail sunucular için ayarları(port,auth,host,..vs) güncellemeyi unutmayın.

projenin çıktısı aşağıdaki gibidir:


formdan girilen değerlerle mail gönderme işlemi yaptıktan sonra Adı,Soyadı,Email ve Email gönderme durumunu ekrana yazacaktır.

kaynak dosyalar(github) : indirmek için tıklayın

19 Eylül 2014 Cuma

Maven Profil Oluşturma (Dev + Preprod + Prod) - 2

Herkese merhaba,
bir önceki yazımda sizlere maven profilinin nasıl oluşturulacağını ve intelliJ ile nasıl profil bazlı compile edileceğini  anlatmıştım. Geçen süre zarfında düşündüm ki ,  sizleri biraz ezberciliğe yönlendirmiş olabilirim. Dolayısıyla konuyla ilgili bir yazı daha yazarak arka planda bu işlerin nasıl ilerlediğini anlatayım istedim. Bu yazım da da komut satırı üzerinden maven profiline göre compile etmeyi anlatacağım.

Kısacası bir önceki  yazıda olan işlemlerin aynısını yapacağız ancak compile ederken maven install butonlarına basmadan bu işlemlerin komutunu yazarak yapacağız.

Öncelikle bir önceki yazımı yazarken oluşturduğum projemi tekrar intelliJ  ile açıyorum. Pom.xml dosyasındaki  profiles tagları arasındaki tüm profiller için  activation tanımlaması yapacağım. Bunun için activation tagları arasında property ve property içinde de name/value tag lerini kullanacağım. Bu sayede profillere birer isim ve bu isimlere birer değer set etmiş olacağız.

  • profiles
    • profile
      • activation
        • property
          • name = env
          • value = Test, Prod yada Dev 
şeklinde bir hiyerarşide olacak.
pom.xml 
<activation>
     <property>
          <name>env</name>
          <value>Test</value>
     </property>
</activation>

Basitçe şöyle düşünebilirsiniz : env diye bir değişken tanımlayıp ve değerini Test olarak set ediyoruz.

şimdi komut satırı üzerinden cd komutuyla projenin kodlarının olduğu dizine gidelim


başlangıçta   
mvn help:active-profiles
 komutunu çalıştırarak varsayılan da hangi profil ile compile edildiğine bakıyoruz(sonuç aşağıdadır).



hemen ardından  
mvn -Denv=Test help:active-profiles
 komutuyla aktif profili önce Test olarak set ettim. Daha sonrada aktif profili tekrar ekrana yazdırdım.


Son olarak ta alttaki komutla profili test olarak set edip projemizi compile edelim.
mvn -Denv=Test install

Bu işlemlerden sonra projenin  target dizini altında oluşan war dosyası artık test profiline göre hazırlanmıştır. Test sunucusuna deploy edebilirsiniz.. :)


kaynak dosyalar(github) : indirmek için tıklayın

15 Eylül 2014 Pazartesi

Maven Profil Oluşturma (Dev + Preprod + Prod)

Herkese merhaba bu yazımda maven ile profil oluşturma dan bahsedeceğim. Biraz uzun fakat ehemmiyeti büyük olan bir yazı olacak. Bir senaryo üzerinden örnekleme yaparak anlatacağım maven profile kullanmayı. Bu arada bir parantezle  belirtmek istiyorum ki Java ile geliştirme yaparken maven kullanan yada kullanacak olan herkese  maven profile kullanmalarını kesinlikle ve şiddetle tavsiye ediyorum.

Maven profile ne amaçla kullanıldığıyla ilgili internetten çeşitli araştırmalar yapabilirsiniz. Ben çok detaya inmeden kendi kullanımımı anlatacağım size.

Java ile geliştirme yaptığım her projede 3 farklı profilim olur benim.  dev , prep ve prod diye..

  • dev  : Development(geliştirme yaptığım) ortamını ifade eder
  • prep : preProduction dan gelir. Test ortamını ifade eder.
  • prod : production ortamını ifade eder.
Peki neden 3 farklı profil size kısaca anlatayım. Öncelikle genel olarak şirketlerde kodları geliştirdiğiniz bir makine oluyor(Bu size verilen laptop). Geliştirme işlemleri bitince sizden geliştirme isteyenlerin kodlarınızı görebilmesi ve test uzmanlarının sizin geliştirdiğiniz kodu test edebilmesi için bu projeye ait bir test sunucusu oluyor. Birde testlerden onay alındıktan sonra amacına hizmet etmek üzere kodları attığınız gerçek(Erişime açılan) sunucular...

Bir projenin geliştirilip yayına çıkması bu 3 aşamadan geçerek gerçekleşir. Dolayısıyla siz geliştirme yaparken localde kullandığınız veri tabanı bilgileri ayrı, testte kullandıklarınız ayrı ve prodda kullandıklarınız ayrı olacaktır. Bu farklılıklara istinaden projenizi deploy ederken ya her sunucunun bilgilerini elle güncelleyip, compile edip, deploy edeceksiniz, yada birazdan göstereceğim şekilde  maven ile profil oluşturarak bu üç farklı sunucu için üç farklı ayar dosyası oluşturacaksınız. Ve compile ederken profil seçeceksiniz.
Kısacası ; localde çalışırken maven'a kodlarımı dev profiline göre compile et, teste giderken prep'e göre ve son olarak production a çıkarken prod'a göre compile et diyeceksiniz..

NOT : Bu yazıyı sadece  4 satırlık veri tabanı ayar dosyaları üzerinden örneklendiriyorum ancak gerçek ortamlarda kod yazarken bu ayar dosyalarının farklılıkları onlarca satırı bulur ve eğer profil kullanmazsanız her deploy etmede(dev+test+prod) bu onlarca satır kodu ilgili sunucuya göre değiştirmek durumunda kalırsınız. 

şimdi örneklendirmeye geçiyorum.Geliştirme yaptığımız ortamda(development) bir  MySQL veri tabanımız   olsun erişim bilgileri aşağıdaki gibi olsun 
url   : localhost
user : root 
pass : 12345 

Birde bu geliştirmeleri yaptıktan sonra tester ların bu kodları test edebilmesi için bir test sunucusu olduğunu ve  tabi bu sunucu içinde bir test veri tabanımız olsun.
url   : 192.168.1.110
user : rootTest 
pass : 12345Test 

son olarak geliştirmeyi yaptık, testlerden geçti ürünün yayınlandığı gerçek ortam(production) olacak birde.
url   : 192.168.1.111
user : rootProd
pass : 12345Prod 


Hemen intelliJ ile bir web(Spring MVC) projesi oluşturup projemizi geliştirmeye başlayalım.

projenin son hali aşağıdaki yapıda olacaktır:


İlk olarak resources dizini altında üç profili ayırmak için üç dev , prod ve prep diye üç farklı dizin oluşturuyoruz. Her üç dizinin altında da config.properties dosyasını oluşturuyoruz.

Bu işlemlerden sonra xml dosyasında config dosyasını load edecek şekilde ayarlıyoruz. Bu işlemler için alttaki parametreyi mvc-dispatcher-servlet.xml dosyasına eklemek yeterlidir(classpath ten sonra gelen tüm .properties uzantılı dosyaları yükle anlamı taşır).

mvc-dispatcher-servlet.xml
    <context:property-placeholder location="classpath*:*.properties"/>

bu tanımlamayı yaptıktan sonra config.properties dosyalarını aşağıdaki şekilde düzenliyoruz.

dev/config.properties
db.url = localhost
db.user = root
db.pass = 12345

 prep/config.properties
db.url = 192.168.1.110
db.user = rootTest
db.pass = 12345Test

prod/config.properties
db.url = 192.168.1.111
db.user = rootProd
db.pass = 12345Prod



ayar dosyalarını da tanımladıktan sonra , controller'a giderek yüklenen ayar dosyasındaki değerleri okuyalım.


 HelloController.java

@Controller
@RequestMapping("/")
public class HelloController {

    @Value("${db.url}")
    public String dbUrl;


    @Value("${db.user}")
    public String dbUser;


    @Value("${db.pass}")
    public String dbPass;



                @RequestMapping(method = RequestMethod.GET)
                public String printWelcome(ModelMap model) {
                               model.addAttribute("message", "Okunan Degerler!");
        model.addAttribute("url",this.dbUrl);
        model.addAttribute("pass",this.dbPass);
        model.addAttribute("user",this.dbUser);

                               return "index";
                }
}



son olarak okunan değerlerin view edilmesi için index.jsp sayfasına aşağıdaki kodları ekleyelim.
index.jsp
                <h3>${message}</h3>
                <p><b> user :</b>${user}</p>
                <p><b> pass :</b>${pass}</p>
                <p><b> url: </b>${url}</p>



Kodlamamız buraya kadardı ancak bizim maven'a giderek profil tanımlamasını  henüz yapmadık. Üstte üç farklı dizine ayırdığımız ayar dosyalarını profillerle eşleştirmemiz gerekmektedir.  Bu tanımlamayı yapmak için pom.xml e aşağıdaki kodları ekleyelim.



 pom.xml
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/dev</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>prep</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/prep</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources/prod</directory>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>

Buradaki komutlarla maven'a  dev,prep ve prod diye 3 profil ID si verdik. bu profillerin ayar dosyalarının nerede olduğunu belirttik. Üstteki kodları pom.xml e ekledikten sonra sağ üste köşedeki maven tabında profil bilgileri listelenecektir. Burada hangi profili seçip maven install dersek artık  maven  o profile ait ayar(config.properties) dosyasını okuyarak war dosyası oluşturacaktır.


 Her profil için maven clean deyip ardından maven install ettikten sonra projeyi çalıştırınca  oluşan  3 farklı (profile göre) çıktı aşağıdaki gibi olacaktır.




kaynak dosyalar(github) : indirmek için tıklayın