3 Temmuz 2020 Cuma

Kotlin-4 (Android kotlin switch activity - Farklı ekranlar arasında geçiş yapmak)


Merhaba,
bu yazı yine bir android ve kotlin projesi üzerine olacak. Geliştirilecek uygulamada iki ekran arasında geçişler(navigation) olacak.
Örnek uygulama geliştirilirken Home ve Login screen üzerinde örneklenmiştir. Login ekranında user ve password adında iki input bulunmaktadır. 
user ve input alanına aynı string ifadeler girilirse kotlin ile kontrol yapılarak Home screen'e yönlendirme yapılmaktadır. 
Eğer girilen bu iki bilgi örtüşmüyorsa uygulama kullanıcısı bir Toast mesajıyla bilgilendirilmektedir. 
Aşağıdaki adımlar uygulanarak sonuçlar incelenebilir.

NOT: İsimlendirmenin daha anlamlı ve anlaşılabilir olması adına uygulamda varsayılan olarak oluşan MainActivty yeniden isimlendirilerek HomeActivity oluşturulmuştur. Bununla birlikte diğer ekran için de LoginActivty oluşturulmuştur. Bu iki ekran arasında geçiş yapmak için kodlama yapılmıştır.

İlk olarak Android Studio aracılığıyla  kotlin ile geliştirme yapılacak şekilde bir Android projesi oluşturulur.

MainActivty.kt' yi HomeActivity.kt olarak yeniden adlandırın ve yanına LoginActivity.kt dosyasını oluşturun.

AndroidManifest.xml dosyasına giderek HomeActivity tanımlamasını yapın.



<activity
android:name="com.tutorials.switchbetweenscreens.HomeActivity">
</activity>

 

 

LoginActivity nin AndroidManifest.xml' de main activitiy olarak işaretlendiğinden emin olun.



<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

 


Üstte varsayılan ekran olarak Login ekranı tanımlanmıştır. Ayrıca yapılan tanımlamayla Home ekranına geçişin önü açılmıştır. 

 

res/layout/activity_home.xml dosyası LinearLayout olarak tanımlanarak içine LoginScreen'e geçiş yapmayı sağlayan buton yerleştirilir.



<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".HomeActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20sp"
android:text="Home Screen..."
android:textSize="25sp" />

<Button
android:id="@+id/goToLoginBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#397bb2"
android:padding="20sp"
android:text="Back To Login"
android:textColor="#FFF" />
</LinearLayout>

 


Diğer yandan HomeActivity.kt dosyasına gidilerek xml de tanımlanan buton'a basınca LoginActivity'e geçiş yapması için aşağıdaki satırları onCreate methoduna eklenir.



goToLoginBtn.setOnClickListener {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
}

 

 

res/layout/activity_login.xml dosyası oluşturularak LinearLayout içinde 2 adet editText(user ve password) ve bir Button eklenir.



<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".LoginActivity">

<EditText
android:id="@+id/userTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Username"
android:inputType="text" />

<EditText
android:id="@+id/passwordTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Password"
android:inputType="textPassword" />

<Button
android:id="@+id/goToHomeBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#397bb2"
android:padding="20sp"
android:text="Login"
android:textColor="#FFF" />

</LinearLayout>


 


Son olarak Login kontrolleri için  LoginActivty.kt dosyasının onCreate methoduna giderek aşağıdaki tanımlama yapılmalıdır.



goToHomeBtn.setOnClickListener {

val username = userTxt.getText().toString();
var password = passwordTxt.getText().toString();

println("username : $username")
println("password : $password")

if (username.equals("") || password.equals("")) {
val errMsg = "Kullanıcı Adı ve Şifre boş olamaz!"
Toast.makeText(this, errMsg, Toast.LENGTH_SHORT).show();
} else if (!username.equals(password)) {
val errMsg = "Kullanıcı Adı ve Şifre aynı olmalıdır!"
Toast.makeText(this, errMsg, Toast.LENGTH_SHORT).show();
} else {
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
}
}

 

 


Ekranlar arasında geçişi  vuruglamak için her iki activity'nin de arkaplan renkleri(backgroundColor) değiştirilmiştir. Değişikliği yapan kod aşağıdadır.



getWindow().getDecorView().setBackgroundColor(Color.GRAY);

 

 

uygulamanın kaynak kodlarına aşağıdaki adresten ulaşabilirsiniz.
github: https://github.com/lvntyldz/tutorials/tree/master/kotlin-android-app-examples/04-switch-between-screens

Kotlin-3 (Android custom toast message - ekran da özelleştirilmiş mesaj göstermek)


Herkese merhaba,
bu yazımda sizlere Kotlin ile Android uygulama geliştirirken kendi toast message laoyutunuzu nasıl tasarlanacağını ve bu  ekranda kendi tasarladığınız layout üzerinde mesaj göstermeyi paylaşacağım.

İlk olarak Android Studio ile bir Kotlin projesi oluşturun. Daha sonra activity_main.xml
  dosyasını açarak buradaki TextView’ ı  kaldırın ve yerine bir Button ekleyin. Bu butona tıklayınca Toast mesajı gösterilecektir.

activity_main.xml dosyasının içeriği aşağıdaki gibi olacaktır.


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintLayoutMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/showToastBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Toast"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>


 

Daha sonra activity_main.xml dosyasının yanında   toast_layout.xml adında bir xml dosyası oluşturun.  Bu xml dosyası içindeki component ler blok şeklinde görünmesi için xml  LinearLayout olarak tasarlanmıştır. Ayrıca resim ve mesajın yan yana(aynı satırda) görünmesi için   android:orientation="horizontal"  olarak set edilmiştir. 


LieneerLayout olarak tasarladığınız toast_layout.xml  dosyasına bir ImageView be bir TextView ekleyin. ImageView ile icon TextView ile ise girilen mesaj gösterilecektir.

toast_layout.xml dosyasının son hali aşağıdaki gibi olacaktır.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/customToastLayout"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/colorYellow"
android:maxHeight="50dp"
android:orientation="horizontal"
android:padding="10dp"
android:weightSum="1">

<ImageView
android:id="@+id/toastImageView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_weight="0.1" />

<TextView
android:id="@+id/toastTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.9"
android:textColor="@color/colorBlue"
android:textSize="18sp"
android:textStyle="bold" />

</LinearLayout>

 

 

Son adım olarak MainActivity.kt dosyasına giderek onCreate methodu içerisinde  activity_main.xml de tanımladığımız button’a onClickListener tanımlıyoruz. Bu sayede  ekrandaki butona tıklayınca ekranda mesaj gösterilecektir.

onCreate methodunda  ve  setOnClickListener içerisinde çağrılan showCustomToast method incelendiğinde LayoutInflater
 ile xml ile tanımlanan layout bulunarak kotlin objesine dönüştürülmüştür. 
Obje’ ye dönüştürme işleminden sonra ise TextView ve ImageView componentlerine erişerek hem icon hem de  mesaj içeriği güncellenmiştir.

Son gelinen noktada MainActivity.kt dosyasının içeriği aşağıdaki şekilde olacaktır.


package com.tutorials.showcustomtoast

import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.toast_layout.view.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

showToastBtn.setOnClickListener {
showCustomToast("Custom Toast Message", R.drawable.info)
}
}

fun showCustomToast(message: String, imageSrc: Int) {
val toast = Toast(this)
toast.apply {
val layout =
LayoutInflater.from(applicationContext)
.inflate(R.layout.toast_layout, null, false)

layout.toastTextView.text = message
layout.toastImageView.setImageResource(imageSrc)

setGravity(Gravity.CENTER, 0, 0)
setDuration(Toast.LENGTH_SHORT)
setView(layout)
show()
}
}
}


 

Uygulamanın kaynak dosyalarına aşağıdaki linkten ulaşabilirsiniz.
github : https://github.com/lvntyldz/tutorials/tree/master/kotlin-android-app-examples/03-show-custom-toast 


Kotlin-2 (Android toast message - ekranda mesaj göstermek)

Merhaba,
bu yazımda sizlere androidde uygulama geliştirirken ekranda nasıl mesaj gösterileceğini paylaşacağım. Uygulama geliştirme sırasında kotlin dili seçilerek çalışma yapılmıştır.

ilk olarak Android Studio'yu açın ve  kotlin dilini seçerek bir proje oluşturun. Daha sonra activity_main.xml dosyasına 3 adet button ekleyin. Uygulama üzerinden bu butonlara tıklayınca 3 farklı toast mesajı gösterilecektir.

activity_main.xml dosyasının son hali aşağıdaki gibi olmalıdır.



<Button
android:id="@+id/showToasBtn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Toast"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/showToasBtn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Another Toast"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.55"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6" />

<Button
android:id="@+id/showToasBtn3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Toast With Style"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.55"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.7" />

 

 

burada buttonların herbirine showToasBtn1,showToasBtn2 ve showToasBtn3 diye ID verildiğine dikkat edin. MainActivity de butonların click event'i bu ID ler aracılığıyla dinlenecektir.

MainActivity.kt dosyası ve onCreate methodunda üstte oluşturlan butonlar ID leri ile tespit ederek birer değişkene atanır.



val showSimpleToastBtn: Button = findViewById(R.id.showToasBtn1)
val showAnotherToastBtn: Button = findViewById(R.id.showToasBtn2)
val showToastWithStyleBtn: Button = findViewById(R.id.showToasBtn3)


 

Daha sonra her button için setOnClickListener methodu içinde ilgili toast mesajları ekrana basılır. 

Ekranda mesaj göstermek için Toast class'ının static methodlarından makeText çağrılır. makeText methodu applicationContext, text mesajı ve mesajın ekranda kalacağı süre olmak koşuluyla 3 parametre ile çağrılır.

val toast = Toast.makeText(applicationContext, msg, duration) 

 

üstteki şekilde oluşturulan toast nesnesi show methodu çağrılarak ekranda gösterilir.

 toast.show()

 

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



class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val showSimpleToastBtn: Button = findViewById(R.id.showToasBtn1)
val showAnotherToastBtn: Button = findViewById(R.id.showToasBtn2)
val showToastWithStyleBtn: Button = findViewById(R.id.showToasBtn3)

showSimpleToastBtn.setOnClickListener {
val msg = "Simple Short Toast Message with kotlin."
val duration = Toast.LENGTH_SHORT

Toast.makeText(applicationContext, msg, duration).show()
}

showAnotherToastBtn.setOnClickListener {
val msg = "Another Toast Message with kotlin."
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(applicationContext, msg, duration)

toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
toast.show()
}

showToastWithStyleBtn.setOnClickListener {
val msg = "Kotlin Toast Message With Style"
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(applicationContext, msg, duration)

val view: View = toast.view
view.setBackgroundColor(Color.RED)

val text = view.findViewById<View>(android.R.id.message) as TextView
text.setTextColor(Color.WHITE)

toast.setGravity(Gravity.TOP or Gravity.RIGHT, 0, 0)
toast.show()
}

}
}



Üstteki kodlama çalıştığında ilk buton'a basılması durumunda varsayılan ayarlarla ekranda bir mesaj gösterilmektedir.

ikinci butona tıklandığında ise mesajın pozisyonu(gösterileceği kısım) değiştirilmiştir.

üçüncü butona tıklandığında ise mesaj farklı bir arkaplan rengi ve text rengi ile gösterilecektir. Çünkü bu buttoun onClickListener methodunda  gösterilecek toast objesinin view'ına ve text'ine erişilerek renk değişikliği yapılmıştır.

projenin kodlarına aşağıdaki adres üzerinden erişebilirsiniz.


 

Kotlin-1 (Android projesi oluşturma ve ilk Counter uygulaması)


Merhaba,
bu yazımda kotlin dili ile geliştirme yapmak için Android Studio ile bir Android projesi oluşturmayı ve bu proje üzerinde basit bir counter uygulaması yapmayı paylaşacağım. Ekrana koyacağımız 2 adet buon ile yine ekrandaki bir label'da yazdırdığımız sayı değerini artırıp azaltacağız.

Android Studio'yu açın.
Android Studio karşılama erkanında "Start a new Android Studio project" butonuna tıklayın.
Bir sonraki sekmede "Empty Activity" seçimini yaparak next'e basın.
Uygulamaya bir isim verin "My First App"
Burada Language kısında "Kotlin" seçtiğinizden emin olun.
Diğer alanları varsayılan değerlerinde bırakarak "Finish" butonuna tıklayın.

Bu adımlardan sonra Android Studio girdiğiniz bilgiler dahilinde kotlin destekli bir proje oluşturacaktır. Oluşturma işleminden sonra yine Android Studio projeyi açarak gradle ile build işlemini başlatacaktır. Build işlemi birkaç dakika sürebilmektedir.

Build işleminden sonra ilk olarak ekrana 2 adet buton ekleyin. Button ekleme işlemini sürükle bırak yöntemiyle yapabileceğiniz gibi 
src/main/res/layout/activity_main.xml dosyasına aşağıdaki satırları ekleyerek te yapabilirsiniz.


<TextView
android:id="@+id/counterTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/increaseBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Increase Val"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/counterTxt" />

<Button
android:id="@+id/decreaseBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Decrease Val"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/counterTxt"
app:layout_constraintVertical_bias="0.792" />


 

Üstteki tanıma dikkat ederseniz component ID leri aşağıdaki şekilde tanımlanmıştır. 

TextView id => android:id="@+id/counterTxt"

Button(Artır) id => android:id="@+id/increaseBtn"

Button(Azalt) id => android:id="@+id/decreaseBtn"



Değeri artıran ve eksilten kısımların eklenmesi  için  MainActivity.java yı aşağıdaki şekilde güncelleyin.



class MainActivity : AppCompatActivity() {

var number = 0;

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val textView: TextView = findViewById(R.id.counterTxt) as TextView
var increaseBtn: Button = findViewById(R.id.increaseBtn) as Button
var decreaseBtn: Button = findViewById(R.id.decreaseBtn) as Button

increaseBtn.setOnClickListener {
number = number + 1;
textView.text = number.toString();
}

decreaseBtn.setOnClickListener {
number = number - 1;
textView.text = number.toString();
}

}
}

 

 


yukarıdaki kodda ilk olarak number adında bir global değişken oluşturuldu. Daha sonra onCreate methodunda textView, increaseBtn ve decreaseBtn'a daha önce atanan  ID ler ile erişildi. Erişilen butonlara setOnClickListener methodu ile click eventleri dinlenmeye başlandı. Son olarak increase veya decrease buttonlarına basınca number değeri güncellenip string'e dönüştürülerek textView'a set edildi.


uygulamanın kodlarına aşağıdaki adresten ulaşabilirsiniz.

github : https://github.com/lvntyldz/tutorials/tree/master/kotlin-android-app-examples/01-hello-world






11 Haziran 2020 Perşembe

JHipster-9 (Yeni yetki(Role) oluşturma ve ekranları oluşturlan yetkiye bağlama)

Herkese merhaba,
bu yazımda JHipster ile yeni bir role'ün nasıl oluşturulacağını paylaşacağım.
Daha önceki yazılarımda paylaştığım üzere JHipster projesi varsayılan olarak ROLE_ADMIN ve ROLE_USER şeklinde tanımlı iki rolle oluşmaktadır.
Bunlarn dışında bir yetkiye ihtiyacınız olduğunda yetkinin nasıl oluşturlacağını ve ekranların bu yetki ile nasıl açılacağını aşağıdaki adımları inceleyerek öğrenebilirsiniz.

Yazının devamında student adında bir entity oluşturulacaktır. Yine student ekranlarını  bağlamak için  "ROLE_MANAGER" diye bir yetki oluştrulup devam edilecektir. Frontend tarafında angularjs kullanılmıştır.

ilk olarak jhipster projesine giderek student adında bir entity oluşturun.

$ jhipster entity student


Wizard üzerindeki 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? firstname
? What is the type of your field? String
? 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
firstname (String)

? 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

 

Bu adımları tamamladıktan sonra student ekranları ROLE_USER yetkisine sahip kullanıcılara gösterilecektir. Şimdi bu yetkilendirmeyi ROLE_MANAGER'a çekmek için ilk olarak frontend tarafındaki  authority.constants.ts dosyasına yeni role'ü aşağıdaki şekilde ekleyin.

MANAGER = 'ROLE_MANAGER', 

 

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


export enum Authority {
ADMIN = 'ROLE_ADMIN',
USER = 'ROLE_USER',
MANAGER = 'ROLE_MANAGER',

} 


 


student.route.ts dosyasında authorities alanı   authorities: [Authority.MANAGER] şeklinde güncelleyin.

student.route.ts dosyasının son hali aşağıdaki gibi olacaktır.


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

]; 


 

backend tarafında ROLE_MANAGER yetkisini eklemek için AuthoritiesConstants.java dosyasına aşağıdaki satırı ekleyin.

public static final String MANAGER = "ROLE_MANAGER"; 

 

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


public final class AuthoritiesConstants {

public static final String ADMIN = "ROLE_ADMIN";

public static final String USER = "ROLE_USER";

public static final String ANONYMOUS = "ROLE_ANONYMOUS";

public static final String MANAGER = "ROLE_MANAGER";

private AuthoritiesConstants() {
}
}

 

 

Liquebase changeset ler ile role'ün veritabanında oluşması için authority.csv dosyasına ROLE_MANAGER'ı aşağıdaki şekilde ekleyin.


name
ROLE_ADMIN
ROLE_USER
ROLE_MANAGER

 

 

 StudentResource dosyasına giderek buradaki tüm public methodların üstüne aşağıdaki satırı ekleyin.

@PreAuthorize("hasAuthority('ROLE_MANAGER')") 

 

Uygulamayı restart ettiken sonra browser üzerinden aşağıdaki adrese giderek http://localhost:9000/account/register adresinden yeni bir kullanıcı kaydı oluşturun. 
daha sonra admin kullanıcısıyla giriş yaparak http://localhost:9000/admin/user-management sayfasına gidin.
Olulşturduğunuz kullanıcıyı editleyerek status'ünü aktif'e çekip bu kullanıcıyı  ROLE_MANAGER olarak yetkilendirin.

Kullancıyı yetkilendirdikten  sonra signuout olarak yeni kullanıcyla giriş yapın. Browser üzerinden http://localhost:9000/student adresine gittiğinizde ROLE_MANAGER yetkisine sahip kullanıcıyla bu ekranların erişildiğini göreceksiniz. 

Siseme "user" kullanıcısyla login olduktan sonra bu ekranlar yetkilendiremeye takılarak açılmayacaktır.

9 Haziran 2020 Salı

JHipster-8 (Build alma ve Docker deployment)

Merhaba,
bu yazımda jhipster ile oluşturulan bir angular-spring projesinin docker üzerinde nasıl deploy edildiğini inceleyeceğiz.

Paylaşım yapmaya başlamadan önce production image'ı kendi makinemizde ayağa kaldıracağımız için  docker'ın çalışma yaptığınız makinde kurulu olması gerektiğinin hatırlatmasını yapmak isterim.

ilk olarak ptoduction yük almak ve gerekli docker dosyalarını oluşturmak için aşağıdaki komutu terminalden çalıştırın  

$ jhipster docker-compose 


terminal üzerindnen wizard ile gelen soruları aşağıdaki şekilde yanıtlayın.

? Which *type* of application would you like to deploy? Monolithic application

? Enter the root directory where your applications are located ../
? Which applications do you want to include in your configuration? hipster-angular
? Do you want to setup monitoring for your applications ? No

 

Bu işlemden sonra root(kök) dizinde production yükü almak  için kullanacağımız bir docker-compose.yml dosyası oluşacaktır. oluşan dosya mysql ve geliştirdiğimiz uygulamanın image'ını işaret etmektedir.  Bu işlem sadece ilk build için yapılacaktır. Sonraki buildlere zaten docker-compose.yml elimizde olacağı için tekrardan bu dosyası oluşturmaya gerek yoktur.

Oluşan docker-compose.yml dosyasının içeriği aşağıdaki gibi olacaktır.


version: '2'
services:
hipsterangular:
image: hipsterangular
environment:
- _JAVA_OPTIONS=-Xmx512m -Xms256m
- 'SPRING_PROFILES_ACTIVE=prod,swagger'
- MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=true
- 'SPRING_DATASOURCE_URL=jdbc:mysql://hipsterangular-mysql
:3306/hipsterangular?useUnicode=true&characterEncoding=
utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone
=UTC&createDatabaseIfNotExist=true'
- JHIPSTER_SLEEP=30
ports:
- '8080:8080'
hipsterangular-mysql:
image: 'mysql:8.0.20'
environment:
- MYSQL_USER=root
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=hipsterangular
command: mysqld --lower_case_table_names=1 --skip-ssl

    --character_set_server=utf8mb4 --explicit_defaults_for_timestamp 


 

docker compose dosyasını oluşturduktan sonra jib ve maven ile bir docker image'ı oluşturmak için aşağıdaki komutu çalıştırın.

 $ ./mvnw -Pprod verify jib:dockerBuild


jib: docker engine olmadan docker image'ı oluşturamay yarayan bir library dir. 


oluşturulan image'ı görüntülemek için aşağıdaki komutu terminalden çalıştırın.

 $ docker images

 

çıktı aşağıdaki gibi olmalıdır

REPOSITORY              TAG                 IMAGE ID            CREATED              SIZE

hipsterangular          latest              85eb54432ad8        About a minute ago   293MB

 

app.yml dosyasını kaynak göstererek docker image'larını (mysql+app) container olarak ayağa kaldırmak için aşağıdaki docker komutunu çalıştırın.

 $ docker-compose -f src/main/docker/app.yml up -d

 

Tüm bu işlemleri tamamladıktan sorna browser üzerinden http://localhost:8080/ adresine erişince ekrandaki developemnt rozetinin(badge) gittiğini ve production olarak docker üzerinde deploy edildiği görülmektedir.

Yine deployment sonrasında aşağıdaki adresler incelenebilir.
metrikler :  http://localhost:8080/admin/metrics
kullanıcılar : http://localhost:8080/admin/user-management
ayarlar :http://localhost:8080/admin/configuration
eventler : http://localhost:8080/admin/audits
loglar : http://localhost:8080/admin/logs
swagger : http://localhost:8080/admin/docs