ml-connector
Oracle JD EdwardsDatabricks

Oracle JD Edwards and Databricks integration

Oracle JD Edwards EnterpriseOne powers on-premises enterprise financials and operations, while Databricks provides cloud data intelligence for analytics and reporting. Connecting the two lets your finance and operations teams build real-time dashboards, run variance analysis, and feed historical ledger and master data into downstream reporting without manual exports. ml-connector handles the JD Edwards session token and polling cycle, so data flows from your AIS Server to Databricks on your schedule.

How Oracle JD Edwards works

Oracle JD Edwards EnterpriseOne is an on-premises ERP suite covering financials, procurement, manufacturing, and distribution. It exposes data through REST APIs via Application Interface Services (AIS) Server, which runs at your infrastructure at a customer-provided URL. Authentication uses a session token obtained by posting username and password to the tokenrequest endpoint, or HTTP Basic Auth per request in Tools 9.2.5.2 and later. The system has no native outbound webhooks, so polling is required, using date filters on fields like UPMJ (date updated) to track changes. JD Edwards provides access to general ledger accounts and transactions, supplier masters, purchase orders, items, and accounts payable records through named data service tables. Pagination defaults to 100 records per page with a continuation token.

How Databricks works

Databricks is a cloud data intelligence platform built on Apache Spark and Delta Lake, running on AWS, Azure, or GCP. It authenticates via OAuth 2.0 client credentials with a workspace-level service principal, using client_id and client_secret to obtain a bearer token that expires after 3600 seconds. The REST API endpoints use workspace-specific base URLs and the /api/2.0/ prefix. Databricks webhooks are limited to MLflow Model Registry events and require explicit activation from TEST_MODE to ACTIVE status. Table writes via REST are metadata-only; actual data is written through SQL or Spark. Databricks provides no native finance or ERP objects, making it a data destination rather than a source, and token refresh logic is required to handle the one-hour expiry.

What moves between them

Data flows one direction: from Oracle JD Edwards into Databricks. GL transaction headers and detail rows, account masters, supplier masters, purchase order headers and lines, and accounts payable ledger records are polled from JD Edwards on a schedule you set, then inserted or upserted into Databricks SQL tables within your workspace. Reference data such as account masters and supplier information is synced first so downstream GL detail rows reference valid chart of accounts and vendors. Because JD Edwards is pull-only and Databricks webhooks do not cover data events, ml-connector polls both systems on a fixed cadence, typically daily or weekly depending on your reporting cycle.

How ml-connector handles it

ml-connector stores the JD Edwards AIS Server URL, username, and password encrypted, then requests a session token on each poll cycle by posting to the tokenrequest endpoint. JD Edwards tokens expire after 30 to 60 minutes (configurable), so ml-connector refreshes the token before each poll if needed and receives a new one if the previous call returns HTTP 444 (invalid token). On the Databricks side, ml-connector uses OAuth 2.0 client credentials to obtain a bearer token at the workspace or account level, then refreshes it every hour since the token expires at 3600 seconds. When querying JD Edwards, ml-connector uses date filters on UPMJ to track which records have changed since the last poll, handles pagination with the maxPageSize parameter and moreRecords flag, and respects any IP allowlist configured on your AIS Server by whitelisting the connector egress IPs. Databricks table writes are issued as SQL MERGE or INSERT statements through the SQL API, so ml-connector does not need to pre-create schemas or catalogs. Because JD Edwards has no explicit rate limits beyond what the AIS Server JVM can handle, ml-connector includes exponential backoff on 429 or 503 responses. Every record carries an audit trail and can be replayed if a downstream table write fails.

A real-world example

A mid-sized manufacturing company runs Oracle JD Edwards EnterpriseOne on-premises to manage production, procurement, and general ledger across three distribution centers. Their finance team has been manually exporting GL account balances and transaction detail to spreadsheets every month to reconcile inventory movements and cost allocations across plants. The data arrives weeks late due to infrastructure constraints. With Oracle JD Edwards and Databricks connected, GL and supplier master records load into Databricks daily, and the finance team now runs variance analysis and drill-down reports directly on current data, eliminating the spreadsheet bottleneck and enabling real-time visibility into plant-level operating costs.

What you can do

  • Load Oracle JD Edwards general ledger transactions and account masters into Databricks SQL tables on a polling schedule you control.
  • Sync purchase order headers, lines, and supplier master records to build procurement analytics and vendor spend reports in Databricks.
  • Handle JD Edwards session token refresh and AIS Server connectivity, including IP allowlisting and on-premises infrastructure constraints.
  • Map Oracle JD Edwards table names and field names to Databricks schema and column names without schema migration.
  • Retry failed loads with exponential backoff and track every record in an audit log for replay and troubleshooting.

Questions

Why must ml-connector poll Oracle JD Edwards instead of receiving webhooks?
Oracle JD Edwards EnterpriseOne has no native outbound webhooks for data changes. ml-connector polls the data service tables on a schedule using date filters on the UPMJ (date updated) field to track changes since the last poll. You can also configure JD Edwards orchestration to call ml-connector's ingest endpoint on a cron schedule if preferred.
How does ml-connector handle the on-premises AIS Server URL and session token expiry?
ml-connector stores the full AIS Server URL, username, and password encrypted and requests a session token by posting to the tokenrequest endpoint before each poll. The token expires after 30 to 60 minutes (configurable), so ml-connector refreshes it when a call returns HTTP 444 or before the timeout, ensuring uninterrupted polling without manual token management.
How are the data loads actually written to Databricks tables?
ml-connector uses SQL MERGE or INSERT statements through the Databricks SQL API to write or upsert data into tables within your workspace. You define which Oracle JD Edwards tables map to which Databricks schemas and tables, and ml-connector handles the field mapping and refresh cadence automatically.

Related integrations

Connect Oracle JD Edwards and Databricks

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started