TOGAF 9 certification preparation advices & exam tips

I have passed TOGAF 9 level 1 foundation, and level 2 certification on Mar-2013 and would like to share the experience with everyone. The following is the recommended steps from my perspective to prepare and pass the exam:

1- Watch tutorial video
You need to know what is Enterprise Architect? What is TOGAF? Overview of the framework so you can decide if you will benefit from this certification. A good introduction is offered here.

2- Get a quick look to TOGAF 9.1 specs
The specification is shared online here, please have a look at the content; no need to get into deep details in this stage. 

3- Attend TOGAF course
TOGAF doesn't necessitate that you get a course to attend the exam, but I think you will benefit from the course very much for the following reasons:
    a- Course takes 5 days, you will find the first two days, you just need to switch your mind to think the TOGAF way, even if you have previous architecture experience. Having someone answering your question will be of great help.
    b- Course offers TOGAF slides, exam material, template that you will really benefit from.
    c- You will benefit from instructor if he has past experience in implementing TOGAF.
    d- Most people attending such course have considerable long experience in IT in general, seeking excellence in their work, you will really enjoy the talk and you will benefit from expanding your professional network as well.
TOGAF has accredited course calendar listed here. I prefer if you select 5 days course for level 1 & 2 as course is already long and 4 days won't be sufficient.

4- Stick to a study schedule
I have prepared a study schedule using Microsoft Project 2010 shared here (For Microsoft Project 2007 shared here). It has specific study calendar “TOGAF Study Calendar” of 4hrs/day, 5 days/week. I encourage using it and modifying the project calendar to suite your availability. This link provides a detailed explanation of how to change the calendar in Microsoft Project 2010. I think 2 weeks after the course will be enough to take level 1 exam.

5- Solving exam questions
You need to solve exam questions before showing for the exam. If you attended a course, usually you will get exam material for your preparation. Others are available as below:
•    The Open Arch.
•    Technology trend analysis practice test.
•    TOGAF free quiz.
•    TOGAF 9 class.
The above are just samples, you can search and find lots more.

6- Exam level 1 foundation advices

a- ESL: You can have extended time for the exam by selecting English as Second Language (ESL).

b- After tutorial and before starting the exam: Draw ADM, as you will get questions asking you with phase letter.

c- Method of elimination is best used for exam, for tough questions, pick any answer from what you think are probably correct before marking the question for review; i.e. never leave a question without an answer.

d- Level 1 is not covering all topics, it is highlighted in study schedule with yellow color, and also indicated as (Level 1).


7- Exam level 2 certified advices (Specs open book)

a- ESL: You can have extended time for the exam by selecting English as Second Language (ESL).

b- A MUST topics for exam (ADM processes & guidelines & techniques - Transition planning techniques - Architecture Capability Framework - Iteration to ADM - Example set of architecture principals specs section 23.6 - Architectural artifacts ch 35).

c- I recommend reading the scenario twice to determine (State of EA office, Management direction, stakeholders concerns, current phase you are dealing with).

d- When you know the phase you are in, you can check the process guidelines, approach, or steps to guide your answer.

e- In answering questions that you should address concerns, or select best architecture artifacts for stakeholders, I recommend using below table as follows:
    i- While reading the statement of the question, write the concerns from multiple stakeholders in the columns.
    ii- Write multiple options in rows.
    iii- For each option, check if it satisfies the concern raised or not and add a mark X or √.
    iv- Select choice that best suites the question & have √ on all columns.

Concern / stakeholder 1 Concern / stakeholder 2 Concern / stakeholder 3 Concern / stakeholder 4
Option A X √ X √
Option B √ √ √ √
Option C X √ √ √
Option D X X X X

I hope this will help someone there.

PMP Preparation advices & exam tips

Last updated 15-Mar-2019


I have passed PMP 4th exam on Dec-2012 and would like to share the experience with everyone. The following is the recommended steps from my prospective to prepare and pass the exam:

1- Download PMP handbook pdf
This is a free download from PMI, the link might change for the book; anyway you should find it in PMP certification main page. This book is a MUST read. Always check for newer version as this document changes frequently.

2- Attend PMP course
When you read PMP Handbook, it is a must to have “35 contact hours of formal education”, there are mainly two ways for this:
    a- Attend formal course for PMP in your area, but usually it costs you too much, unless it is included within your company training schedule.
    b- Distance learning by purchasing an online course, and at the end you get your certificate by passing an exam.

I have searched the Internet for quite some time and found the cheapest and really good deal The PMP Exam Simulator. It is around 100 USD (Currently, 139 USD as of Mar-2019), and has great value; lots of people will recommend it to you, other courses I found online was above 250 USD. You can easily watch the video on your computer or other portable devices.


3- Purchase good preparation PMP
Reading a preparation book is very important to clearly understand the idea of PMP and its related tasks, PMBOK is considered tenser and towards exam objectives, I find myself try to understand or seeking more declaration about a subject in preparation book if I can’t understand from PMBOK.

You will find most PMP holders refer to two books for certification:
1.    Head First PMP 2nd edition.
2.    PMP Exam Prep, 6th Edition: Rita's Course in a Book for Passing the PMP Exam.

You will find lots of comparison between two books, I prefer that your read those comparisons before purchasing, but most of them mention that Rita is more directed to exam and teaches you as classic text book, while Head first uses its great way for teaching, but it sometimes miss some minor information.
At the end I picked Head first, and I purchased e-book copy for 50% discount from Oreilly using a coupon, so, I suggest before purchasing from whatever website always try to get a coupon from Internet.

4- Becoming PMI.org member
When you read PMP Handbook, fees section, you will find fees differ if you are PMI member or not. All people will tell you better become a member as you will receive discounts on exams, re-examination and renewals plus some more extra stuff. Please create a new account in PMI before applying for individual membership that will cost you 129 USD.

5- Download PMBOK Guide 4th edition
As per your PMI subscription you are eligible to download free electronic water marked copy of PMBOK guide 4th edition (A guide to the project management body of knowledge), it is found in this link. There are other good documents in the same link, but not mandatory for PMP exam.

6- Stick to a study schedule
One of the biggest mistakes that you will do is that you get the certification in relax mode, this may take months or even years. My advice will be making a schedule for the preparation till the day of the exam including solving exams. I have prepared a study schedule using Microsoft Project 2010 shared here (For Microsoft Project 2007 shared here). It has specific study calendar “PMP Study Calendar” of 4hrs/day, 5 days/week. I encourage using it and modifying the project calendar to suite your availability. This link provides a detailed explanation of how to change the calendar in Microsoft Project 2010. You will find that most PMP holder mention that you can have the certification in 3-4 months which matches the project schedule mentioned before.

7- Solving exam questions
You need to solve lots of exam questions before showing for the exam. Following is list of available free:
•    PMP Exam Self-Assessment Test (75 questions).
•    About.com Tech certification (20 questions).
•    BestSampleQuestions.com PMP Sample (160 questions).
•    Test prep review (15 questions).
The above are just samples, you can search and find lots more.

8- Real Exam advices

a- Language aid: If English is not your mother tongue language, apply for free language aid in the exam, this sometimes help in some types of questions.

b- Exam time is limited, you need to be fast: You have 4 hours to answer 200 questions, i.e. you have only 72 secs per question (1st hr --> you should have reached 50 questions, 2nd hr --> 100 questions, 3rd hr --> 150 questions) you should check these milestone in the exam in-order to keep moving as fast as you can.

c- Exam duration is 15 mins tutorial, 4 hours exam, 15 mins survey. The first 15 mins you will have complete tutorial on how to mark and review exam, and use of calculator before you finish this tutorial (As exam will start after this) take the remaining time for writing down all equations you know in a clear paper the testing center have provided you. This is really helpful as you might get distracted from long time in exam and will consume time trying to remember them.

d- Method of elimination is best used for exam, for tough questions, pick any answer from what you think are probably correct before marking the question for review; i.e. never leave a question without an answer.

c- Sometimes for long questions, it is better to start reading the last part sentence to know what it require, before reading a whole paragraph as it is giving stoo much unneeded information.

d- When a question is asking what you will use for a process, it is asking you to pick up input, tool, technique that’s part of the process.

e- Take your time answering “Which is not” question. I think the best way to eliminate confusion is to remove the word “NOT” in the phrase and write down your answers then convert it x --> √ & vise versa. This worked for me very well.

I hope this will help someone there.

Configure Squirrel SQL to connect to Oracle DB

I'm adding the configuration for setting Squirrel SQL 3.3.0 to connect to Oracle DB 11gr2. I'm using thin connectivity (No need for client installation in your machine).

Steps:
1- Open Driver list from left menu, scroll down till you find "Oracle Thin Driver", you will notice red x mark next to it denoting the driver is still not configured.
2- After selecting "Oracle Thin Driver" click "Modify the Selected Driver" denoted by pencil.
3- Click "Extra Class Path" tab.
4- Click "Add" and select 1 jar file from %Oracle_DB_CLIENT_INSTALL%\jdbc\lib\ojdbc6_g.jar
5- Click Ok, and we are done defining the driver.
6- Now create an alias for the DB using previous driver and providing URL, username, & password.

Note:
No need to have Oracle client for setup, all you need is just the driver jar files. You can download from this Oracle link.

If you are using JDK 5 while running Squirrel SQL, the jar file will be %Oracle_DB_CLIENT_INSTALL%\jdbc\lib\ojdbc5_g.jar

Configure Squirrel SQL to connect to IBM DB2

"Squirrel SQL" is a great light weight generic SQL client that I have started using for more than 7 years now.

This is how to configure Squirrel SQL 3.3.0 to connect to DB2 server, I have installed IBM DB2 admin client 9.7 - 64 bit software on my Windows 7 enterprise SP1. You will find two types of DB2 drivers APP & NET, most recommended way is to use type 4 JDBC driver (thin) that actually doesn't require client installation, but require proper jar files and associated license.

Steps:
1- Open Driver list from left menu, click the plus sign "Create a New Driver".
2- Type "IBM DB2 Universal Driver" in "Name" textbox.
3- Type "jdbc:db2://<server>:<port>/<dbname>" in "Example URL" textbox.
4- Type "com.ibm.db2.jcc.DB2Driver" in "Class Name" editable dropdown list.
5- Click "Extra Class Path" tab.
6- Click "Add" and select two jar files from %DB2_INSTALL%\java\db2jcc.jar & %DB2_INSTALL%\java\db2jcc_license_cu.jar
7- Click Ok, and we are done defining the driver.
8- Now create an alias for the DB using previous driver and providing URL, username, & password.

Your driver dialog should look like:


Oracle DB to IBM MQ connector

In my quest to find a way for communicating Oracle DB to IBM MQ, I found my answer using Oracle Messaging Gateway (OMG) using this provided article from IBM developer works.

It seems working, and actually good idea, but main issue was the cost versus the functionality required. My main need is either to send a text message to queue (Asynchronous / Synchronous) i.e. (Send and forget / Send and Receive). Price by the time of this article was around (xx,000 USD per CPU) !!!!

So, I have decided to look into how to build custom code to solve this issue, and be platform independent as I have situation where Oracle is running on AIX, as well as Windows. As, I have developed several Java stored procedure before I thought it will be a good idea and will do the trick, and I was right :)

I have tried this using Oracle 11gr2 on Windows 2008r2 having IBM MQ 7.0.0.2 installed on same server and another AIX 6.1 server as well. I think the steps can be applied on different versions as long you understand the below concepts.
I- Concepts:
1- You need to know what version of Oracle JVM, you are running, this can simply done by issuing the following command:
%ORACLE_HOME%\dbhome_1\jdk\bin>java -version
For Oracle 11g, the following result should be shown:
java version "1.5.0_17"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_17-b04, mixed mode)

This is important as Oracle JVM is just SE (Standard Edition) while we need to import Java Enterprise Edition into Oracle to be able to connect to MQ, so now you know which version of Enterprise should be imported.

2- Oracle JVM doesn't support JNI, so connectivity to IBM MQ can never be in Binding mode and should be in client mode, as binding mode use native OS call so Java classes will need to load dll on windows which is not allowed.

3-If u r a Java developer u will always think of modifying CLASSPATH to include external Java libraries of MQ, but actually Oracle JVM is not working with same concept, and all libraries should be loaded into Oracle DB schema. For more details; I think better read this Oracle page from documentation.

4- Oracle supports loading jar files but not nested jar files (jar files containing other jar files).

II- Required Jar files:
My trial was based on asktom old posting it didn't provide complete solution but the idea which is the most important part in finding the solution, which is trying to load jar by jar and looking into errors to identify dependency on other jar files till I get my main jar (com.ibm.mq.jar) file imported to DB without errors.

I have done this practice and found below list of required jar files:
Jar name Description and Location
javaee-api-5.0.0.jar Java Enterprise edition
This version should match Oracle JVM version.
Available here
com.ibm.msg.client.commonservices.jar IBM message client common services
This is inside content of another jar, but Oracle loadjava utility can’t load nested jar files, so this file needs extraction.
%IBM_MQ%\java\lib\OSGi\com.ibm.msg.client.osgi.jms_7.0.1.3.jar\com.ibm.msg.client.commonservices.jar
com.ibm.mq.commonservices.jar IBM MQ common services
%IBM_MQ%\java\lib\com.ibm.mq.commonservices.jar
com.ibm.mq.pcf.jar IBM MQ PCF
%IBM_MQ%\java\lib\com.ibm.mq.pcf.jar
com.ibm.mq.headers.jar IBM MQ headers
%IBM_MQ%\java\lib\com.ibm.mq.headers.jar
com.ibm.mq.jmqi.jar IBM MQ jmqi
%IBM_MQ%\java\lib\com.ibm.mq.jmqi.jar
com.ibm.mq.jar IBM MQ
%IBM_MQ%\java\lib\com.ibm.mq.jar
commons-codec-1.3.jar Apache commons codec
Used for converting RAW to HEX and vice versa for printing MQ message id, we are using very small functionality from the jar so upgrade is not required unless actually needed.
Download from apache common codec

III- User creation & Permissions:
1- Create user to have all related jars (Or use your own user but make sure to have required privileges) & java classes loaded into “ORAMQ”:
create user ORAMQ identified by <password>;

2- Grant roles to user:
grant connect to ORAMQ;
grant resource to ORAMQ;
grant debug connect session to ORAMQ;

3- Grant Java permissions to user:
Call dbms_java.grant_permission( 'ORAMQ', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
Call dbms_java.grant_permission( 'ORAMQ', 'SYS:java.net.SocketPermission', '<QMANAGER_HOST>:<QMANAGER_LISTENER>', 'connect,resolve' );
Commit;
<QMANAGER_HOST>It should be replaced by Queue manager machine name or IP.
<QMANAGER_LISTENER>It should be replaced by Queue manager listener.

IV- Loading external jars:
1- Loading Java Enterprise to Oracle:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-1-javaee-api-5.0.0.jar.log %INSTALL_DIR%\javaee-api-5.0.0.jar -resolve

exiting : Failures occurred during processing

2- Loading IBM message client common services:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-2-com.ibm.msg.client.commonservices.jar.log %INSTALL_DIR%\com.ibm.msg.client.commonservices.jar -resolve

Classes Loaded: 87
Resources Loaded: 16
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

3- Loading IBM MQ common services:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-3-com.ibm.mq.commonservices.jar.log %INSTALL_DIR%\com.ibm.mq.commonservices.jar –resolve

Classes Loaded: 76
Resources Loaded: 15
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 76
Errors: 0

4- Loading IBM MQ PCF:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-4-com.ibm.mq.pcf.jar.log %INSTALL_DIR%\com.ibm.mq.pcf.jar -resolve

exiting : Failures occurred during processing

5- Loading IBM MQ common services:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-5-com.ibm.mq.headers.jar.log %INSTALL_DIR%\com.ibm.mq.headers.jar -resolve

exiting : Failures occurred during processing

6- Loading IBM MQ JMQI:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-6-com.ibm.mq.jmqi.jar.log %INSTALL_DIR%\com.ibm.mq.jmqi.jar -resolve

exiting : Failures occurred during processing

7- Loading IBM MQ:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-7-com.ibm.mq.jar.log %INSTALL_DIR%\com.ibm.mq.jar -resolve

Classes Loaded: 117
Resources Loaded: 15
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 117
Errors: 0

The above is important validation, as this is the jar that is been called from Java utility, it should compile without any errors.


8- Loading Apache commons codec:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-8-commons-codec-1.3.jar.log %INSTALL_DIR%\commons-codec-1.3.jar -resolve

Classes Loaded: 25
Resources Loaded: 8
Sources Loaded: 0
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

V- Loading Java Stored Procedure:
1- MQReasonCodeResolver.java: This class is mainly adding helpful functionality in MQException to return representative string better than error code:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-9-MQReasonCodeResolver.java.log %INSTALL_DIR%\MQReasonCodeResolver.java –resolve

Classes Loaded: 0
Resources Loaded: 0
Sources Loaded: 1
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

2- MQClient.java: This class is the main class responsible for MQ connectivity:
%ORACLE_HOME%\dbhome_1\BIN\loadjava -user ORAMQ/ORAMQ -verbose -fileout %INSTALL_DIR%\loadjava-9-MQClient.java.log %INSTALL_DIR%\MQClient.java –resolve

Classes Loaded: 0
Resources Loaded: 0
Sources Loaded: 1
Published Interfaces: 0
Classes generated: 0
Classes skipped: 0
Synonyms Created: 0
Errors: 0

VI- Publish as PL/SQL Stored Procedure:
   PROCEDURE MQ_SEND_AND_RECEIVE(P_HOST            IN VARCHAR2,
                                 P_LISTENER        IN NUMBER,
                                 P_QMCHANNEL       IN VARCHAR2,
                                 P_CCSID           IN NUMBER,
                                 P_QMANAGER        IN VARCHAR2,
                                 P_QUEUE           IN VARCHAR2,
                                 P_MESSAGE         IN VARCHAR2,
                                 P_REPLYTOQUEUE    IN VARCHAR2,
                                 P_WAITMILLISECOND IN NUMBER,
                                 P_MSGID           OUT VARCHAR2,
                                 P_RESULT          OUT VARCHAR2,
                                 P_MESSAGE_REPLY   OUT VARCHAR2) AS
      LANGUAGE JAVA NAME 'MQClient.sendAndReceive(java.lang.String, int, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, java.lang.String[], java.lang.String[], java.lang.String[])';

   PROCEDURE MQ_SEND_AND_FORGET(P_HOST        IN VARCHAR2,
                                P_LISTENER    IN NUMBER,
                                P_QMCHANNEL   IN VARCHAR2,
                                P_CCSID       IN NUMBER,
                                P_QMANAGER    IN VARCHAR2,
                                P_QUEUE       IN VARCHAR2,
                                P_MESSAGE     IN VARCHAR2,
                                P_REPLY_QUEUE IN VARCHAR2,
                                P_MSGID       OUT VARCHAR2,
                                P_RESULT      OUT VARCHAR2) AS
      LANGUAGE JAVA NAME 'MQClient.sendAndForget(java.lang.String, int, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String[], java.lang.String[])';


Now u can use above PL/SQL procedures for communicating with IBM MQ from Oracle DB :)

Finally, I know this was a very long posting but I hope it will help someone out there.

Update 14-Nov-2017:
For resolving any issues, you will need to debug the Java code to identify the issue, I have provided another version MQClientDebug.java for logging with samples for logging in Win & Linux, you will just need to download and rename the file to MQClient.java, do whatever edit you want to log & trace and load it to Oracle as per step V.2.
You will need to tell Oracle to give write permission to Java for this purpose using the following command:
call DBMS_JAVA.grant_permission('ORAMQ', 'java.io.FilePermission', '<<ALL FILES>>', 'read ,write, execute, delete');
Commit;

Note this is for debugging only (Development environment, you should not deploy such version to production or grant Java this permission)