cancel
Showing results for 
Search instead for 
Did you mean: 

How to declare a jdbc used by a vocabulary in Studio ?

pibou_Bouvret
Elite Collaborator
Elite Collaborator

In studio, it seems impossible to declare a custom vocabulary (not based on the single data source).

So I choose an arbitrary vocabulary and give in custom properties my directoryName (test)

The bundle is generated as expected

    <properties widgetMode="edit">
      <property name="directoryName">test</property>
    </properties>

and in studio i even have "Directory Name" positionned to "test" (as if it was a studio vocabulary).

That's a real dirty solution !

I also declared an XML extension in studio for my directory :

<extension point="directories" target="org.nuxeo.ecm.directory.sql.SQLDirectoryFactory">
    <directory name="test">
      <schema>vocabulary</schema>
      <dataSource>XXXXX</dataSource>
      <cacheTimeout>3600</cacheTimeout>
      <cacheMaxSize>1000</cacheMaxSize>
      <table>test</table>
      <idField>id</idField>
      <autoincrementIdField>false</autoincrementIdField>
      <createTablePolicy>never</createTablePolicy>
    </directory>
  </extension>

First question : what's the syntax of the datasource element :

a studio vocabulary would be defined as java:/test whereas, according to common contributions to the org.nuxeo.ecm.directory.sql.SQLDirectoryFactory directories extension point, it would be jdbc/test. What's the difference ?

Server side : I tried to declare the mentionned jdbc ressource.

I copied common-base to a custom template

it is deployed after common-base

in server.xml template, I declared a second ressource next to the common datasource :

<Resource name="jdbc/testDS" auth="Container" type="javax.sql.DataSource"
    maxActive="5" maxIdle="30" maxWait="10000" driverClassName="${nuxeo.test.driver}"
    url="${nuxeo.test.jdbc.url}" validationQuery=""
    username="${nuxeo.test.user}" password="${nuxeo.test.password}"
    accessToUnderlyingConnectionAllowed="true" />

In nuxeo.xml template, I delared the ressource link pointing to the global ressource

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

Finally, I excluded both ressource names from the common datasource in nuxeo.conf

singleDataSource.exclude=jdbc/testDS,jdbc/test

When using the widget, I get the following error :

Caused by: **org.postgresql.util.PSQLException**: ERREUR: la relation « test » n'existe pas

What would be the proper declaration(s) for my directory to work with the data source I declared ?

1 REPLY 1

pibou_Bouvret
Elite Collaborator
Elite Collaborator

The solution is to simply create a contribution extending the "datasources" extension point of "org.nuxeo.runtime.datasource"

Getting started

Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.