如何使用jndi将liferay 7.2 ce与oracle数据库连接

pcrecxhr  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(483)

如果我有liferay7.2社区版,并且希望使用oracle12c作为业务数据的外部数据库,那么使用jndi进行连接的最简单和最好的方法是什么?我可以在tomcat中创建数据源并使用jndi查找来连接liferay service builder吗?

5gfr0r5j

5gfr0r5j1#

以下是我识别和使用的一种简单方法:
步骤(1):基于现有外部数据库将实体定义/Map到service.xml。如果不存在表,请手动创建所有表和字段,因为liferay service builder不会生成sql代码来自动在外部数据库中创建表。如果要使用名称空间,请在实体下面手动Map,并在数据库中定义相同的名称空间。
服务.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):将以下内容放在context下的liferay home\tomcat-9.0.17\conf\context.xml中

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

步骤(4):要连接oracle或任何专有数据库,需要以下两个JAR:
oracle驱动程序:获取驱动程序并放在liferay-ce-portal-7.2.1-ga2\tomcat-9.0.17\lib\ext下
外部数据库支持库:下载最新的
liferay门户数据库一体式支持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):在*-service下创建datasourceproviderimpl类:

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):用jdkspi(服务提供者接口)注册上述实现。为此,请在*-service下创建以下文件夹/文件

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

在此文件下放置以下行:

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

全部完成。只需构建服务,进行梯度刷新并启动服务器。这将非常有效。
学习愉快!

相关问题