Как подключить Liferay 7.2 CE к базе данных Oracle с помощью JNDI

Если у меня есть Liferay 7.2 Community Edition и я хочу использовать Oracle 12c в качестве внешней базы данных для своих бизнес-данных, то какой самый простой и лучший способ подключения с помощью JNDI? Могу ли я создать DataSource в Tomcat и использовать поиск JNDI для подключения к Liferay Service Builder?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 415
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот простой способ, который я определил и использую:

Шаг (1): Определите/сопоставьте объекты в service.xml на основе существующих внешних баз данных. Если таблиц нет, создайте все таблицы и поля вручную, потому что Liferay Service Builder не будет генерировать код SQL для автоматического создания таблиц во внешней базе данных. Если вы хотите использовать пространство имен, сопоставьте вручную ниже сущностей и определите то же самое в базе данных.

Сервис.xml

<entity local-service = "true" name = "Employee" table = "employee" data-source = "extDataSource" remote-service = "false" uuid = "false">
        <column name = "employeeId" db-name = "employeeid" primary = "true" type = "long" />
        <column name = "groupId" db-name = "groupid" type = "long" />
        <column name = "userName" db-name = "username" type = "String" />
    </entity>
</service-builder>

Шаг (2): Поместите следующее в LIFERAY-HOME\tomcat-9.0.17\conf\server.xml в

<Resource
    name = "jdbc/myDataSource"
    auth = "Container"
    type = "javax.sql.DataSource"
    factory = "org.apache.tomcat.jdbc.pool.DataSourceFactory"
    driverClassName = "oracle.jdbc.driver.OracleDriver"
    url = "jdbc:oracle:thin:@localhost:1521:orcl"
    username = "USERNAME"
    password = "PASSWORD"
    maxActive = "20"
    maxIdle = "5"
    maxWait = "10000"
/>

Шаг (3): Поместите следующее в LIFERAY-HOME\tomcat-9.0.17\conf\context.xml в разделе Context

<ResourceLink name = "jdbc/myDataSource" global = "jdbc/myDataSource" type = "javax.sql.DataSource"/>

Шаг (4): Для подключения к Oracle или любой проприетарной базе данных необходимы следующие 2 JAR-файла:

  • Драйвер Oracle: получите драйвер и поместите его в папку liferay-ce-portal-7.2.1-ga2\tomcat-9.0.17\lib\ext
  • Библиотека поддержки внешней базы данных: загрузите последнюю версию

База данных портала Liferay All In One Support JAR

из репозитория Maven

https://mvnrepository.com/artifact/it.dontesta.labs.liferay.portal.db/liferay-portal-database-all-in-one-support/1.2.1

Загрузите JAR-файл liferay-portal-database-all-in-one-support-1.2.1.jar и поместите его под LIFERAY-HOME\tomcat-9.0.17\webapps\ROOT\WEB-INF\lib

Шаг (5): Определите следующие параметры в файле portal-ext.properties.

jdbc.mydb.jndi.name=jdbc/myDataSource

Шаг (6): Создайте класс DataSourceProviderImpl в *-service:

package com.demo4.external.data.source.spi;

import javax.naming.InitialContext;
import javax.sql.DataSource;

import com.liferay.portal.kernel.dao.jdbc.DataSourceFactoryUtil;
import com.liferay.portal.kernel.dao.jdbc.DataSourceProvider;
import com.liferay.portal.kernel.util.PropsUtil;

public class DataSourceProviderImpl implements DataSourceProvider {

@Override
public DataSource getDataSource() {

DataSource dataSource = null;

try {
            
dataSource = DataSourceFactoryUtil.initDataSource(PropsUtil.getProperties("jdbc.mydb.", true));

            
//  **Note:** Sometimes above line dosn't work in some environments, then follow below approach. In this case above Step(5) is not required because it's directly making lookup into server's context.


//  InitialContext initialContext = new InitialContext();
//  dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/myDataSource");


        } catch (Exception e) {
            e.printStackTrace();
        }

        return dataSource;
    }
}

Шаг (7): Зарегистрируйте описанную выше реализацию в JDK SPI (интерфейс поставщика услуг). Для этого создайте следующую папку/файл в *-service

META-INF/services/com.liferay.portal.kernel.dao.jdbc.DataSourceProvider

Поместите следующую строку под этим файлом:

com.demo4.external.data.source.spi.DataSourceProviderImpl

Все сделано. Просто создайте сервис, обновите Gradle и запустите сервер. Это будет работать отлично.

Счастливого обучения!

Другие вопросы по теме