Search code examples
tomcatodatadenodo

How do I install the Denodo OData service in the embedded tomcat container in Denodo 5.5?


I'd like to install the custom OData service into the embedded Tomcat web container in Denodo 5.5.

I've found that the instructions Denodo provides are somewhat confusing, and thus I'm posting to stackoverflow and including the answer in hopes that someone else finds it useful.


Solution

  • Shutdown Denodo

    $DENODO_HOME/bin/vqlserver_shutdown.sh
    sleep 15
    ps -ef | grep denodo | grep -v grep
    

    Obtain the Denodo OData Service.zip

    Download the Denodo OData Service.zip file and unzip it to /tmp such that you have:

    /tmp/denodo-odata2-service-5.5-20160129
    

    'Install' the OData Service

    # copy the war file to the webapps folder
    cp /tmp/denodo-odata2-service-5.5-20160129/denodo-odata2-service-5.5.war $DENODO_HOME/resources/apache-tomcat/webapps/
    
    # Copy the odata xml to the embedded tomcat container
    cp /tmp/denodo-odata2-service-5.5-20160129/scripts/denodo-odata2-service-5.5.xml $DENODO_HOME/resources/apache-tomcat/conf/DenodoPlatform-5.5/localhost/
    
    # Copy the startup/shutdown scripts to the bin folder
    cp /tmp/denodo-odata2-service-5.5-20160129/scripts/*.sh $DENODO_HOME/bin
    chmod u+rwx $DENODO_HOME/bin/odata*.sh
    
    # change the DENODO_HOME directory in the $DENODO_HOME/bin/odata*.sh scripts
    vi $DENODO_HOME/bin/odata_service_startup.sh   # look for DENODO_HOME and update it
    vi $DENODO_HOME/bin/odata_service_shutdown.sh  # look for DENODO_HOME and update it
    

    Make appropriate configuration changes

    # Add a reference to the Denodo JAR in the catalina.properties file
    vi $DENODO_HOME/resources/apache-tomcat/conf/catalina.properties
    # Look for shared.loader
    # Add this to the end of the shared.loader line:
    ${catalina.base}/../../lib/vdp-jdbcdriver-core/denodo-vdp-jdbcdriver.jar
    
    # update the server.xml.template file to include a JNDI resource by putting the following in the <GlobalNamingResources> section
    vi $DENODO_HOME/resources/apache-tomcat/conf/server.xml.template
    
    <Resource name="jdbc/VDPdatabase"
        auth="Container"
        type="javax.sql.DataSource"
        username="admin" password="***********"
        url="jdbc:vdb://localhost:9999/admin"
        driverClassName="com.denodo.vdp.jdbc.Driver"
        initialSize="5" maxWait="5000"
        maxActive="120" maxIdle="5"
        validationQuery="select * from dual()"
        poolPreparedStatements="true"/>
    
    # Change the permissions on server.xml.template so other people can't read your denodo admin password:
    chmod go-rwx $DENODO_HOME/resources/apache-tomcat/conf/server.xml.template
    chmod go-rwx $DENODO_HOME/resources/apache-tomcat/conf/server.xml
    
    # update the context.xml to point to the JNDI resource in and also add the properties to the <Context> section (add all of the below to the <Context> section)
    vi $DENODO_HOME/resources/apache-tomcat/conf/context.xml
    
    <ResourceLink name="jdbc/VDPdatabase"
        global="jdbc/VDPdatabase"
        type="javax.sql.DataSource"/>
    
    <Environment type="java.lang.String" name="odataserver.address" value="/denodo-odata.svc"/>
    <Environment type="java.lang.Integer" name="server.pageSize" value="1000"/>
    <Environment type="java.lang.Boolean" name="enable.adminUser" value="true"/>
    

    Start it up and make sure it works

    $DENODO_HOME/bin/vqlserver_startup.sh
    # wait for Denodo and Tomcat to start
    
    # deploy/start the odata webapp
    $DENODO_HOME/bin/odata_service_startup.sh
    
    # Go to 
    http://hostname:9090/denodo-odata2-service-5.5/denodo-odata.svc/databasename
    (but change "databasename" to your virtual database name)
    

    Additional Considerations

    Since you are now using the embedded Tomcat web container and the odata service is running in it, every time you stop/start Denodo you will need to also stop/start the OData service

    Stopping Denodo

    1. First, stop the OData Service via $DENODO_HOME/bin/odata_service_shutdown.sh
    2. Then stop Denodo via $DENODO_HOME/bin/vqlserver_shutdown.sh

    Starting Denodo

    1. First, Start Denodo via $DENODO_HOME/bin/vqlserver_startup.sh
    2. Then, start the OData service via $DENODO_HOME/bin/odata_service_startup.sh

    Admin User Access

    If you don't want the admin user to have access via odata, then change the setting in the $DENODO_HOME/resources/apache-tomcat/conf/context.xml file and restart.