Skip to content

Commit 99ab1dc

Browse files
authored
oracleAQ: Added python for Lab2 (#358)
* update oracleAQ * update homeDirectory * update code * update oracleAQ * update code * updated AQ for rule based * update * updated code * update oracleAQ * update oracleAQ * update code for Chetan test * updateAQ * update oracleAQ * update oracleAQ * update code changes * update oracleAQ * update oracleAQ * update oracleAQ * remove killall java * remove .classpath, .factorypath, .project * update oracleAQ * added JSON to TEQ * added Python code for Lab2 * Update .gitignore * create pythonAQ * add java home path fix * python clean up * Update .gitignore
1 parent 60cddac commit 99ab1dc

File tree

10 files changed

+151
-8
lines changed

10 files changed

+151
-8
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,3 +501,5 @@ workshops/eventmesh-teq-kafka/**/deploy/
501501
workshops/eventmesh-teq-kafka/cloud-setup/database/
502502
workshops/eventmesh-teq-kafka/cloud-setup/terraform_dbsystem/
503503
workshops/eventmesh-teq-kafka/wallet/
504+
workshops/oracleAQ/aqJava/.project
505+
workshops/oracleAQ/aqJava/.classpath

workshops/oracleAQ/cleanupAQ.sql

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ EXECUTE DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table =>'aq_JSON_queueTable');
1717
EXECUTE DBMS_AQADM.STOP_QUEUE ( queue_name =>'aq_multiconsumer_raw');
1818
EXECUTE DBMS_AQADM.DROP_QUEUE ( queue_name =>'aq_multiconsumer_raw');
1919
EXECUTE DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table =>'aq_multiconsumer_raw_queueTable');
20-
21-
--Clean up object type
22-
DROP TYPE obj_typ;
2320
/
24-
select name, queue_table, dequeue_enabled,enqueue_enabled, sharded, queue_category, recipients from all_queues where OWNER='DBUSER' and QUEUE_TYPE<>'EXCEPTION_QUEUE';
21+
select name, queue_table,queue_category, recipients from all_queues where OWNER='JAVAUSER' and QUEUE_TYPE<>'EXCEPTION_QUEUE';
2522
/
2623
EXIT;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cd $ORACLEAQ_HOME ;
2+
sqlplus /@${DB_ALIAS} @cleanupAQPython.sql
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--Clean up all objects related to the obj type:
2+
EXECUTE DBMS_AQADM.STOP_QUEUE ( queue_name => 'PYTHON_ADT_Q');
3+
EXECUTE DBMS_AQADM.DROP_QUEUE ( queue_name => 'PYTHON_ADT_Q');
4+
EXECUTE DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table => 'PYTHON_ADT_QTable');
5+
6+
--Clean up all objects related to the RAW type:
7+
EXECUTE DBMS_AQADM.STOP_QUEUE ( queue_name =>'PYTHON_RAW_Q');
8+
EXECUTE DBMS_AQADM.DROP_QUEUE ( queue_name =>'PYTHON_RAW_Q');
9+
EXECUTE DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table =>'PYTHON_RAW_QTable');
10+
11+
--Clean up all objects related to the JSON type:
12+
EXECUTE DBMS_AQADM.STOP_QUEUE ( queue_name =>'PYTHON_JMS_Q');
13+
EXECUTE DBMS_AQADM.DROP_QUEUE ( queue_name =>'PYTHON_JMS_Q');
14+
EXECUTE DBMS_AQADM.DROP_QUEUE_TABLE ( queue_table =>'PYTHON_JMS_QTable');
15+
16+
select name, queue_table,queue_category, recipients from all_queues where OWNER='JAVAUSER' and QUEUE_TYPE<>'EXCEPTION_QUEUE';
17+
/
18+
EXIT;

workshops/oracleAQ/cleanupTEQ.sql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ Execute DBMS_AQADM.drop_transactional_event_queue(queue_name =>'rawType_TEQ',for
99
--Cleans up all objects related to the priority queue: */
1010
Execute DBMS_AQADM.STOP_QUEUE ( queue_name => 'jsonType_TEQ');
1111
Execute DBMS_AQADM.drop_transactional_event_queue(queue_name =>'jsonType_TEQ',force=> TRUE);
12-
13-
--Clean up object type */
14-
DROP TYPE Message_type;
1512
/
1613
select name, queue_table, dequeue_enabled,enqueue_enabled, sharded, queue_category, recipients from all_queues where OWNER='DBUSER' and QUEUE_TYPE<>'EXCEPTION_QUEUE';
1714
/
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cd $ORACLEAQ_HOME ;
2+
sqlplus /@${DB_ALIAS} @createAQPython.sql
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
CREATE OR REPLACE TYPE ADT_BOOK AS OBJECT (
2+
Title VARCHAR2(100),
3+
Authors VARCHAR2(100),
4+
Price NUMBER(5,2)
5+
);
6+
/
7+
--Python ADT queue
8+
BEGIN
9+
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'PYTHON_ADT_QTable', queue_payload_type => 'ADT_BOOK');
10+
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'PYTHON_ADT_Q', queue_table => 'PYTHON_ADT_QTable');
11+
DBMS_AQADM.START_QUEUE ( queue_name => 'PYTHON_ADT_Q');
12+
END;
13+
/
14+
--Python RAW queue
15+
BEGIN
16+
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'PYTHON_RAW_QTable', queue_payload_type => 'RAW');
17+
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'PYTHON_RAW_Q', queue_table => 'PYTHON_RAW_QTable');
18+
DBMS_AQADM.START_QUEUE ( queue_name => 'PYTHON_RAW_Q');
19+
END;
20+
/
21+
--Python JMS queue
22+
BEGIN
23+
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'PYTHON_JMS_QTable', queue_payload_type => 'SYS.AQ$_JMS_TEXT_MESSAGE');
24+
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'PYTHON_JMS_Q', queue_table => 'PYTHON_JMS_QTable');
25+
DBMS_AQADM.START_QUEUE ( queue_name => 'PYTHON_JMS_Q');
26+
END;

workshops/oracleAQ/env.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export COMPARTMENT="oracleAQ";
2+
export DB_NAME="aqdatabase";
3+
export PLSQL_DB_USER1="admin";
4+
export JAVA_DB_USER="dbUser";
5+
export ORACLEAQ_HOME=${HOME}/${COMPARTMENT};
6+
export TNS_ADMIN=$ORACLEAQ_HOME/wallet
7+
export USER_DEFINED_WALLET=${TNS_ADMIN}/user_defined_wallet
8+
export TNS_ADMIN_FOR_JAVA=$ORACLEAQ_HOME/wallet_java
9+
export JDBC_URL=jdbc:oracle:thin:@${DB_ALIAS}?TNS_ADMIN=${TNS_ADMIN_FOR_JAVA}
10+
export DB_ALIAS="aqdatabase_tp"
11+
export TNS_ADMIN=${TNS_ADMIN_FOR_JAVA}
12+
export SQLCL=/opt/oracle/sqlcl/lib
13+
export CLASSPATH=${SQLCL}/oraclepki.jar:${SQLCL}/osdt_core.jar:${SQLCL}/osdt_cert.jar
14+
export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

workshops/oracleAQ/pythonAQ.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import os
2+
import logging
3+
from os import environ as env
4+
import cx_Oracle
5+
import threading
6+
import time
7+
import oci
8+
import base64
9+
10+
connection = cx_Oracle.connect(dsn=env.get('DB_ALIAS'))
11+
cursor = connection.cursor()
12+
13+
#ADT payload
14+
book_type = connection.gettype("ADT_BOOK")
15+
queue = connection.queue("PYTHON_ADT_Q", book_type)
16+
17+
book = book_type.newobject()
18+
book.TITLE = "Quick Brown Fox"
19+
book.AUTHORS = "The Dog"
20+
book.PRICE = 123
21+
props = connection.msgproperties(payload=book, correlation="correlation-py", expiration=30, priority=7)
22+
23+
print("1) Sample for Classic Queue : ADT payload")
24+
print("Enqueue one message with ADT payload : ",book.TITLE)
25+
queue.enqOne(props)
26+
connection.commit()
27+
print("Enqueue Done!!!")
28+
29+
#deqOptions should have consumername in case of multiconsumer queue
30+
#queue.deqOptions.consumername = "PYTHON_ADT_SUBSCIBER"
31+
options = connection.deqoptions()
32+
options.wait = cx_Oracle.DEQ_NO_WAIT
33+
msg = queue.deqOne()
34+
connection.commit()
35+
print("Dequeued message with ADT payload : ",msg.payload.TITLE)
36+
print("Dequeue Done!!!")
37+
print("-----------------------------------------------------------------")
38+
39+
#RAW PAYLOAD
40+
print("\n2) Sample for Classic queue : RAW payload")
41+
42+
queue = connection.queue("PYTHON_RAW_Q")
43+
PAYLOAD_DATA = [
44+
"The first message"
45+
]
46+
for data in PAYLOAD_DATA:
47+
print("Enqueue message with RAW payload : ",data)
48+
queue.enqone(connection.msgproperties(payload=data))
49+
50+
connection.commit()
51+
print("Enqueue Done!!!")
52+
53+
msg = queue.deqOne()
54+
connection.commit()
55+
print(msg.payload.decode(connection.encoding))
56+
print("Dequeued message with RAW payload : ",msg.payload)
57+
print("Dequeue Done!!!")
58+
print("-----------------------------------------------------------------")
59+
60+
print("\n3) Sample for Classic queue : JMS payload")
61+
#get the JMS type
62+
jmsType = connection.gettype("SYS.AQ$_JMS_TEXT_MESSAGE")
63+
headerType = connection.gettype("SYS.AQ$_JMS_HEADER")
64+
user_prop_Type = connection.gettype("SYS.AQ$_JMS_USERPROPARRAY")
65+
66+
queue = connection.queue("PYTHON_JMS_Q",jmsType)
67+
#create python object for JMS type
68+
text = jmsType.newobject()
69+
text.HEADER = headerType.newobject()
70+
text.TEXT_VC = "JMS text message"
71+
text.TEXT_LEN = 20
72+
text.HEADER.APPID = "py-app-1"
73+
text.HEADER.GROUPID = "py-grp-1"
74+
text.HEADER.GROUPSEQ = 1
75+
text.HEADER.PROPERTIES = user_prop_Type.newobject()
76+
print("Enqueue one message with JMS payload : ",text.TEXT_VC)
77+
queue.enqOne(connection.msgproperties(payload=text))
78+
connection.commit()
79+
print("Enqueue Done!!!")
80+
81+
msg = queue.deqOne()
82+
connection.commit()
83+
print("Dequeued message with JMS payload :",msg.payload.TEXT_VC)
84+
print("Dequeue Done!!!")
85+
print("-----------------------------------------------------------------")

workshops/oracleAQ/setup.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export TNS_ADMIN=$ORACLEAQ_HOME/wallet
1111
export USER_DEFINED_WALLET=${TNS_ADMIN}/user_defined_wallet
1212
export TNS_ADMIN_FOR_JAVA=$ORACLEAQ_HOME/wallet_java
1313
TNS_WALLET_STR="(MY_WALLET_DIRECTORY="$TNS_ADMIN")"
14-
14+
export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
1515

1616
# fetch user's OCID
1717
ROOT_COMPARTMENT_OCID=$(oci iam compartment list --all --compartment-id-in-subtree true --access-level ACCESSIBLE --include-root --raw-output --query "data[?contains(\"id\",'tenancy')].id | [0]")

0 commit comments

Comments
 (0)