29 Aralık 2016 Perşembe

SAXSource Sınıfı

Giriş
javax.xml.transform.Source arayüzünü gerçekleştirir.

constructor
Şöyle yaparız.
String str = ...;
XMLReader reader = ...;
Source er = new SAXSource(reader, new InputSource(new StringReader(str)));


StAX XMLInputFactory Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.xml.stream.XMLInputFactory;
StaX çatısına ait sınıflardan birisidir. XMLEventReader veya XMLStreamReader nesnelerini yaratmak için kullanılır.

createXMLEventReader metodu
XMLEventReader nesnesi döner. Şöyle yaparız.
XMLEventReader reader = inputFactory
  .createXMLEventReader(new FileInputStream("F://test.xml"));
createXMLStreamReader metodu
XmlStreamReader nesnesi döner. Şöyle yaparız.
ReaderInputStream ris = new ReaderInputStream(new StringReader("<tag>...</tag>"));
XMLStreamReader reader = ınputFactory.createXMLStreamReader(ris, "UTF-8");
newInstance metodu
Şöyle yaparız.
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
setProperty metodu - IS_REPLACING_ENTITY_REFERENCES
XML içinde 5 tane önceden tanımlı entity vardır. Bu entity'lerin gerçek karakterler ile yer değiştirilmesini istemiyorsak şöyle yaparız. Böylece XML içindeki aslında XML olmayan ancak HTML'den gelen &nbsp değiştirilmeden bize verilir.
inputFactory.setProperty(
                XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
setProperty - IS_COALESCING
Eğer entity'lerin gerçek karakterler ile yer değiştirmesini istiyorsak şöyle yaparız. Böylece XML içindeki &amp karakteri & haline gelir.
inputFactory.setProperty("javax.xml.stream.isCoalescing", true);
Bu string yerine XMLInputFactory.IS_COALESCING kullanılmalı.


setProperty metodu - SUPPORT_DTD
Şöyle yaparız.
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);


25 Aralık 2016 Pazar

ConcurrentSkipListMap Sınıfı

Giriş
TreeMap Sınıfının concurrent dünyaya uyarlanmış hali gibi düşünülebilir.

ConcurrentSkipListMap aynı zamanda bir ConcurrentNavigableMap ve NavigableMap. 

Kendi içinde red-black tree yerine skip list kullanıyor. QT dokümantasyonunda QMap'in de skip list kullandığı yazılı. why does qmap uses skiplist instead ob rb-tree? sorusunda da konuyla ilgili bilgi var. Sebep olarak ise
skip-lists result in less code in the executable and require less memory per node.
yazılmış. 

ceilingEntry metodu
When should I use ConcurrentSkipListMap? sorusunda ise ConcurrentSkipListMap'in ConcurrentHashMap'e göre ekle/çıkar/al işlemlerinde biraz daha yavaş olabileceği ancak elemanları sıralı tutması ve ceilingEntry(), ceilingKey() metodlar sunduğu için sıralı erişimin gerektiği yerlerde daha hızlı olduğu söylenmiş.

computeIfAbsent metodu
Açıklaması şöyle
ConcurrentSkipListMap is a thread-safe map and it will not through ConcurrentModificationException in recursive method while using computeIfAbsent().
Örnek
Şu kod ConcurrentModificationException fırlatmaz. Şöyle yaparız. Ama HashMap kullansaydık exception fırlatılırdı
Map<Integer, BigInteger> cache = new ConcurrentSkipListMap<>(
          Map.of(0, BigInteger.ZERO, 1, BigInteger.ONE)
);
public BigInteger fibonacci(int n) {
  return cache.computeIfAbsent(n,
    key -> fibonacci(key - 1).add(fibonacci(key - 2)));
}

24 Aralık 2016 Cumartesi

Embeded Jetty

Server Sınıfı
Şu satırı dahil ederiz.
import org.eclipse.jetty.server.Server;
constructor
Dinlenilecek port belirtilir. Şöyle yaparız.
Server server = new Server(8112);
setHandler metodu
Şöyle yaparız.
ServletContextHandler context = new ServletContextHandler(...);
...
server.setHandler(context);
start ve join metodları
Şöyle yaparız.
try {
  server.start();
  server.join();
} catch (Throwable t) {
  t.printStackTrace(System.err);
}
ServletContextHandler Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.eclipse.jetty.servlet.ServletContextHandler;
Açıklaması şöyle
Using a ServletContextHandler will create and manage the common ServletContext for all of the Servlets, Filters, Sessions, Security, etc within that ServletContextHandler. This includes proper initialization, load order, and destruction of the components affected by a ServletContext as well.
Constructor - server + path
Şöyle yaparız.
ServletContextHandler contextHandler = new ServletContextHandler(server, "/");
Constructor - options
Şöyle yaparız.
ServletContextHandler contextHandler = 
new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
Context'e parent ve path vermediğimiz için daha sonra şöyle yaparız.
contextHandler.setContextPath("/");
server.setHandler(contextHandler);
addServlet metodu
Kendi servlet sınıfımız için şöyle yaparız.
contextHandler.addServlet(MyServlet.class, "/path");
Eğer Jersey ile birleştirmek istersek şöyle yaparız.
ServletHolder jerseyServlet = contextHanlder.addServlet(
 org.glassfish.jersey.servlet.ServletContainer.class, "/webapi/*");
Jersey servlet sınıfına bazı parametreler vermek gerekir. Şöyle yaparız. Böylece com.example paketindeki @Path olarak işaretli sınıflar yüklenir.
jerseyServlet.setInitOrder (1);
jerseyServlet.setInitParameter(
"jersey.config.server.provider.packages","com.example");
Sadece bir sınıfı yüklemek istersek şöyle yaparız.
jerseyServlet.setInitParameter(
"jersey.config.server.provider.classnames",Foo.class.getCanonicalName());
DefaultServlet Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.eclipse.jetty.servlet.DefaultServlet;
Şöyle yaparız.
ServletHolder staticServlet = context.addServlet(DefaultServlet.class,"/*");
staticServlet.setInitParameter("resourceBase","src/main/webapp");
staticServlet.setInitParameter("pathInfoOnly","true");
ServletHolder Sınıfı
Şu satırı dahil ederiz.
import org.eclipse.jetty.servlet.ServletHolder;
Sanırım bu sınıf Jetty içindeki internal sınıflardan birisi ve direkt kullanılmamalı.

constructor
Şöyle yaparız.
ServletContextHandler context = new ServletContextHandler(...);
...
ServletHolder h = new ServletHolder(new ServletContainer());
setInitParameter metodu
Jersey ile kullanmak için şöyle yaparız.
h.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "resources");



22 Aralık 2016 Perşembe

JavaMail Session Sınıfı

Session Sınıfı
Bu sınıfı kullanmak için şu satır dahil edilir.
import javax.mail.Session;
E-posta için kullanılan bir kaç protokol çeşidir var. Bunlar SMPT (Simple Mail Transfer Protocol), IMAP (Internet Message Access Protocol), POP3 (Post Office Protocol Version 3). Session sınıfının esas amacı bizi bu protokollerden izole etmektir. Session sınıfı, MAPI, NNTP gibi diğer e-posta protokollerini desteklemiyor.

SMTP e-posta göndermek içindir. POP3 sadece e-posta okumak içindir.

Genel kullanım şekli
Örneğin Session sınıf aracılığıyla Transport,Store, gibi nesneleri elde ederiz.
Session session = ...;
MimeMessage message = new MimeMessage(session);
...
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
getInstance metodu
Parametre olarak Properties ve Authenticator alır. Sadece Properties vermek için şöyle yaparız.
Properties props = new Properties();
props.setProperty(...,...);
Session session = Session.getInstance(props, null);
Properties ve Authenticator vermek için şöyle yaparız.
Properties props = new Properties();
prop.put("...", "...");
Session session = Session.getInstance(props,
  new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password);
    }
});
getDefaultInstance metodu
getDefaultInstance() herkesle paylaşıldığı için kullanılmamalı. Metodun için şuna benziyor. defaultSession nesnesinin null ise yaratıldığı mevcut ise tekrar kullanıldığı görülebilir.
public static synchronized Session getDefaultInstance(Properties props,
                                       Authenticator authenticator) {
  if (defaultSession == null)
    defaultSession = new Session(props, authenticator);
  else {
    // have to check whether caller is allowed to see default session
    if (defaultSession.authenticator == authenticator)
               ;       // either same object or both null, either way OK
    else if (defaultSession.authenticator != null &&
             authenticator != null &&
             defaultSession.authenticator.getClass().getClassLoader() ==
             authenticator.getClass().getClassLoader())
               ;       // both objects came from the same class loader, OK
     else
       // anything else is not allowed
       throw new SecurityException("Access to default session denied");
  }
  return defaultSession;
}
getTransport metodu
Şöyle yaparız.
Transport transport = session.getTransport ("smtp");
getStore metodu
Store nesnesi döner. Şöyle yaparız.
Store store = session.getStore();
setDebug metodu
Şöyle yaparız.
session.setDebug(true);

Store Sınıfı
Store sınıfından Folder nesnesi elde ederiz.