31 Ekim 2017 Salı

HttpServletRequestWrapper Sınıfı

Giriş
HttpServletRequest'i değiştiremeyiz ancak sarmalayarak farklı bir davranış elde edebiliriz.

getHeaders metodu
Şöyle yaparız
public class MyRequestWrapper extends HttpServletRequestWrapper{

  public MyRequestWrapper(HttpServletRequest request){
    super(request);
  }

  @Override 
  public String getHeaders(String name){
    if(name.equals("X-Forwarded-Proto"){
      return "xyz";
    }
    else{
      return ((HttpServletRequest)getRequest()).getHeaders(name);
    }
  }
}
Kullanım
Şöyle yaparız
public class MyFilter implements Filter{

  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {

    chain.doFilter(new MyRequestWrapper((HttpServletRequest)request), response);
  }
}

30 Ekim 2017 Pazartesi

DataSource Arayüzü

Giriş
Şu satırı dahil ederiz.
import javax.sql.DataSource;
Bu sınıf DriverManager  ile aynı işi görür. Açıklaması şöyle
The DataSource interface is implemented by a driver vendor. There are three types of implementations:
Basic implementation -- produces a standard Connection object
Connection pooling implementation -- produces a Connection object that will automatically participate in connection pooling. This implementation works with a middle-tier connection pooling manager.
Distributed transaction implementation -- produces a Connection object that may be used for distributed transactions and almost always participates in connection pooling. This implementation works with a middle-tier transaction manager and almost always with a connection pooling manager.
constructor - JNDI
Uygulama sunucusunu kullanarak şöyle yaparız.
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");
Şöyle yaparız.
DataSource ds = (DataSource) new InitialContext().lookup("jdbc/myDS");
constructor - C3P0
C3P0 yazısına taşıdım.

constructor - Apache DBCP
Apache DBCP yazısına taşıdım.

constructor - MySql
Maven için şöyle yaparız.
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
MySql JDBC sürücüsünün ismi MySQL Connector/J'dir. Bu jar dosyasının CLASSPATH içinde olması gerekir. Şöyle yaparız.
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");
constructor - Oracle
OracleDataSource Sınıfı yazısına taşıdım.

constructor - Oracle Universal Connection Pool
Açıklaması şöyle
Prior to 12c (i.e., 12.1.0.1.0), UCP could work with any version of Oracle JDBC driver. With the new pool, UCP 12.1.0.2, it is dependent on Oracle JDBC driver 12.1.0.2.
Şöyle yaparız.
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();

pds.setURL(...);
pds.setUser(...);
pds.setPassword(...);
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");

//Setting pool properties
pds.setInitialPoolSize(5);
pds.setMinPoolSize(5);
pds.setMaxPoolSize(20);

Connection conn = pds.getConnection();
Şöyle yaparız.
int usedConnectionCount = pds.getBorrowedConnectionsCount();
int availableConnectionCotun = pds.getAvailableConnectionsCount();
constructor - postgresql
Maven için şöyle yaparız.
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>9.4-1200-jdbc4</version>
</dependency>
constructor - tomcat
Tomcat JDBC Connection Pool yazısına  taşıdım.

getConnection metodu
Örnek
Şöyle yaparız.
Connection con = dataSource.getConnection();
Örnek
Şöyle yaparız.
try (Connection connnection = dataSource.getConnection()) {
  // use the connection
  connection.commit();
}



27 Ekim 2017 Cuma

Forward Reference

Giriş
Değişkenlerin henüz tanımlanmadan "this." şeklinde kullanılabilmesidir.

Örnek
Şu kod derlenmez.
class Foo {
  int a = b; //error
  int b;
}
Şöyle yaparız.
class Foo {
  int a = this.b; // no error. why ?
  int b;
}

25 Ekim 2017 Çarşamba

Swing JSplitPane Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.swing.JSplitPane;
JTabbedPaneJScrollPane, JSplitPane genel maksatlı container sınıflardır.

constructor - int
Panleller yanyana olsun istersek şöyle yaparız.
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);

24 Ekim 2017 Salı

Desktop Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.awt.Desktop;
browse metodu
Kurulu tarayıcı uygulamayı açmak için şöyle yaparız.
URI uri = new URI("http://www.google.com");
Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
  desktop = Desktop.getDesktop();
}

if (desktop != null)
  desktop.browse(uri);
getDesktop metodu
Şöyle yaparız.
Desktop desktop = Desktop.getDesktop();
isDesktopSupported metodu
Şöyle yaparız.

if (Desktop.isDesktopSupported()) {...}
isSupported metodu
Şöyle yaparız.
desktop.isSupported(Desktop.Action.MAIL) {...}
mail metodu
Kurulu e-posta uygulamasını açıp mail göndermek için şöyle yaparız. Uygulamaya to, subject gibi bilgileri de geçebiliriz.
Desktop desktop;
if (Desktop.isDesktopSupported() 
    && (desktop = Desktop.getDesktop()).isSupported(Desktop.Action.MAIL)) {
  URI mailto = new URI("mailto:john@example.com?subject=Hello%20World");
  desktop.mail(mailto);
} else {
  throw new RuntimeException("desktop doesn't support mailto;");
}
open metodu
Şöyle yaparız.
try {
  Desktop.getDesktop().open(new File("C:\\test.bat"));
} catch (IOException ex) {
  ...
}