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



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);






StreamResult Sınıfı

constructor
Şöyle yaparız.
StreamResult result = new StreamResult(new StringWriter());
Şöyle yaparız.
StreamResult consoleResult = new StreamResult(System.out);
getWriter metodu
Şöyle yaparız.
StringWriter writer = result.getWriter();

TransformerFactory Sınıfı

Giriş
Bir Transformer nesnesi oluşturmak için kullanılır.

getInstance metodu
Şöyle yaparız.
TransformerFactory transformerFactory = TransformerFactory.newInstance();
newTransformer metodu
Şöyle yaparız.
Transformer transformer = transformerFactory.newTransformer();

URI Sınıfı

toUrl metodu
Şöyle yaparız.
URI uriOfFileInZip = ...;
InputStream is = uriOfFileInZip.toURL().openStream();

21 Haziran 2016 Salı

JAX-Ws WebService

Giriş
Şu satırı dahil ederiz.
import javax.jws.WebService;
Şöyle yaparız.
@WebService(endpointInterface = "com.enterprise.ws.WebServiceInterface")
public class WebServiceImpl implements WebServiceInterface {

  @Resource
  WebServiceContext webServiceContext;

  @Override
  public String getHelloWorldAsString(String str) {
    ...
    return "...";
   
  }
}




JAX-WS Service Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.xml.ws.Service;
constructor
Şöyle yaparız.
URL wsdlUrl = new URL("http://localhost:8888/webservice/helloworld?wsdl");
//qualifier name ...
QName qname = new QName("http://ws.enterprise.javacodegeeks.com/", 
                         "WebServiceImplService");
Service service = Service.create(wsdlUrl, qname);
getPort metodu
Şöyle yaparız.
WebServiceInterface sayHello = service.getPort(WebServiceInterface.class);



20 Haziran 2016 Pazartesi

wsimport komutu

Giriş
wsimport aracının .Net dünyasında karşılığı svcutil aracıdır. Şuna benzer bir dizinde bulunur.
C:\Program Files\Java\jdk1.8.0_25\bin>wsimport.exe
-e seçeneği
Şöyle yaparız.
wsimport.exe -s e:\temp\javaws 
 http://localhost:8733/Design_Time_Addresses/BillingService/?wsdl
-keep seçeneği
Bu seçenek ile hem .class hem de .java dosyalarını üretiriz.
wsimport -keep http://example.com/webservice?wsdl

JPA IdClass

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Id;
Şöyle bir tablomuz olsun
detail
  primary key (master_id, name)  name string
  ...
Sınıfımızın PK anlarını göz önüne alarak şöyle kodlarız.
@Entity
@Table(name = "detail")
@IdClass(DetailIdPk.class)
class Detail {
  @Id
  int master;

  @Id
  String name;
}
@IdClass olarak belirtilmiş sınıfımızı şöyle kodlarız.
class DetailIdPK implements Serializable {

  int master;

  String name;

}