Showing posts with label service. Show all posts
Showing posts with label service. Show all posts

Saturday, June 30, 2018

Run Minio as Systemd

          Hello sobat Nostra, pada postingan blog kali ini saya akan membahas tentang bagaimana cara run minio sebagai service dengan menggunakan systemd. Sebelumnya saya sudah pernah membahas tentang minio pada post berikut, namun pada postingan tersebut untuk run minio kita menggunakan command melalui terminal dan ditambah dengan control operator '&' agar minio berjalan di background. Nah kali ini kita akan run minio dengan menggunakan systemd. Oke langsung saja ke step-step yang akan kita lakukan.

1.     Akses terminal untuk VM minio server dan login sebagai root

2.  Download package dan change permission to executable mode. (lakukan langkah berikut ini disetiap server)

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

chmod +x minio

mkdir /opt/Minio && mv minio /opt/Minio

3.  Create folder konfigurasi file dan folder yang akan dijadikan tempat penyimpanan untuk data minio

mkdir /etc/minio
mkdir /opt/MinioData

4.     Create file environment variable untuk minio

vi /etc/default/minio

#insert config berikut : 

#lokasi file minio akan disimpan
MINIO_VOLUMES="/opt/MinioData"

#konfigurasi bind port
MINIO_OPTS="-C /etc/minio --address :443"

5.     Next, kita akan membuat file service untuk minio

vi /etc/systemd/system/minio.service

#insert config berikut

[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/opt/Minio/minio

[Service]
WorkingDirectory=/opt

User=root
Group=root

PermissionsStartOnly=true

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\""

ExecStart=/opt/Minio/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service only if it has ended with the clean exit code or signal.
Restart=on-success

StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop Minio
KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

6.     Change permission untuk library minio

chown minio:minio /etc/minio
chown minio:minio /opt/Minio
chown minio:minio /opt/MinioData

7.     Reload daemon dengan command berikut :

systemctl daemon-reload

8.     Start minio.service dengan menggunakan systemd

systemctl start minio

9.     Enable startup untuk minio service

systemctl enable minio

10. Untuk mengganti password bias menggunakan command berikut atau bisa melalui web minio setelah minio sudah berjalan

vi /etc/minio/config.json
change dengan :
  "accessKey": "admin",
  "secretKey": "password”

11. Buka web browser di <IPSERVER>:9000, masukkan ACCESS KEY dan SECRET KEY yang telah didapatkan untuk login kedalam minio.

12. Jika ingin mengganti access dan secret key bias juga dilakukan melalui menu setting pada web minio

13. Untuk mengakases minio dari public, add firewall rules pada server untuk allow inbound connection port 9000.

Nah sekarang kita sudah setup minio dengan menggunakan systemd, untuk start service minio dapat dilakukan dengan "systemctl start minio" dan untuk stop "systemctl start minio"

Sekian untuk postingan kali ini, semoga bermanfaat.

Reference : 

- https://docs.minio.io/docs/distributed-minio-quickstart-guide 
- https://en.wikipedia.org/wiki/Systemd

Sunday, March 19, 2017

Currency Conversion With Gson

Pada kesempatan kali ini saya akan mencoba menuliskan cara mendapatkan kurs nilai tukar mata uang dengan menggunakan java dan gson sebagai library nya. 

Apa itu gson? gson adalah library yang diciptakan oleh si mbah google yang berfungsi untuk mengubah objek java menjadi sebuah objek json. 

Use case yang saya ambil adalah bagaimana mendapatkan informasi nilai tukar mata uang atau currency conversion dengan menggunakan API Provider http://api.fixer.io/

Karena kita menggunakan gson sebagai library tambahan, maka pastikan kalian sudah memiliki library tersebut, jika tidak kalian dapat men-download gson pada link berikut https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.0

Untuk melakukan konversi nilai tukar mata uang kita harus mendapatkan nilai rate-nya terlebih dahulu kemudian di-kalikan dengan nilai ammount, kita tidak perlu report memikirkan darimana datangnya hasil nilai rate, karena kita cukup menggunakan API Provider http://api.fixer.io/ yang sudah disediakan oleh google.

Berikut adalah contoh java untuk currency conversion

CurrencyConversionResponse.java

package gsontest;

import java.util.Map;
import java.util.TreeMap;


public class CurrencyConversionResponse {

 private String base;
 private String date;

 private Map rates = new TreeMap();

 public Map getRates() {
  return rates;
 }

 public void setRates(Map rates) {
  this.rates = rates;
 }

 public String getBase() {
  return base;
 }

 public void setBase(String base) {
  this.base = base;
 }

 public String getDate() {
  return date;
 }

 public void setDate(String date) {
  this.date = date;
 }

}




CurrencyConvertor.java

package gsontest;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import com.google.gson.Gson;

public class CurrencyConvertor {

 private static final String API_PROVDIER = "http://api.fixer.io/";

 public static double convert(String fromCurrencyCode, String toCurrencyCode) {

 if ((fromCurrencyCode != null && !fromCurrencyCode.isEmpty())
   && (toCurrencyCode != null && !toCurrencyCode.isEmpty())) {

  CurrencyConversionResponse response = 
   getResponse(API_PROVDIER + "/latest?base=" + fromCurrencyCode);

  if (response != null) {

   String rate = response.getRates().get(toCurrencyCode);

   double conversionRate = 
     Double.valueOf((rate != null) ? rate : "0.0");

   return conversionRate;
  }

 }

  return 0.0;
 }

 private static CurrencyConversionResponse getResponse(String strUrl) {

  CurrencyConversionResponse response = null;

  Gson gson = new Gson();
  StringBuffer sb = new StringBuffer();

  if (strUrl == null || strUrl.isEmpty()) {

   System.out.println("Application Error");
   return null;
  }

  URL url;
  try {
   url = new URL(strUrl);

   HttpURLConnection connection = 
     (HttpURLConnection) url.openConnection();

   InputStream stream = connection.getInputStream();

   int data = stream.read();

   while (data != -1) {

    sb.append((char) data);

    data = stream.read();
   }

   stream.close();

   response = gson.fromJson(sb.toString(), 
     CurrencyConversionResponse.class);

  } catch (MalformedURLException e) {

   System.out.println(e.getMessage());
   e.printStackTrace();

  } catch (IOException e) {

   System.out.println(e.getMessage());
   e.printStackTrace();
  }

  return response;
 }

 public static void main(String[] args) throws IOException {

  Scanner scanner = new Scanner(System.in);

  System.out.println("Enter the currency code ?");
  String fromCurrencyCode = scanner.next();

  System.out.println("Enter the Amount value:");
  double amount = scanner.nextDouble();

  System.out.println("Enter the Currency Code that you want to covert : ");
  String toCurrencyCode = scanner.next();

  fromCurrencyCode = fromCurrencyCode.toUpperCase();
  toCurrencyCode = toCurrencyCode.toUpperCase();
  
  double coversionRate = convert(fromCurrencyCode, toCurrencyCode);

  System.out.println(amount + " " + fromCurrencyCode + 
    " is equivalent to " + (coversionRate * amount) + " "
    + toCurrencyCode + " today.");

  scanner.close();
 }

}




Berikut hasil dari hasil currency conversion dari USD ke IDR


Kalian juga dapat melakukan currency conversion dengan soap service pada wsdl berikut http://www.webservicex.net/CurrencyConvertor.asmx

Berikut hasil currency conversion jika service tersebut kita coba jalankan dengan menggunakan soap-UI


Demikian blog saya kali ini, untuk referensi terkait blog ini dapat juga dilihat pada link berikut, see ya..


Saturday, March 18, 2017

How to invoke soap service using java

Sebetulnya soap service sudah mulai ditinggalkan, karena dinilai cukup berat dan lebih lambat jika dibandingkan dengan Restfull service. Sudah banyak aplikasi-aplikasi baru yang dikembangkan dengan teknologi Restfull service dengan alasan perlu perombakan dari sisi aplikasi mereka yang mungkin akan mengeluarkan budget yang tidak sedikit tentunya.

Lalu kenapa saya ingin membahas tentang soap bukan rest? Ternyata untuk sekala enterprise, saat ini teknologi soap service masih banyak digunakan, kebanyakan penyedia aplikasi juga belum berani untuk me-migrasi atau upgrade aplikasi mereka secara teknologi yang dikarenakan keterbatasan budget dan kekhawatiran akan munculnya masalah-masalah baru.

Ada banyak cara tentunya untuk invoke soap service dengan java, bisa dengan menulis ulang setiap baris xml seperti yang terdapat di blog ini https://technology.amis.nl/2011/06/29/how-to-call-a-call-a-webservice-directly-from-java-without-webservice-library/

Tapi ternyata dengan menuliskan setiap baris xml di code java, memakan waktu yg cukup lama, belum lagi misalnya service yang akan kita invoke cukup complex. Ternyata ada cara lain yang cukup mudah yaitu dengan meng-import wsdl ke dalam java, sehingga nanti kita tinggal melakukan set dan get pada parameter yang dibutuhkan.

Untuk use case invoke soap service ini saya menggunakan contoh webeservice online yang dapat diakses di url berikut http://www.thomas-bayer.com/axis2/services/BLZService

Nah sebelum kita mulai untuk coding invoke soap service dengan java, pastikan tools yang kalian gunakan support untuk melakukan generate webservice client. Saya sendiri menggunakan Eclipse Java EE IDE for Web Developers Version: Neon.1 Release (4.6.1)

Berikut langkah demi langkah implementasinya
  1. Akses http://www.thomas-bayer.com/axis2/services/BLZService dari browser kemudian save kedalam format wsdl.
  2. Simpan wsdl tersebut kedalam folder project java
  3. Klik kanan pada wsdl kemudian pilih web service  --> generate client
  4. Set ke dalam Develop Client mode, kemudian Finish
  5. Jika berhasil maka akan terbentuk 1 package dan beberapa class java yang digenerate otomatis
  6. Buat 1 class java untuk invoke class java hasil generate sebelumnya.
Jika sudah pada tahap tersebut cukup copy and paste code dibawah ini, kemudian execute sehingga kita akan mendapatkan response dari webservice tersebut.


package test;

import com.thomas_bayer.blz.BLZService;
import com.thomas_bayer.blz.BLZServiceLocator;
import com.thomas_bayer.blz.BLZServicePortType;
import com.thomas_bayer.blz.BLZServicePortTypeProxy;
import com.thomas_bayer.blz.BLZServiceSOAP11BindingStub;
import com.thomas_bayer.blz.DetailsType;

public class BLZServiceService {
 public String getBank(String bankCode) throws Exception {
  
 try {
  BLZService service = new BLZServiceLocator();
  BLZServicePortType port = service.getBLZServiceSOAP11port_http();
  
  BLZServiceSOAP11BindingStub stub = (BLZServiceSOAP11BindingStub) port;
  stub._setProperty(stub.ENDPOINT_ADDRESS_PROPERTY, 
    "http://www.thomas-bayer.com/axis2/services/BLZService");
  
  DetailsType response = new DetailsType();
  response.setBezeichnung(bankCode);
  
  response = port.getBank(bankCode);
  System.out.println(response.getBezeichnung());
  System.out.println(response.getBic());
  System.out.println(response.getClass());
  System.out.println(response.getOrt());
  System.out.println(response.getPlz());
  
  
 } catch (Exception e) {
  // TODO: handle exception
 }
  
 return "OK";
 }
 public static void main(String[] args) throws Exception {
  String bankCode = "54030011";
  BLZServiceService a = new BLZServiceService();
  a.getBank(bankCode);
 
 }
}


Berikut hasil dari hasil execute code tersebut


Sekian guys, semoga dapat diimplementasikan di service-service lain, mungkin tidak akan selalu sama dengan contoh ini, tapi semoga bisa menjadi referensi.

Salam Coding :D