Building CountTableRows When the Store is Secure

This section explains how to compile all of the Java classes that should be included in the build. If you will be running CountTableRows against a secure store like that deployed in the Deploying a Secure Store appendix, in addition to including the CountTableRows program, the build also needs to include security credential files as well as the KVSecurityCreation program and KVSecurityUtil class used to perform various security related functions when executing CountTableRows.

To compile the KVSecurityCreation and KVSecurityUtil classes needed to run the secure version of CountTableRows, type the following at the command line:

cd /opt/oracle/nosql/apps/kv

javac -classpath \
    /opt/oracle/kv-ee/lib/kvstore.jar:examples \
    examples/hadoop/table/KVSecurityCreation.java

javac -classpath \
    /opt/oracle/kv-ee/lib/kvstore.jar:examples \
    examples/hadoop/table/KVSecurityUtil.java

Once KVSecurityCreation and KVSecurityUtil have been compiled, CountTableRows itself can be compiled in the same way as that shown in the previous section; that is,

javac -classpath \
    /opt/cloudera/parcels/CDH/jars/commons-logging-1.1.3.jar: \
    /opt/cloudera/parcels/CDH/jars/
        hadoop-common-3.0.0-cdh6.3.0.jar: \
    /opt/cloudera/parcels/CDH/jars/ \
        hadoop-mapreduce-client-core-3.0.0-cdh6.3.0.jar: \
    /opt/cloudera/parcels/CDH/jars/ \
        hadoop-annotations-3.0.0-cdh6.3.0.jar: \
    /opt/cloudera/parcels/CDH/jars/ \
        hadoop-yarn-api-3.0.0-cdh6.3.0.jar: \
    /opt/oracle/kv-ee/lib/kvclient.jar:examples \
        examples/hadoop/table/CountTableRows.java

The command lines above will produce the following class files:

/opt/oracle/nosql/apps/kv/examples/hadoop/table/
    CountTableRows.class
    CountTableRows$Map.class
    CountTableRows$Reduce.class
    KVSecurityUtil.class
    KVSecurityCreation.class

Unlike the non-secure case, the build artifacts needed to deploy CountTableRows in a secure environment include more than just a single JAR file containing the generated class files. For the secure case, it is necessary to package some artifacts for deployment to the client side of the application that communicates with the store, whereas other artifacts will need to be packaged for deployment to the server side of the application.

Although there are different ways to achieve this "separation of concerns" when deploying a given application, the Model For Building & Packaging Secure Clients appendix of this document presents one particular model you can use to package and deploy the artifacts for applications that will interact with a secure store. With this in mind, the sections in this document related to executing CountTableRows against a secure store each assume that the application has been built and packaged according to the instructions presented in the Model For Building & Packaging Secure Clients appendix.