Saturday, February 12, 2005

JCE provider

Dua Java Cryptography Extension (JCE) provider ini free of charge dan lisensinya simpel:

Java: Oracle Collection Object

Ini pengalaman partner saya. Dia bikin oracle object seperti ini:

CREATE OR REPLACE
TYPE T_SOMETHING AS OBJECT
(
PK_SOMETHING NUMBER,
SOMETHING VARCHAR2(10)
);
/

Kemudian dia bikin collection dari object tersebut:

CREATE OR REPLACE
TYPE "T_COLL_SOMTHING" AS TABLE OF T_SOMETHING;
/

Collection object tersebut digunakan sebagai return dari sebuah oracle function

CREATE OR REPLACE FUNCTION GET_SOMETHING(a_date DATE)
RETURN T_COLL_SOMTHING
IS
...
...
...dihapus...

Yang membuat pusing adalah, di develompent server (embedded WAS di WSAD 5.1.0/JRE1.3) code java dibawah ini menghasilkan nilai hexadesimal.

CallableStatement cs = conn.prepareCall("BEGIN ? := get_something( ? ); END;");
cs.registerOutParameter(1, Types.ARRAY, "T_COLL_SOMTHING");
cs.setDate(2, currDate);
cs.execute();

Array res = cs.getArray(1);
rs = res.getResultSet();

while (rs.next()){
java.sql.Struct struct = (java.sql.Struct)rs.getObject(2);
Object[] objectArray = struct.getAttributes();
String s = (String)objectArray[1];
System.out.print(s);
}

Jika varibel string "s" dikonversi dari hexa ke kode ascii, didapatkan hasil yang diinginkan.

URL dari google ini http://forums.oracle.com/forums/thread.jsp?forum=99&thread=228159&message=640498
menyarankan untuk menambahkan nls_ charset12.zip di classpath.

Tapi tampaknya nls_ charset12.zip tidak memecahkan masalah. Di production server (WAS 5.1/JRE 1.4.2 dengan menggunakan embedded data source) menghasilkan karakater "???"

Saya coba seperti ini :
     oracle.sql.STRUCT struct = (oracle.sql.STRUCT)rs.getObject(2);
Datum[] objectArray = struct.getOracleAttributes();
String s = ((oracle.sql.CHAR)objectArray[1]).getString();
System.out.print(s);
hasilnya adalah
java.sql.SQLException : Non supported character set: oracle-character-set-178
Bagaimana ini?

Saturday, February 05, 2005

Web service: standar dan organisasi

W3C develops interoperable technologies (specifications, guidelines, software, and tools) to lead the Web to its full potential. W3C creates a final specification or set of guidelines called Recommendation.

SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language), UDDI (Universal Description, Discovery and Integration), XML (EXtensible Markup Language), XML Schema

OASIS is a not-for-profit, international consortium that drives the development, convergence, and adoption of e-business standards. Final realease of their standard called OASIS Standard.

OASIS Standards are approved within an OASIS Committee, submitted for public review, implemented by at least three organizations, and finally ratified by the Consortium's membership at-large.

WSRP (OASIS Web Services for Remote Portlets), WSS (Web Services Security),UDDI Specification, WSRM (Web Services Reliable Messaging)

WS-I is an open industry organization chartered to promote Web services interoperability across platforms, operating systems and programming languages.

WS-I makes :
  • Profiles provide implementation guidelines for how related Web services specifications should be used together for best interoperability.
  • Sample Applications demonstrate Web services applications that are compliant with WS-I guidelines.
  • Testing Tools are used to determine whether the messages exchanged with a Web service conform to WS-I guidelines.
Basic Profile 1.1, Simple SOAP Binding Profile 1.0, Attachments Profile 1.0

Oracle: Hati-hati dengan data NULL

Jika kita jalankan procedure dibawah, apa yang akan kita dapatkan?

CREATE OR REPLACE PROCEDURE example AS
init NUMBER;
result NUMBER;
BEGIN
init := 25;
result := init + NULL;
dbms_output.put_line('Result = '|| result);
END;

Suatu operasi aritmetika pada varibel not null dengan varibel null, hasilnya null.

Apa yang kita dapatkan jika kita menjalankan query dibawah ini dan field column1 pada tabel my_table memiliki data NULL?

SELECT * FROM my_table WHERE column1 <> 0;

Kita tidak mendapatkan record yang column1 berisi NULL.

Karena saya bukan DBA atau database programmer, sempat juga membuat kesalahan . Jadi hati-hati dengan NULL. Baca Oracle "PL/SQL User's Guide and Reference" bagian Expressions and Comparisons, Handling Nulls:
  • comparisons involving nulls always yield NULL
  • applying the logical operator NOT to a null yields NULL
  • in conditional control statements, if the condition yields NULL, its associated sequence of statements is not executed

Oracle: Membuat synonym

Kadang kita perlu mempunyai user lain yang memiliki otoritas/role yang lain untuk mengakses suatu schema. Misalnya saja kita butuh user yang memiliki hak akses read only pada suatu schema.

Misalkan kita buat user FOO adalah user yang memiliki akses read only ke schema BAR. User A akan kerepotan dalam mengakses object di schema BAR, karena setiap dia akan mengakses object di schema BAR maka harus menuliskan BAR.NAMA_OBJECT.

Untuk memudahkannya kita bisa buat sysnonym dari table, view, procedure, function dan package object yang ada di schema BAR untuk si FOO.


set heading off;
set linesize 200;
set feedback off;

spool c:\create_synonym.sql

SELECT 'CREATE SYNONYM ' || object_name || ' FOR ' || owner ||'.'|| object_name || ';' script
FROM all_objects
WHERE owner = 'BAR'
AND object_type IN ('PROCEDURE','FUNCTION','TABLE','VIEW','PACKAGE');

spool off;

Followers