30 Mayıs 2017 Salı

Covariant Return Type

Giriş
Covariant Return Type virtual bir metod A tipini döndürüyorsa, bu metodu yeniden gerçekleştiren bir alt sınıf A'dan kalıtan B tipini döndürebilir anlamına gelir.

Java Covariant Return Type özelliğini desktekler. Bu özelliklik Java 1.5 ile geldi.
Örnek
Doğru bir örnek şöyle
public class Parent{  
  public Object doSomething(){}  
 }  
 public class Child extends Parent{  
  public String doSomething() {}  
 }
Örnek
Hatalı bir örnek şöyle
public interface Exemplary
{
  CharSequence getText();
}

public class Example implements Exemplary
{
  @Override
  public String getText(); // legal
}

public class BadExample implements Exemplary
{
  @Override
  public Integer getText(); // error
}
Örnek
Arayüz için şöyle yaparız. Elimizde bir arayüz olsun.
public interface SuperInterface {

  SuperInterface getSomething();
}
Bu arayüzden kalıtan  ve farklı bir nesne dönen covariant arayüz için şöyle yaparız.
public interface SubInterface extends SuperInterface {

  SubInterface getSomething();
}



14 Mayıs 2017 Pazar

JavaFX GraphicsContext Sınıfı

constructor
Şöyle yaparız.
GraphicsContext gc = canvas.getGraphicsContext2D();
fillRect metodu
Şöyle yaparız.
gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
rotate metodu
Şöyle yaparız. strokeRect() gibi metodların ne kadar döndürülerek çizileceğini belirtir.
gc.rotate(15);
save ve restore metodu
Şöyle yaparız.
gc.save(); // Save default transform
Affine rotate = new Affine();
rotate.appendRotation(90, canvas.getWidth()/2, canvas.getHeight()/2);
gc.setTransform(rotate);
gc.drawImage(snapshot, 0, 0);
gc.restore(); // Restore default transform
setFill metodu
Şöyle yaparız. fillRect () gibi metodların şeklin içini doldurmak için kullanacağı rengi belirtir.
gc.setFill(Color.LIGHTGRAY);
setStroke metodu
strokeRect() gibi metodların şeklin çerçeveini çizmek için kullanacağı rengi belirtir.

Örnek
Şöyle yaparız.
gc.setStroke(Color.RED);
Örnek
gc.setStroke(Color.BLUE);
setStroke metodu
Şöyle yaparız. setStroke() ile belirtilen renkte dikdörtgen çizer.
gc.strokeRect(0, 0, canvas.getWidth(), canvas.getHeight());

JavaFX Canvas Sınıfı

getGraphicsContext2D metodu
Şöyle yaparız. GraphicsContext nesnesi döndürür.
GraphicsContext gc = canvas.getGraphicsContext2D();
getHeight metodu
Şöyle yaparız.
canvas.getHeight();
getWidth metodu
Şöyle yaparız.
canvas.getWidth();
snapShot metodu
Şöyle yaparız.
Image snapshot = canvas.snapshot(null, null);

11 Mayıs 2017 Perşembe

Tomcat context.xml

JNDI
Açıklaması şöyle
By default, JNDI is disabled in embedded Tomcat .
Veritabanı için gereken jar dosyaları tomcat/lib yani CATALINA_HOME/lib dizinine kopyalanır
Şöyle yaparız.
<Context>
<!-- HSQL -->
  <Resource name="jdbc/myDB" auth="Container"
    type="javax.sql.DataSource" driverClassName="org.hsqldb.jdbcDriver"
    url="jdbc:hsqldb:mem:mymemdb;shutdown=true" username="SA" password=""
    maxTotal="100" maxIdle="5" maxWaitMillis="10000"/>

  <Manager pathname=""/>
</Context>

10 Mayıs 2017 Çarşamba

SecureRandom Sınıfı

Giriş
Bu sınıf Linux'ta /dev/random dosyasını okuduğu için sistemin entropi havuzu boş ise havuzun dolmasını bekleyebiliyor. Bloke olmayan /dev/urandom dosyasını kullanması için şöyle yaparız.
-Djava.security.egd=file:/dev/./urandom

nextBytes metodu
Örnek ver

ProcessHandle Sınıfı

Giriş
Bu sınıf Java 9 ile geliyor.

allProcesses metodu
Şöyle yaparız.
ProcessHandle.allProcesses().forEach(processHandle -> 
    System.out.println("PID: " + processHandle.getPid() + 
    ", command: " + processHandle.info().command().orElse("Unknown")));

8 Mayıs 2017 Pazartesi

KeyFactory Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.security.KeyFactory;
SecretKeyFactory Sınıfı simetrik şifreleme için kullanılırken bu sınıf asimetrik şifreleme için kullanılır. Bu sınıfın ürettiği PublicKey ve PrivateKey nesneleri Cipher nesnesini ile birlikte kullanılır.

Örnek
Şöyle yaparız.
PrivateKey priv = ..;

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priv);
Örnek
Şöyle yaparız.
PublicKey pub = 
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pub);

generatePublic metodu
Public key verisi X509EncodedKeySpec olarak saklanır. Bu nesneden Cipher nesnesinin ihtiyaç duyduğu PublicKey nesnesine dönüşüm için şöyle yaparız.
X509EncodedKeySpec spec = ...;
PublicKey  pub = fact.generatePublic(spec);
generatePrivateKey metodu
Private key verisi PKCS8EncodedKeySpec olarak saklanır. Bu nesneden Cipher nesnesinin ihtiyaç duyduğu PrivateKey nesnesine dönüşüm için şöyle yaparız.
PKCS8EncodedKeySpec keySpec = ...;
PrivateKey priv = fact.generatePrivate(keySpec);
getKeyspec  metodu
PrivateKey nesnesinden dönüşüm yapar.Şöyle yaparız.
PrivateKey priv = ...;
PKCS8EncodedKeySpec spec = fact.getKeySpec(priv,
            PKCS8EncodedKeySpec.class);
getInstance metodu
Şöyle yaparız.
KeyFactory fact = KeyFactory.getInstance("DSA");
Şöyle yaparız.
KeyFactory fact = KeyFactory.getInstance("RSA");

4 Mayıs 2017 Perşembe

Tomcat Zip Olarak Kurulum

Başlatmak
Windows'ta elle başlatmak için şöyle yaparız.
"c:\program files\tomcat\bin\startup.bat";//for linux use .sh
Windows'ta şöyle yaparız.
\apache-tomcat-7.0.77\bin>start startup.bat
Linux'ta şöyle yaparız.
sh startup.sh
catalina.out dosyasında log mesajları görülebilir.

Eğer Java kurulu değilse şu hatayı alırız.
"Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program"
Java kurulu ise çıktısı şöyledir.
-bash-4.2$ ./startup.sh

Using CATALINA_BASE:   /usr/share/apache-tomcat-8.0.33
Using CATALINA_HOME:   /usr/share/apache-tomcat-8.0.33
Using CATALINA_TMPDIR: /usr/share/apache-tomcat-8.0.33/temp
Using JRE_HOME:        /
Using CLASSPATH:       /usr/share/apache-tomcat-8.0.33/bin/bootstrap.jar:...
Durdurmak
Durdurmak içinse şöyle yaparız.
"c:\program files\tomcat\bin/shutdown.bat";//for linux use .sh
Çıktısı şöyledir.
-bash-4.2$ ./shutdown.sh

Using CATALINA_BASE:   /usr/share/apache-tomcat-8.0.33
Using CATALINA_HOME:   /usr/share/apache-tomcat-8.0.33
Using CATALINA_TMPDIR: /usr/share/apache-tomcat-8.0.33/temp
Using JRE_HOME:        /
JDK veya JRE
Eğer başlatma sırasında JAVA_HOMe veya JRE_HOME tanımlı değil hatası alırsak şu seçeneklerimiz var. Windows'ta JAVA_HOME veya JRE_HOME değişkenine atama yaptıktan sonea sistem tekrar giriş yapmak gerekir

1. JDK Kullanmak
JAVA_HOME değişkenine değer atamak için şöyle yaparız.
C:\Program Files\Java\jdk1.8.0_102 
2. Sistem JRE'sini kullanmak
Tomcat zip olarak kurulduysa çalıştırırken önce JRE_HOME, eğer bu değişken yoksa JAVA_HOME değişkeninin işaret ettiği JRE'yi kullanır.
JDK İçindeki JRE
JRE_HOME değişkenine Windows'ta değer atamak için şöyle yaparız.
set "JRE_HOME=C:\Program Files\Java\jdk1.7.0_03\jre"
Şöyle yaparız.
export JAVA_HOME=/home/Desktop/jdk8/
export PATH=$PATH:$JAVA_HOME
Normal JRE
Şöyle yaparız.
C:\Program Files\Java\jre1.8.0_102
JRE ortam değişkeni ise JDK içindeki bin'i göstermeli.

3. Tomcat'e Mahsus JRE Kullanmak
Tomcat setenv.sh yazısına taşıdım.