В предыдущем посте я представил быстрый способ сделать это с помощью Python. Настало время порадовать и разработчиков JavaScript или TypeScript!
Чтобы начать работу с вашей Всегда бесплатной автономной базой данных, прочитайте публикацию Тодда.
Затем щелкните значок Cloud Shell в правом верхнем углу веб-консоли OCI (Oracle Cloud Infrastructure). Это открывает оболочку Linux прямо внутри вашего браузера! Первый запуск может занять более одной минуты, чтобы настроить его. У вас будет до 5 ГБ памяти и множество предустановленных инструментов…
Теперь самое интересное… Чтобы запустить тестовую программу, которая будет отображать дату и время, вам нужно скачать и разархивировать кошелек Autonomous Database.
$ oci db autonomous-database generate-wallet --autonomous-database-id ocid1.autonomousdatabase.oc1.eu-frankfurt-1.abtheljtcwfhy5ohok66arn6ngrpqdigvq7bzcpygtfnkbldvgtk4rv3xhtq --file wallet.zip --password My_Strong_Pa55word $ unzip wallet.zip
Вам также необходимо настроить среду (переменная среды TNS_ADMIN), чтобы драйвер мог найти строку подключения, хранящуюся в файле tnsnames.ora.
$ pwd $ export TNS_ADMIN=/home/loic_lefev $ sed -i 's/?\/network\/admin/$TNS_ADMIN/' sqlnet.ora
А как насчет Node.js?
Это очень хороший вопрос, поскольку по умолчанию (и на сегодняшний день) мы устанавливаем версию v10.21.0.
Чтобы установить нужную версию, вы можете использовать команду nvm:
Интересными командами являются:
$ nvm ls-remote --lts
Первая команда перечисляет доступные версии, включая поддержку Long-Term S.
$ nvm install 15.0.0 --latest-npm
Эта вторая команда устанавливает заданную версию (здесь 15.0.0) и также обновляет npm до последней версии:
Теперь, когда у нас есть нужная версия, давайте продолжим, используя npm, на этот раз для установки драйвера oracledb Node.js:
$ npm install oracledb
Следующую программу можно скопировать и вставить прямо в файл с именем select.js:
'use strict'; const oracledb = require('oracledb'); async function run() { let connection; try { connection = await oracledb.getConnection({ user: process.env.NODE_ORACLEDB_USER || "USERNAME", password: process.env.NODE_ORACLEDB_PASSWORD || "PASSWORD", connectString: process.env.NODE_ORACLEDB_CONNECTIONSTRING || "CONNECTIONSTRING" }); let result = await connection.execute('select sysdate from dual'); console.log(result.rows[0]); } catch (err) { console.error(err); } finally { if (connection) { try { await connection.close(); } catch (err) { console.error(err); } } } } run();
Затем, чтобы запустить его, мне нужно установить переменные среды:
$ export NODE_ORACLEDB_USER=dragon $ export NODE_ORACLEDB_PASSWORD=My_Strong_Pa55word $ export NODE_ORACLEDB_CONNECTIONSTRING=dragon_tp
А затем запустите программу:
$ node select.js
Хорошо, но что это за Polyglot Node.js, о котором вы упомянули в заголовке?
Рад, что ты спросил :D
На самом деле есть еще один классный способ запускать приложения Node.js: использовать замечательную GraalVM, предоставляющую возможности полиглота.
В следующем примере мы запустим код Java из этого приложения Node.js, это очень простой пример.
Во-первых, давайте установим версию сообщества GraalVM с открытым исходным кодом в OCI Cloud Shell:
$ wget https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/graalvm-ce-java8-linux-amd64-20.2.0.tar.gz $ tar -xvf graalvm-ce-java8-linux-amd64-20.2.0.tar.gz $ export PATH=/home/loic_lefev/graalvm-ce-java8-20.2.0/bin:$PATH
Приведенный выше код загружает текущую версию GraalVM CE и добавляет к пути каталог bin.
Теперь вы увидите, что версия Node.js изменилась:
Мы действительно не в последнем выпуске, но сейчас мы эффективно используем GraalVM при вызове команды узла.
Затем давайте напишем Java-код (сохраните это содержимое в файле с именем JavaQueryProvider.java):
public class JavaQueryProvider { public static String getCurrentDateTime() { return "select sysdate from dual"; } }
Этот очень простой класс имеет статический метод, возвращающий SQL-запрос, который мы будем использовать в нашем скрипте Node.js. Для запуска GraalVM потребуется Java-архив, поэтому давайте создадим sqlqueries.jar:
$ javac JavaQueryProvider.java $ ls *.class $ jar -cvf sqlqueries.jar JavaQueryProvider.class
В программе JavaScript нам нужно внести небольшое изменение (выделено жирным шрифтом):
'use strict'; const oracledb = require('oracledb'); async function run() { let connection; try { connection = await oracledb.getConnection({ user: process.env.NODE_ORACLEDB_USER || "USERNAME", password: process.env.NODE_ORACLEDB_PASSWORD || "PASSWORD", connectString: process.env.NODE_ORACLEDB_CONNECTIONSTRING || "CONNECTIONSTRING" }); let result = await connection.execute( Java.type('JavaQueryProvider').getCurrentDateTime() ); console.log(result.rows[0]); } catch (err) { console.error(err); } finally { if (connection) { try { await connection.close(); } catch (err) { console.error(err); } } } } run();
Этот код попросит GraalVM запустить только что скомпилированный код Java, а затем вернет строку, содержащую фактический код SQL для запуска.
Будет ли это работать?…… Конечно! :D
$ node --vm.cp sqlqueries.jar select.js
Аккуратный! Ну и что дальше? Как насчет того, чтобы открыть для себя все инновации JSON, которые Oracle привнесла в мир баз данных?
- Пост в блоге об автономной базе данных JSON (AJD)
- Oracle AJD видео запуска для разработчиков
- Подробная информация о родном двоичном формате JSON, который использует Oracle (что делает BSON MongoDB своего рода устаревшей технологией…)