30 Eylül 2016 Cuma

Stopwatch Sınıfı

createStarted metodu
Şöyle yaparız.
Stopwatch stopwatch = Stopwatch.createStarted();
stop metodu
Şöyle yaparız.
stopwatch.stop ();

long totalWorkTimeMillis = stopwatch.elapsedMillis ();


28 Eylül 2016 Çarşamba

Response Sınıfı

readEntity metodu
Şöyle yaparız.
Response response = ...;
String result = response.readEntity(String.class);

Invocation.Builder Arayüzü

post metodu
Şöyle yaparız.
Foo foo = new Foo();
user.setUserName("euler");
user.setPassword("password");
Response response = invocation.builder. .post(Entity.json(foo));


WebTarget Arayüzü

request metodu
Şöyle yaparız.
Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_JSON);

Client Arayüzü

target metodu
Şöyle yaparız.
Client client = ...;
WebTarget target = client.target("http://localhost:8080/ldap/webapi/Auth");



ClientBuilder Sınıfı

newClient
Şöyle yaparız.
Client client = ClientBuilder.newClient ();


27 Eylül 2016 Salı

NamedNodeMap Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.w3c.dom.NamedNodeMap;
getLength metodu
Şöyle yaparız.
NamedNodeMap attributes = ...;

for (int i = 0; i < attributes.getLength(); i++) {
  Node attribute = attributes.item(i);
  if (attribute.getNodeName() == "id") {
    String x = attribute.getNodeValue();
  }  
}

Element Sınıfı

Giriş
Node sınıfından kalıtır. Node'ları dolaşırken Element olduğu şöyle anlaşılır.
Node nNode = nList.item(index);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
  Element eElement = (Element) nNode;
  ...
}
getAttribute metodu
Şöyle yaparız.
Element element = ...;
String attribute = element.getAttribute("isNull");
Şöyle bir element için 85 döner. Attribute yoksa "" yani boş string döner.
<marks isNull= "85" />
getTextContent metodu
Şöyle yaparız.
Element element = ...;
String text = element.getTextContent();
Şöyle bir element için 95 döner.
<marks>95</marks>

Marshaller Sınıfı

constructor
JaXBContext tarafından yaratılır.Şöyle yaparız.
JAXBContext context = ...;
Marshaller marshaller = context.createMarshaller();
marshall metodu - DOMResult
Şöyle yaparız.
DOMResult result = new DOMResult();marshaller.marshal(foo, result);
return ((Document)res.getNode()).getDocumentElement();
DOMResult nesnesini Document nesnesine çevirmek için şöyle yaparız.
Document document = (Document)result.getNode();
marshall metodu - File
Şöyle yaparız.
File file = new File("test.xml");
marshaller.marshal(foo, file);
marshall metodu - Writer
Şöyle yaparız.
StringWriter writer = new StringWriter();
marshaller.marshal(foo, writer);
setProperty metodu
Şöyle yaparız.
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

KeyStore.PrivateKey Sınıfı

getPrivateKey metodu
Şöyle yaparız.
KeyStore.PrivateKeyEntry privateKey = ...;
PrivateKey pkey = privateKey.getPrivateKey());
PrivateKey Cipher nesnesine geçilir.
Cipher cipher = Cipher.getInstance("...");
cipher.init(Cipher.DECRYPT_MODE, pkey);

22 Eylül 2016 Perşembe

Transport Sınıfı

Giriş
Şu satırı dahil ederiz
import javax.mail.Transport;
Soyut bir sınıftır. Kalıtan sınıflardan birisi şu olabilir.
com.sun.mail.smtp.SMTPTransport
constructor
Eğer static sendMessage metodunu kullanmayacaksak şöyle yaparız.
Session session = ...;

Message message = ...;

Transport transport = session.getTransport("smtp");
transport.connect(host, from, password);
transport.sendMessage (message, message.getAllRecipients());
transport.close();
send metodu - static
Açıklaması şöyle
Send is a static method that creates and manages its own connection. Any connection associated with any Transport instance used to invoke this method is ignored and not used. This method should only be invoked using the form Transport.send(msg);, and should never be invoked using an instance variable.
Şöyle yaparız.
Message message = ...;
...
Transport.send (message);
send metodu - static - Message + userName + password
Şöyle yaparız.
String user = "myaccount@gmail.com";
String pass = "mypassword";

Message message = ...;
...
Transport.send (message, user, pass);

CopyOnWriteArrayList Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.CopyOnWriteArrayList;
Açıklaması şöyle
As name suggest CopyOnWriteArrayList creates copy of underlying ArrayList with every mutation operation e.g. add or set. Normally CopyOnWriteArrayList is very expensive becauseit involves costly Array copy with every write operation but its very efficient if you have a List where Iteration outnumber mutation e.g. you mostly need to iterate the ArrayList and don't modify it too often.
constructor
Şöyle yaparız.
Collection<String> c = ...;
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(c);




21 Eylül 2016 Çarşamba

Static Constructor

Giriş
Static Constructor aynı zamanda "Static Initialization Block", "Static Initializer" olarak ta bilinir.

Tanımlama
Şöyle yaparız.
public class Foo {
  static {
    System.out.println("Foo class loaded!");
  }
  ...
}
Ne Zaman Çalışır
Açıklaması şöyle
Class Loading and initialization are 2 different things. A class can be loaded but not initialized until it is really necessary. Static initializers are run only when a class is being initialized <> NOT loaded, "initialized"
Şu satır çalıştırmaz, çünkü sadece loading yapar.
Class<Foo> c = Foo.class;
Çalışması için şöyle yaparız.
Class<?> c = Class.forName ("Foo");
Çalışması için şöyle yaparız.
Foo f = new Foo ();


JPA @Id Anotasyonu

@Id
Şu satırı dahil ederiz.
import javax.persistence.Id;
Eğer @Id için GeneratedValue kullanmak istemezsek şöyle yaparız. Bu durumda primary key değerlerini kendimiz yönetiriz.
@Id
@Column(unique=true)
private int id;
@GeneratedValue
Şu satırları dahil ederiz.
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
GeneratedValue - AUTO
Açıklaması şöyle
The AUTO generation strategy is the default, and this setting simply chooses the primary key generation strategy that is the default for the database in question, which quite typically is IDENTITY, although it might be TABLE or SEQUENCE depending upon how the database is configured. The AUTO strategy is typically recommended, as it makes your code and your applications most portable.
Şöyle yaparız.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "room_id")
private Integer id;
GeneratedValue - IDENTITY
Açıklaması şöyle
The IDENTITY option simply allows the database to generate a unique primary key for your application. No sequence or table is used to maintain the primary key information, but instead, the database will just pick an appropriate, unique number for Hibernate to assign to the primary key of the entity. With MySQL, the first lowest numbered primary key available in the table in question is chosen, although this behavior may differ from database to database.
MySql'de identity şöyle kullanılır. id sütununu auto_increment olarak yaratılması gerekir.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
GeneratedValue - SEQUENCE
Açıklaması şöyle
Some database vendors support the use of a database sequence object for maintaining primary keys. To use a sequence, you set the GenerationType strategy to SEQUENCE, specify the name of the generator annotation, and then provide the @SequenceGenerator annotation that has attributes for defining both the name of the sequence annotation, and the name of the actual sequence object in the database.
Oracle'da şöyle kullanılır. Önce veritabanında sequence yaratılır. Oracle Sequence her sorgulandığında yeni bir sayı verir.
create sequence sub_seq
       MINVALUE 1 
       MAXVALUE 999999999999999999999999999 
       START WITH 1
       INCREMENT BY 1 
       CACHE 100 
       NOCYCLE ;
Sınıfı kodlamak için şöyle yaparız.
@Id
@SequenceGenerator(name="sub_seq", initialValue=1, allocationSize=1,
sequenceName="sub_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sub_seq")  
private Integer pid;
Burada SequenceGenerator aslında javax.persistence.SequenceGenerator. Hibernate bu sınıfı Hilo algoritmasını kullanarak gerçekleştiriyor. Bu da sayılarda boşluklara sebep oluyor. Boşluklardan kaçınmak için initialValue = 1, ve allocationSize = 1 vermek gerekiyor.

Eğer sequence mevcut değilse şöyle bir hata alırız.
ERROR: could not read a hi value - you need to populate the table: hibernate_sequence