Ask Questions and Find Answers
Important:
Ask is now read-only. You can review any existing questions and answers, but not add anything new.
But - don't panic! While ask is no more, we've replaced it with discuss - the new Liferay Discussion Forum! Read more here here or just visit the site here:
discuss.liferay.com
RE: Using service builder with external data source in Liferay 7.4
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.
hi
did you check the prefix of PERSON? for example, it should be XXX.PERSON.
Sorry, I figured out the problem. I hadn't configured the DataSourceProviderImpl. Once I added that all was well. Thanks.
Powered by Liferay™