RE: Using service builder with external data source in Liferay 7.4

thumbnail
Jamie Sammons, modified 2 Years ago. Regular Member Posts: 112 Join Date: 9/20/11 Recent Posts

I am trying to create a service builder application that will use pre-existing tables in an external database. I've set up service.xml with just one entity according to the documentation:

<service-builder dependency-injector="ds" package-path="gov.nasa.hq.test209.service">

  <namespace>R209</namespace>

  <entity local-service="true" name="Person" remote-service="false" uuid="false" data-source="Report209DS"
    table="PERSON">

    <column name="personId" db-name="PERSON_ID" primary="true" type="long" />
    <column name="auid" db-name="AUID" type="String" />
    <column name="firstName" db-name="FIRST_NAME" type="String" />
    <column name="lastName" db-name="LAST_NAME" type="String" />
    <column name="phone" db-name="PHONE" type="String" />
    <column name="email" db-name="EMAIL" type="String" />

    <order by="asc">
      <order-column name="personId" />
    </order>

    <!-- Finder methods -->
    <finder name="lastName" return-type="Collection">
      <finder-column name="lastName" />
    </finder>

    <finder name="email" return-type="Collection">
      <finder-column name="email" />
    </finder>

  </entity>

</service-builder>

 

The datasource is configured in both context.xml and ROOT.xml:

    <Resource name="jdbc/Report209DS" type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username="report209"
        password="report209" maxActive="4" maxWait="5000" maxIdle="2" />
 

After generating the code and deploying the application, when I try to search for matching Person records, I get this error:

Caused by: com.liferay.portal.kernel.log.LogSanitizerException: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist_ [Sanitized]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:253) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:86) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:765) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:921) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1099) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1384) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3687) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165) ~[ojdbc8.jar:18.3.0.0.0]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[hikaricp.jar:?]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[hikaricp.jar:?]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ~[hibernate-core.jar:5.6.7.Final]
    ... 131 more
Caused by: com.liferay.portal.kernel.log.LogSanitizerException: Error : 942, Position : 203, Sql = select this_.PERSON_ID as person_id1_0_0_, this_.AUID as auid2_0_0_, this_.FIRST_NAME as first_name3_0_0_, this_.LAST_NAME as last_name4_0_0_, this_.PHONE as phone5_0_0_, this_.EMAIL as email6_0_0_ from PERSON this_ where this_.FIRST_NAME=:1 , OriginalSql = select this_.PERSON_ID as person_id1_0_0_, this_.AUID as auid2_0_0_, this_.FIRST_NAME as first_name3_0_0_, this_.LAST_NAME as last_name4_0_0_, this_.PHONE as phone5_0_0_, this_.EMAIL as email6_0_0_ from PERSON this_ where this_.FIRST_NAME=?, Error Msg = ORA-00942: table or view does not exist_ [Sanitized]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:253) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:86) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:765) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:921) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1099) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1384) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3687) ~[ojdbc8.jar:18.3.0.0.0]
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165) ~[ojdbc8.jar:18.3.0.0.0]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[hikaricp.jar:?]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[hikaricp.jar:?]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ~[hibernate-core.jar:5.6.7.Final]
    ... 131 more
 

When the application is deployed Liferay new tables are not created, so at that point it seems to recognize the external database. But when the code tries to connect I get the error above.

 

 

Scarletake Bwi, modified 2 Years ago. Expert Posts: 327 Join Date: 12/20/10 Recent Posts

hi 

did you check the prefix of PERSON? for example, it should be XXX.PERSON.

thumbnail
Steve Weiss, modified 2 Years ago. Regular Member Posts: 112 Join Date: 9/20/11 Recent Posts

Sorry, I figured out the problem. I hadn't configured the DataSourceProviderImpl. Once I added that all was well. Thanks.