28 Haziran 2016 Salı

ResourceBundle Sınıfı

Giriş
Açıklaması şöyle
Constructing a PropertyResourceBundle instance from an InputStream requires that the input stream be encoded in ISO-8859-1. In that case, characters that cannot be represented in ISO-8859-1 encoding must be represented by Unicode Escapes as defined in section 3.3 of The Java™ Language Specification whereas the other constructor which takes a Reader does not have that limitation.
Bundle dosyası ISO-8859-1 kullanılarak oluşturulmalı.

getBundle metodu
Şöyle yaparız.
ResourceBundle bundle = ResourceBundle.getBundle("...");
getString metodu
Şöyle yaparız.
String str = bundle.getString("content");


27 Haziran 2016 Pazartesi

JavaFX TextArea Sınıfı

Giriş
Şu satırı dahil ederiz.
import javafx.scene.control.TextArea;
constructor
Şöyle yaparız.
TextArea ta = new TextArea();
addEventFilter metodu
Şöyle yaparız.
ta.addEventFilter(KeyEvent.ANY, e -> {
  if (e.getCode() == KeyCode.Z && e.isShortcutDown()) {
    e.consume();
  }
})
setOnKeyPressed metodu
Şöyle yaparız.
ta.setOnKeyPressed(new EventHandler<KeyEvent>() {
  @Override
  public void handle(KeyEvent event) {
    if ((event.getCode() == KeyCode.Z || event.getCode() == KeyCode.Y)
      && event.isShortcutDown()) {
        event.consume();
    }
  }
});

25 Haziran 2016 Cumartesi

FileLock Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.nio.channels.FileLock;
FileChannel tarafından oluşturulur.

constructor
Kilidi alıncaya kadar bloke olur. Şöyle yaparız.
FileChannel fc = ...
FileLock lock = fc.tryLock();
if(lock != null){
  ...
}
Bloke olmasın istersek şöyle yaparız.
FileChannel fc = ...;
FileLock lock = null;

// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
try {
  lock = channel.tryLock();
} catch (OverlappingFileLockException e) {
  // File is already locked in this thread or virtual machine
}
release metodu
Şöyle yaparız.
// Release the lock - if it is not null!
if( lock != null ) {
  lock.release();
}


FileSystems Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.nio.file.FileSystems;
Bu sınıf Java 7 ile geliyor.

getDefault metodu
Şöyle yaparız.
FileSystem fs = FileSystems.getDefault();
newFileSystem metodu - Uri 
Zip dosyasını okumak için şöyle yaparız.
Path zipfile = ...
URI uriOfFileInZip;
try(FileSystem fs = FileSystems.newFileSystem(zipfile, null)){
  ...
}
newFileSystem metodu - Uri + Map
Zip dosyası oluşturmak için şöyle yaparız.
Path zipFile = ...;
Map<String, String> env = new HashMap<String, String>() {{
  put("create", "true");
}};

try (FileSystem zipFs = FileSystems.newFileSystem(
  URI.create("jar:" + zipFile.toUri()), env)) {
  ...  
}

Volatile

Volatile
Volatile C++ ve Java'da farklı manalara gelir. Java ve C#'ta volatile kelimesi multithreading için kullanılır. Başka bir yerde işe yaramaz. Java'da çalışma prensibini açıklayan bir yazı burada.

Yazma İşlemi
Volatile bir değişkene yazma işlemi gerçekleşince diğer tüm thread'lerin en son değeri göreceği garanti edilir. Bunun nasıl gerçekleşeceği ise açık değil.

Bariyer kullanarak şöyle yapılır. Her yazma işleminden sonra bir store bariyeri kullanılır. Böylece yazılan değeri diğer işlemciler de görebilirler.

Okuma İşlemi
Bariyer kullanarak şöyle yapılır. Her okuma işleminden önce bir load (acquire) bariyeri kullanılır. Böylece diğer işlemcilerin yazdıkları değerler görülebilir.

Volatile ve Final
Volatile ve final mantık olarak bir araya gelemeyeceği için derleyici hata verir. final değerin değişmeyeceğini belirtir. Volatile ise değişebileceğini belirtir. Dolayısıyla çelişirler.
private final volatile AtomicInteger size; //1, Not compile



24 Haziran 2016 Cuma

JPA Anotasyonları

Giriş
JPA anotasyonları için şu satırı dahil etmek gerekir.
import javax.persistence.*;
Entity
JPA Entity yazısına taşıdım.

Table
JPA Table yazısına taşıdım.

Column
JPA Column yazısına taşıdım.

Enumerated
Enumerated EnumType ile beraber kullanılır. EnumType string ise enum'un string değeri veritabanına yazılır. Ordinal ise sayısal bir değer yazılır.
Enumerated haliyle Column ile birlikte olmak zorundadır.
Örnek:
@Enumerated(EnumType.STRING)
@Column(name = "LOGIC")
public BusinessLogic getLogic(){...usual getter...}
Id
JPA Id yazısına taşıdım.

JoinColumn
MayToOne, OneToMany, OneToOne ilişkilerde kullanılır. Eğer sütun ismi tanımlanmazsa şu isim kullanılır.
<field_name>_<id_column_name>
Yani aşağaki örnekte Address sınıfı için field_name address id_column_name ise id kabul edilir ve sütun ismi address_id olur.
@ManyToOne
@JoinColumn
public Address getAddress() { 
    return address; 
}
NamedQuery
Şöyle yaparız.
@Entity
@NamedQuery(name="NodeType.FetchNodeTypes", query="Select C FROM NodeType")
public class NodeType {...}
Bu sorgu daha sonra EntityManager.createNamedQuery() metodu ile kullanılabilir.

NamedNativeQuery
Şöyle yaparız
@NamedNativeQueries({
  @NamedNativeQuery(name = "Card.findPrefix",
    query = "SELECT DISTINCT(FLOOR(c.number/10000)) FROM Card c")
Bu sorgu daha sonra EntityManager.createNamedQuery metodu ile kullanılabilir.

Embeddable
JPA Embeddable yazısına taşıdım.

IdClass
JPA IdClass yazısına taşıdım

Size
Bean validation için kullanılıyor. String'in uzunluğu 13 karakter olmalı.
@Entity
public class MyEntity {

  @Column(name = "MY_FIELD_2")
  @Size(min = 13, max = 13)
  private String myField2;
 
}

Temporal
java.util.Date sınıfının veritabanıyle kullanılabilmesini sağlar. Eğer alanı bu anotasyon ile işaretlemezsek kaydederken sütunun null olarak kaydedilebilir.

Timestamp olarak şöyle kullanılıyor.
@Temporal(TemporalType.TIMESTAMP)
public Date startDate;
Date olarak şöyle kullanılıyor.
@Temporal(TemporalType.DATE)
public Date startDate;
Transient
Şu satırı dahil ederiz.
import javax.persistence.Transient;
Açıklaması şöyle
This annotation specifies that the property or field is not persistent. It is used to annotate a property or field of an entity class, mapped superclass, or embeddable class.
Version
Optimistic lock için kullanılır.
JPA uses a version field in your entities to detect concurrent modifications to the same datastore record. When the JPA runtime detects an attempt to concurrently modify the same record, it throws an exception to the transaction attempting to commit last.
Version alanı genellikle long  yapılır.
@Entity
public class MyEntity implements Serializable {    

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @Version
    private long version;

    //...
}
Üretilen sql'de update cümlesi version bilgisini de içerir.
UPDATE MYENTITY SET ..., VERSION = VERSION + 1 WHERE ((ID = ?) AND (VERSION = ?))
Eğer arzu edilirse sütun ismi, açıklaması gibi şeyler de verilebilir. Hatta sütun ismi verilmesi mantıklı bile olabilir çünkü version kelimesi optlock yerine satırın kendi bilgisi gibi de anlaşılabilir.
@Version
@Column(name = "optlock", columnDefinition = "integer DEFAULT 0",nullable = false)
private long version = 0L;
OneToOne
JPA OneToOne İlişki yazısına taşıdım.

OneToMany
JPA ManyToOne İlişki yazısına taşıdım.

ManyToOne
Bir kedinin bir çok sahibi olabilir
@Entity
public class Cat {
  @Column(name = "OWNER_ID")
  private Long ownerId;

  @ManyToOne
  @JoinColumn(name = "OWNER_ID", insertable = false, updatable = false)
  private Owner owner;
}

ManyToMany
JPA ManyToMany İlişki yazısına taşıdım.

@MappedSuperClass
@MappedSuperClass yazısına taşıdım.

22 Haziran 2016 Çarşamba

Transformer Sınıfı

constructor
TransformerFactory nesnesi tarafından oluşturulur. Şöyle yaparız.
Transformer transformer = TransformerFactory.newInstance().newTransformer();
setOutputProperty metodu
Şöyle yaparız.
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transform metodu
Şöyle yaparız.
String myXML="<mytext>hiii</mytext>";
SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();
SoapHeader soapHeader = soapMessage.getEnvelope().getHeader();
Transformer transformer = ...;
StringSource s = new StringSource(myXML);
transformer.transform(s, soapHeader.getResult());
Şöyle yaparız.
DOMSource source = ...;
StreamResult result = ...;
transformer.transform(source, result);