26 Nisan 2018 Perşembe

Oracle JDBC Sürümleri

Giriş
Oracle sürümleri şöyle
Oracle 6  1988
Oracle 7   1992
Oracle 8   1997
Oracle 8i   1998
Oracle 9i  2001
Oracle 10g 2004
Oracle 11g Release 1 2007
Oracle 11g Release 2 2009
Oracle 12c Release 1 2013
Oracle 12c Release 2 2016
Oracle 18c 2018
Oracle 23c 2023

Oracle 23c 2023
Yeni gelen özellikler şöyle
1. Java and Pipelined Database Operations
2. JDBC Reactive Extensions and Database Pipelining
Oracle Oracle JDBC release 21.1 ile geliyor. Flow API sağlıyor

JDBC
Benim kullandığım JDBC sürücüleri şöyle.

Oracle Database 12.2.0.1 - ojdbc8.jar
Oracle Database 12c Release 1 - ojdbc7.jar,ojdbc6.jar
Oracle Database 11g - ojdbc6.jar

Çok eski sürümlerde classes12.jar (yani JDK 2) ile çalışan kütüphane kullanılırdı.

Jar Arasında Farklılıklar
Açıklaması şöyle
A single ojdbc jar (e.g., ojdbc8.jar, ojdbc11.jar) for all use cases (production, debug, metrics). In other words, no more ojdbc8_g.jar or ojdbc11_g.jar for debugging, no more ojdbc8dms.jar or ojdbc11dms.jar for the Oracle Dynamic Monitoring Service (DMS) metrics, and no more ojdbc8dms_g.jar or ojdbc11dms_g.jar for DMS debugging
Yani eskiden 
1. _g.jar uzantısına sahip jar dosyaları debugging
2. dms.jar uzantısına sahip jar dosyaları Oracle Dynamic Monitoring Service
3. dms_g.jar uzantısına sahip jar dosyaları Oracle Dynamic Monitoring Service Debugging
için kullanılırdı

Logging
Açıklaması şöyle
the core JDBC Jars (i.e., ojdbc8.jar or ojdbc11.jar) include the logging capabilities which need to be turned on using the following properties:
-Doracle.jdbc.diagnostic.enableLogging=true
in addition, the location of the logging configuration file
-Djava.util.logging.config.file=./logging.config
logging.config dosyası şöyle
handlers = java.util.logging.ConsoleHandler
oracle.jdbc.level = FINEST
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter =
oracle.jdbc.diagnostics.OracleSimpleFormatter
Diagnose-on-first-failure
Bu özelliğin çalışması için Logging etkin olmalı. Açıklaması şöyle 
this feature diagnoses the first occurrence of a failure. It records the critical execution state in memory, then dumps the recording on error. It’s ON by default however, you may disable it either by setting the CONNECTION_PROPERTY_ENABLE_DIAGNOSE_FIRST_FAILURE property to FALSE (the default value) or via the DiagnosticMBeans interface.
Diagnose-on-first-failure ve Güvenlik
Açıklaması şöyle
For security, each diagnosability feature has two modes, public and sensitive.

In the public mode, these features do not record or persist sensitive information. This severely limits the amount of information captured and reduces the effectiveness of the diagnosability features.

In the sensitive mode, these features record and persist sensitive information. Java developers can share traces with the redaction of sensitive data. The sensitive mode can only be enabled by a privileged user and is controlled by two switches; one for enabling and another one for permitting. Only the permit property is required. If the permit property is included in the java command line then sensitive mode can be enabled and disabled programmatically at runtime, or via MBean. It can also be enabled via the enable property as shown.

-Doracle.jdbc.diagnostic.enableSensitiveDiagnostics=true
-Doracle.jdbc.diagnostic.permitSensitiveDiagnostics=true



11 Nisan 2018 Çarşamba

UNION ALL

Giriş
Farklı tablolardan gelen aynı tipteki sütunları birleştirir. UNION ile benzeşir.

Örnek
Şöyle yaparız.
select 'A', count(*) from a where id = 4
union all
select 'B', count(*) from b where id = 4
union all
select 'C', count(*) from c where id = 4
union all
select 'D', count(*) from d where id = 4
Çıktı olarak şunu alırız
Table name       No of occurence

A                   5
B                   7
C                   3
D                   1

9 Nisan 2018 Pazartesi

Java - AQjmsSession Arayüzü

Giriş
javax.jms.TopicSession arayüzünden kalıtır.

createByteMessage metodu
javax.jms.BytesMessage nesnesi döner. Şöyle yaparız.
AQjmsSession jms_sess = ...;
BytesMessage messAll = jms_sess.createBytesMessage();
createPublisher metodu
javax.jms.Topic nesnesini parametre olarak alır. Şöyle yaparız.
Topic queueTopic= jms_sess.getTopic("JMSUSER","AQ_QUEUE5");
AQjmsTopicPublisher publisherAq = (AQjmsTopicPublisher)jms_sess
  .createPublisher(queueTopic);
getTopic metodu
javax.jms.Topic nesnesi döner. Şöyle yaparız. Kullanıcı ismi ve kuyruk ismini parametre olarak alır.
AQjmsSession jms_sess = ...;
Topic queueTopic =jms_sess.getTopic("jmsuser", "AQ_QUEUE5");

Java - AQjmsTopicPublisher Arayüzü

constructor
Şöyle yaparız.
Connection con = ...;
TopicConnection tc_conn =AQjmsTopicConnectionFactory.createTopicConnection(con);
tc_conn.start();
TopicSession jms_sess = tc_conn.createTopicSession(true, Session.SESSION_TRANSACTED);
Topic queueTopic= ((AQjmsSession )jms_sess).getTopic("JMSUSER","AQ_QUEUE5");
AQjmsTopicPublisher publisherAq = (AQjmsTopicPublisher)jms_sess.
  .createPublisher(queueTopic);
publish metodu - BytesMessage 
Şöyle yaparız.
BytesMessage messAll = jms_sess.createBytesMessage();
messAll.writeUTF("Message for all subscribers");
publisherAq.publish(messAll);

con.commit();
tc_conn.close();
con.close();         
publish metodu - BytesMessage + AQjmsAgent
Şöyle yaparız.
BytesMessage messOnlyForGreen = jms_sess.createBytesMessage();
messOnlyForGreen.writeUTF("Message only for green");

publisherAq.publish(messOnlyForGreen, new AQjmsAgent[]{new AQjmsAgent("GREEN", null)} );
con.commit();
tc_conn.close();
con.close();