This document describes how to build and run Parse Server with the new Oracle storage adapter based on the Oracle NodeJS libraries. It will demonstrate running against the Free Oracle Database 23ai Docker container and the JSON Autonomoumous database in the cloud.
The Oracle SQL client is a software application that allows users to connect to an Oracle database and execute queries and manage the database.
The Oracle Instant Client is a set of software libraries that allow users to connect to an Oracle database without a full Oracle database installation.
Apple Silicon Installation otherwise continue below
Clone Parse Server Repository. Supported version 7.3.0 and above.
There were changes in this release that supported:
git clone --depth 1 --branch 7.3.0 https://github.com/parse-community/parse-server.git
cd parse-server
- Clone this Oracle Samples repo into src/Adapters/Storage/Oracle
cd src/Adapters/Storage
git clone https://github.com/oracle-samples/oracleadapter-parse.git Oracle
cd Oracle
rm -rf .git # IMPORTANT or build will fail
cd ../../../.. # Go back to Project Root
-
Add the Oracle database dependency
npm install [email protected]
-
Add the Parse File Adapter dependency
npm install --save @parse/fs-files-adapter
This defaults to local storage.
-
Run
npm ci
to build the server
-
Get and Start the image
docker run --name free23ai -d -p 1521:1521 -e ORACLE_PWD=Welcome12345 container-registry.oracle.com/database/free:latest
It takes about a minute for the image to reach a healthy state on my MacBook
-
Connect to the image as sysdba
sql sys/Welcome12345@localhost:1521/freepdb1 as sysdba
and run the following commands to enable JSON support
alter session set container=FREEPDB1; grant db_developer_role to pdbadmin; grant soda_app to pdbadmin; GRANT UNLIMITED TABLESPACE TO pdbadmin; quit;
or run the commands as a script. Create a file called
soda
that contains the above commandssql sys/Welcome12345@localhost:1521/freepdb1 as sysdba @./soda
- Create a config.json. This is a minimal set of configuration parameters for booting the server. The databaseURI is configured to attach to the local 23ai Oracle Database instance.
{
"appId": "APPLICATION_ID",
"masterKey": "MASTER_KEY",
"allowClientClassCreation": true,
"port": 1338,
"logLevel": "info",
"verbose": false,
"mountGraphQL": true,
"mountPlayground": true,
"graphQLPath": "/graphql",
"filesAdapter": {
"module": "@parse/fs-files-adapter"
},
"databaseAdapter": {
"module": "./Storage/Oracle/OracleStorageAdapter",
"options": {
"databaseURI": "oracledb://pdbadmin:Welcome12345@localhost:1521/freepdb1",
"collectionPrefix": ""
}
}
}
- If using an Oracle Instant Client prior to 23ai. I am running on MacOS Intel and the most recent Instant Client for that platform is 19_16 so export the variable below.
export ORACLEDB_VERSION=19
- Boot the Server using the Oracle Instant Client location
ORACLE_CLIENT_LOCATION=/Users/myuser/instantclient_19_16 npm start -- ./config.json
-
Run a curl command
curl -X POST -H "X-Parse-Application-Id: APPLICATION_ID" -H "Content-Type: application/json" -d '{"score":12,"playerName":"scooby","cheatmode":false}' http://localhost:1338/parse/classes/GameScore
Upon success
{"objectId":"CdmLJT6Duc","createdAt":"2023-10-16T19:33:27.382Z"}
-
Connect to the database and verify
sql pdbadmin/Welcome12345@localhost:1521/FREEPDB1
-
Run SODA commands
SQL> soda list List of collections: GameScore _Hooks _Idempotency _Role _SCHEMA _User SQL> soda get GameScore KEY Created On 3A8CB47A41A74F59BFDD143A3F365F4A 2023-10-16T19:33:27.404374000Z 1 row selected. SQL> soda get GameScore -k 3A8CB47A41A74F59BFDD143A3F365F4A Key: 3A8CB47A41A74F59BFDD143A3F365F4A Content: {"score":12,"playerName":"scooby","cheatmode":false,"updatedAt":"2023-10-16T19:33:27.382Z","createdAt":"2023-10-16T19:33:27.382Z","_id":"CdmLJT6Duc"} 1 row selected. soda help – list all soda commands
-
Update databaseAdapter.options.databaseURI in config.json to point at the cloud database instance
"databaseURI": "oracledb://username:password@tnsname",
-
Download the cloud database wallet and use it when starting the server
ORACLE_CLIENT_LOCATION=/Users/myuser/instantclient_19_16 ORACLE_WALLET_LOCATION=/Users/myuser/wallet-oradb npm start -- ./config.json
Use Cloud Code to call Custom Oracle PL/SQL
This project welcomes contributions from the community. Before submitting a pull request, please review our contribution guide
Please consult the security guide for our responsible security vulnerability disclosure process
Copyright (c) 2024 Oracle and/or its affiliates.
Released under the Universal Permissive License v1.0 as shown at https://oss.oracle.com/licenses/upl/.