Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

JBoss Data Virtualization on OpenShift: Integrating a Remote SQL Server Database

<p>&nbsp;</p> <quillbot-extension-portal></quillbot-extension-portal>

January 4, 2018
Luigi Fugaro
Related topics:
Developer toolsKubernetes
Related products:
Developer ToolsetRed Hat JBoss Enterprise Application PlatformRed Hat OpenShiftRed Hat OpenShift Container Platform

    This example shows how on OpenShift to use a custom database driver to connect to an external database, through a Virtual Database (aka VDB). For this example, we will use a Microsoft SQL Server database (believe it or not, running on a Linux container), and the latest SQL Server JDBC driver.

    Prerequisites

    Before you begin, make sure you have the firewall and other security tools in a permissive mode.

    Here is the list of tools needed to follow the example:

    • Internet connection
    • Git client
    • OpenJDK 1.8
    • Docker
    • OpenShift oc command-line client

    You can download and unpack the OpenShift oc cli tool from the Red Hat Customer Portal for use on Linux, MacOSX, and Windows clients if you have an active OpenShift Enterprise subscription to access the downloads page.


    Editor's Note: Red Hat Container Development Kit includes a single-node OpenShift cluster you can run on your local machine. It is available by joining Red Hat Developers and downloading Red Hat Development Suite.


     

     

    Git clone the project

    To get the files needed for this example, clone my github repository:

    $ git clone https://github.com/foogaro/jdv-playground.git

    Then navigate to the ocp folder, as it will be our working directory.

    Setting up the SQL Server database

    Docker should be up and running, if it's not, start it as follows:

    $ service docker start
    Redirecting to /bin/systemctl start  docker.service

    Run SQL Server on a container as follows:

    $ docker run --name="sqlserver-loves-linux" -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=datavirt.2017' -p 1433:1433 -d microsoft/mssql-server-linux:latest
    Unable to find image 'microsoft/mssql-server-linux:latest' locally
    Trying to pull repository registry.access.redhat.com/microsoft/mssql-server-linux ...
    Trying to pull repository docker.io/microsoft/mssql-server-linux ...
    latest: Pulling from docker.io/microsoft/mssql-server-linux
    f6fa9a861b90: Downloading [======================>                            ] 20.91 MB/46.41 MB
    da7318603015: Downloading [==================================================>]    851 B/851 B
    6a8bd10c9278: Download complete
    d5a40291440f: Download complete
    bbdd8a83c0f1: Download complete
    3a52205d40a6: Downloading [========================>                          ] 14.45 MB/28.98 MB
    6192691706e8: Downloading [=====================>                             ] 16.51 MB/38.7 MB
    1a658a9035fb: Waiting
    97fa7291bda1: Waiting
    b27ed30c4cf6: Waiting

    Once done, you should have you database up and running, as follows:

    $ docker ps -aq
    CONTAINER ID        IMAGE                                                                                                                               COMMAND                  CREATED             STATUS                         PORTS                    NAMES
    d0bc27cdbf85        microsoft/mssql-server-linux:latest                                                                                                 "/bin/sh -c /opt/mssq"   2 hours ago         Up 2 hours                     0.0.0.0:1433->1433/tcp   sqlserver-loves-linux

    Once you have the database up and running, you can login to it and create the database, the schema, and the table, as follows:

    Create the database

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P datavirt.2017 -Q "CREATE DATABASE DATAVIRT2;"

    Create the table

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P datavirt.2017 -Q "USE DATAVIRT2;
    CREATE TABLE dbo.ITEMS ( 
      ITEM_ID INT NOT NULL, 
      ITEM_CODE VARCHAR(20) NOT NULL,  
      ITEM_DESCRITION VARCHAR(255) ,
      DT_INSERT DATETIME NOT NULL,
      DT_UPDATE DATETIME NOT NULL,
      CONSTRAINT PK_ITEM_ID PRIMARY KEY (ITEM_ID)
    );"

    Populate the table

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P datavirt.2017 -Q "USE DATAVIRT2;
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (1, '0000-0000-0000-0001', 'One', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (2, '0000-0000-0000-0002', 'Two', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (3, '0000-0000-0000-0003', 'Three', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (4, '0000-0000-0000-0004', 'Four', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (5, '0000-0000-0000-0005', 'Five', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (6, '0000-0000-0000-0006', 'Six', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (7, '0000-0000-0000-0007', 'Seven', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (8, '0000-0000-0000-0008', 'Eight', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (9, '0000-0000-0000-0009', 'Nine', GETDATE(), GETDATE());
    INSERT INTO dbo.ITEMS (ITEM_ID, ITEM_CODE, ITEM_DESCRITION, DT_INSERT, DT_UPDATE) VALUES (10, '0000-0000-0000-0010', 'Ten', GETDATE(), GETDATE());"

    Running OCP

    The OC client tool will use Docker to create all the nodes it needs, such as the docker registry, the HAProxy node, and so on.
    It's a good practice to have the OpenShift configuration persisted, so we don't need to eventually re-import tables, images and so on.
    Here is the script that we will use to launch OCP:

    oc cluster up \
    --host-data-dir="/opt/rh/oc-cluster-up/data"  \
    --host-pv-dir="/opt/rh/oc-cluster-up/pv"  \
    --host-volumes-dir="/opt/rh/oc-cluster-up/vol" \
    --logging=false \
    --metrics=true \
    --public-hostname="ocp.foogaro.com" \
    --routing-suffix="apps.foogaro.com" \
    --use-existing-config ocp-datavirt

    Feel free to change the hostname and the routing suffix to whatever you want. Also, make sure to add the hostname in your /etc/hosts file.
    If everything started properly, you should have an output similar to the following:

    Starting OpenShift using registry.access.redhat.com/openshift3/ose:v3.6.173.0.5 ...
    OpenShift server started.
    
    The server is accessible via web console at:
        https://ocp.foogaro.com:8443
    

    Login into OCP

    We can now start using the OpenShift Container Platform.
    First of all we need to login as system administrator and import the Docker images we need, as follows:

    oc login -u system:admin https://127.0.0.1:8443
    Logged into "https://127.0.0.1:8443" as "system:admin" using existing credentials.
    
    You have access to the following projects and can switch between them with 'oc project <projectname>':
    
      * default
        kube-public
        kube-system
        myproject
        openshift
        openshift-infra
    
    Using project "default".

    To access the platform as system administrator you don't need credentials, as it uses a certificate which was created during the installation.
    Once we are in, we can start importing the templates as follows:

    oc create -n openshift -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/jboss-image-streams.json
    oc create -n openshift -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/datavirt/datavirt63-basic-s2i.json
    oc create -n openshift -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/datavirt/datavirt63-extensions-support-s2i.json
    oc create -n openshift -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/datavirt/datavirt63-secure-s2i.json

    Now that we have the templates loaded into the platform, we can use them to create our project.
    First login as admin as follows:

    oc login -u admin -p admin
    Login successful.
    
    You don't have any projects. You can try to create a new project, by running
    
        oc new-project <projectname>
    

    Now create a project:

    oc new-project jdv-playground --description="JDV Playground on OCP" --display-name="JDV Playground"

    Now create the app, as follows:

    oc new-app --template=datavirt63-extensions-support-s2i \
    -p APPLICATION_NAME=datavirt-app \
    -p CONFIGURATION_NAME=datavirt-app-config \
    -p SOURCE_REPOSITORY_URL=https://github.com/foogaro/jdv-playground \
    -p SOURCE_REPOSITORY_REF=master \
    -p CONTEXT_DIR=ocp/vdbs \
    -p EXTENSIONS_REPOSITORY_URL=https://github.com/foogaro/jdv-playground \
    -p EXTENSIONS_REPOSITORY_REF=master \
    -p EXTENSIONS_DIR=ocp/drivers \
    -p EXTENSIONS_DOCKERFILE=Dockerfile \
    -p SERVICE_ACCOUNT_NAME=datavirt-service-account \
    -p HTTPS_SECRET=datavirt-app-secret \
    -p HTTPS_KEYSTORE=keystore.jks \
    -p HTTPS_KEYSTORE_TYPE=JKS \
    -p HTTPS_NAME=datavirt \
    -p HTTPS_PASSWORD=datavirt.2017 \
    -p TEIID_USERNAME=teiidUser \
    -p TEIID_PASSWORD=datavirt.2017 \
    -p MODESHAPE_USERNAME=modeshapeUser \
    -p MODESHAPE_PASSWORD=datavirt.2017 \
    -p IMAGE_STREAM_NAMESPACE=jdv-playground \
    -p JGROUPS_ENCRYPT_SECRET=datavirt-app-secret \
    -p JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks \
    -p JGROUPS_ENCRYPT_NAME=datavirt \
    -p JGROUPS_ENCRYPT_PASSWORD=datavirt.2017 \
    -p JGROUPS_CLUSTER_PASSWORD=datavirt.2017 \
    -p VDB_DIRS=

    This will automatically create the app and start building the image based on the code and resource files.
    While it is building the first images, we need to create a couple of secrets and link them to our application, as follows:

    oc create serviceaccount datavirt-service-account
    oc policy add-role-to-user view system:serviceaccount:jdv-play:datavirt-service-account -n jdv-playground
    oc secrets new datavirt-app-secret keystore.jks jgroups.jceks -n jdv-playground
    oc secrets new datavirt-app-config datasources.env -n jdv-playground
    oc secrets link datavirt-service-account datavirt-app-secret datavirt-app-config -n jdv-playground

    Next, create the following environment variables for the build config and the deployment config, as follows:

    oc env bc/datavirt-app VDB_DIRS=
    oc env dc/datavirt-app SQLSERVER_DS_DATABASE=DATAVIRT
    oc env dc/datavirt-app SQLSERVER_DS_JNDI=java:/SQLSERVER_DS
    oc env dc/datavirt-app SQLSERVER_DS_USERNAME=sa
    oc env dc/datavirt-app SQLSERVER_DS_PASSWORD=datavirt.2017
    oc env dc/datavirt-app SQLSERVER_DS_URL="jdbc:sqlserver://192.168.59.105:1433;DatabaseName=DATAVIRT;"
    oc env dc/datavirt-app SQLSERVER_DS_SERVICE_HOST=192.168.59.105
    oc env dc/datavirt-app SQLSERVER_DS_SERVICE_PORT=1433

    If you need to restart the build, do as follows:

    oc start-build datavirt-app-ext

    If you need to delete the serviceaccount, and the secrets, do as follows:

    oc delete secrets datavirt-app-secret
    oc delete secrets datavirt-app-config
    oc delete serviceaccount datavirt-service-account

    If you need to provide your own certificates, here is how I created mine:

    keytool -genkeypair -alias datavirt -storetype JKS   -keystore keystore.jks  -storepass "datavirt.2017" -keypass "datavirt.2017" --dname "CN=lfugaro,OU=Consulting,O=redhat.com,L=Raleigh,S=NC,C=US"
    keytool -genseckey  -alias datavirt -storetype JCEKS -keystore jgroups.jceks -storepass "datavirt.2017" -keypass "datavirt.2017" --dname "CN=lfugaro,OU=Consulting,O=redhat.com,L=Raleigh,S=NC,C=US"

    The web console

    If everything worked fine, you should be able to connect to the web console on port 8443, login as admin (password "admin" as well), and see something similar to the following image:

    alt text

    Getting the data out of the VDB

    JDV out-of-the-box exposes its data through the OData protocol version 2 and 4. The schema of the database can be obtained with the following URL:

    http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/$metadata

    Where odata4 specifies the protocol version to use; the first ITEMS refers to the VDB name, and the second ITEMS refers to the schema.
    Here is how the output should look like:

    <?xml version='1.0' encoding='UTF-8'?>
    <edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
        <edmx:Reference Uri="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/static/org.apache.olingo.v1.xml">
            <edmx:Include Namespace="org.apache.olingo.v1" Alias="olingo-extensions"/>
        </edmx:Reference>
        <edmx:DataServices>
            <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="ITEMS.1.ITEMS" Alias="ITEMS">
                <EntityType Name="ITEMS">
                    <Key>
                        <PropertyRef Name="ITEM_ID"/>
                    </Key>
                    <Property Name="ITEM_ID" Type="Edm.Int32" Nullable="false"/>
                    <Property Name="ITEM_CODE" Type="Edm.String" Nullable="false" MaxLength="20"/>
                    <Property Name="ITEM_DESCRITION" Type="Edm.String" MaxLength="255"/>
                    <Property Name="DT_INSERT" Type="Edm.DateTimeOffset" Nullable="false" Precision="4"/>
                    <Property Name="DT_UPDATE" Type="Edm.DateTimeOffset" Nullable="false" Precision="4"/>
                </EntityType>
                <EntityContainer Name="ITEMS">
                    <EntitySet Name="ITEMS" EntityType="ITEMS.ITEMS"/>
                </EntityContainer>
            </Schema>
        </edmx:DataServices>
    </edmx:Edmx>

    The XML code above shows the structure of the datatabse, along with the tables, which are the entities it has.
    We have one table named ITEMS. To access the table, point to the following URL:

    http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS

    Here is how the output should look:

    <?xml version='1.0' encoding='UTF-8'?>
    <a:feed xmlns:a="http://www.w3.org/2005/Atom" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"
            xmlns:d="http://docs.oasis-open.org/odata/ns/data" m:context="$metadata#ITEMS">
        <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS</a:id>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(1)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(1)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">1</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0001</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>One</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.797Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.797Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(2)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(2)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">2</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0002</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Two</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.797Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.797Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(3)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(3)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">3</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0003</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Three</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.8Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.8Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(4)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(4)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">4</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0004</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Four</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.807Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.807Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(5)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(5)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">5</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0005</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Five</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.807Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.807Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(6)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(6)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">6</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0006</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Six</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.81Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.81Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(7)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(7)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">7</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0007</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Seven</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.81Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.81Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(8)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(8)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">8</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0008</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Eight</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.817Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.817Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(9)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(9)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">9</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0009</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Nine</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.817Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.817Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
        <a:entry>
            <a:id>http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(10)</a:id>
            <a:title/>
            <a:summary/>
            <a:updated>2017-12-10T00:24:38Z</a:updated>
            <a:author>
                <a:name/>
            </a:author>
            <a:link rel="edit" href="http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS(10)"/>
            <a:category scheme="http://docs.oasis-open.org/odata/ns/scheme" term="#ITEMS.1.ITEMS.ITEMS"/>
            <a:content type="application/xml">
                <m:properties>
                    <d:ITEM_ID m:type="Int32">10</d:ITEM_ID>
                    <d:ITEM_CODE>0000-0000-0000-0010</d:ITEM_CODE>
                    <d:ITEM_DESCRITION>Ten</d:ITEM_DESCRITION>
                    <d:DT_INSERT m:type="DateTimeOffset">2017-12-09T19:52:50.82Z</d:DT_INSERT>
                    <d:DT_UPDATE m:type="DateTimeOffset">2017-12-09T19:52:50.82Z</d:DT_UPDATE>
                </m:properties>
            </a:content>
        </a:entry>
    </a:feed>

    You can eventually have the result in a different format, for example in JSON, by specifing the $format, as follows:

    http://datavirt-app-jdv-playground.apps.foogaro.com/odata4/ITEMS/ITEMS/ITEMS?$format=json

    Here is how the output should look like:

    {
      "@odata.context": "$metadata#ITEMS",
      "value": [
        {
          "ITEM_ID": 1,
          "ITEM_CODE": "0000-0000-0000-0001",
          "ITEM_DESCRITION": "One",
          "DT_INSERT": "2017-12-09T19:52:50.797Z",
          "DT_UPDATE": "2017-12-09T19:52:50.797Z"
        },
        {
          "ITEM_ID": 2,
          "ITEM_CODE": "0000-0000-0000-0002",
          "ITEM_DESCRITION": "Two",
          "DT_INSERT": "2017-12-09T19:52:50.797Z",
          "DT_UPDATE": "2017-12-09T19:52:50.797Z"
        },
        {
          "ITEM_ID": 3,
          "ITEM_CODE": "0000-0000-0000-0003",
          "ITEM_DESCRITION": "Three",
          "DT_INSERT": "2017-12-09T19:52:50.8Z",
          "DT_UPDATE": "2017-12-09T19:52:50.8Z"
        },
        {
          "ITEM_ID": 4,
          "ITEM_CODE": "0000-0000-0000-0004",
          "ITEM_DESCRITION": "Four",
          "DT_INSERT": "2017-12-09T19:52:50.807Z",
          "DT_UPDATE": "2017-12-09T19:52:50.807Z"
        },
        {
          "ITEM_ID": 5,
          "ITEM_CODE": "0000-0000-0000-0005",
          "ITEM_DESCRITION": "Five",
          "DT_INSERT": "2017-12-09T19:52:50.807Z",
          "DT_UPDATE": "2017-12-09T19:52:50.807Z"
        },
        {
          "ITEM_ID": 6,
          "ITEM_CODE": "0000-0000-0000-0006",
          "ITEM_DESCRITION": "Six",
          "DT_INSERT": "2017-12-09T19:52:50.81Z",
          "DT_UPDATE": "2017-12-09T19:52:50.81Z"
        },
        {
          "ITEM_ID": 7,
          "ITEM_CODE": "0000-0000-0000-0007",
          "ITEM_DESCRITION": "Seven",
          "DT_INSERT": "2017-12-09T19:52:50.81Z",
          "DT_UPDATE": "2017-12-09T19:52:50.81Z"
        },
        {
          "ITEM_ID": 8,
          "ITEM_CODE": "0000-0000-0000-0008",
          "ITEM_DESCRITION": "Eight",
          "DT_INSERT": "2017-12-09T19:52:50.817Z",
          "DT_UPDATE": "2017-12-09T19:52:50.817Z"
        },
        {
          "ITEM_ID": 9,
          "ITEM_CODE": "0000-0000-0000-0009",
          "ITEM_DESCRITION": "Nine",
          "DT_INSERT": "2017-12-09T19:52:50.817Z",
          "DT_UPDATE": "2017-12-09T19:52:50.817Z"
        },
        {
          "ITEM_ID": 10,
          "ITEM_CODE": "0000-0000-0000-0010",
          "ITEM_DESCRITION": "Ten",
          "DT_INSERT": "2017-12-09T19:52:50.82Z",
          "DT_UPDATE": "2017-12-09T19:52:50.82Z"
        }
      ]
    }

    That's it, I hope it helped!


    OpenShift Enterprise is now officially known as Red Hat OpenShift Container Platform beginning with version 3.3. Learn how you can get a complete single-node OpenShift cluster running on your laptop using Red Hat Container Development Kit.

    Last updated: November 9, 2023

    Recent Posts

    • Red Hat Enterprise Linux 10.2 and 9.8: Top features for developers

    • What GPU kernels mean for your distributed inference

    • Debugging image mode with Red Hat OpenShift 4.20: A practical guide

    • EvalHub: Because "looks good to me" isn't a benchmark

    • SQL Server HA on RHEL: Meet Pacemaker HA Agent v2 (tech preview)

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Build

    • Developer Sandbox
    • Developer tools
    • Interactive tutorials
    • API catalog

    Quicklinks

    • Learning resources
    • E-books
    • Cheat sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site status dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2026 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Chat Support

    Please log in with your Red Hat account to access chat support.