Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Matthieu R.
Datasource différente dans un portlet
August 6, 2012 3:54 AM
Answer

Matthieu R.

Rank: Junior Member

Posts: 44

Join Date: July 18, 2012

Recent Posts

Bonjour à tous,

Je cherche à utiliser une datasource, différente que celle qu'utilise Liferay, au sein d'un portlet. Mais je ne sais pas où la référencer pour que cela fonctionne. Quel est le choix à faire entre les pistes suivantes ?

J'utilise Liferay 6.1. GA1, un serveur Tomcat et une base de données Oracle.

- le fichier context.xml : il semble être écrasé par Liferay régulièrement.
- le fichier ROOT.xml : il semble aussi être écrasé par Liferay régulièrement
- le fichier .xml : idem
- un fichier context.xml dans le dossier META-INF du portlet : cela ne fonctionne pas correctement pour le moment et n'est pas extraordinaire en matière de maintenabilité (si le mot de passe change, il faut changer tous les DS)

Bref, je m'interroge. Quelles sont les bonnes pratiques dans ce domaine ? Y a-t-il encore d'autres alternatives ?

Je n'ai pas trouvé de réelle solution officielle dans le domaine.
Liferay Geek
RE: Datasource différente dans un portlet
August 7, 2012 5:37 PM
Answer

Liferay Geek

Rank: Junior Member

Posts: 25

Join Date: March 24, 2010

Recent Posts

Bonjour,

J'ai été confronté au même problème, et à mon sens, la solution la plus efficace consiste à déclarer la seconde datasource directement dans le tomcat. Il faut modifier les fichiers de configuration du tomcat (ou de votre serveur d'application) et ensuite faire un arrêt/relance pour que cela soit pris en compte.

Le premier fichier de configuration de tomcat à modifier s'appelle server.xml et se trouve dans le répertoire LIFERAY_HOME/tomcat/conf (où LIFERAY_HOME est le répertoire d'installation de Liferay). Dans ce fichier, à l'intérieur de la section <Server port="8005" shutdown="SHUTDOWN">, après les lignes Listener, il y a une section <GlobalNamingResources> dans laquelle il faut insérer une Resource. il faut intercaler le bloc suivant (dans mon cas, il s'agissait d'une base MySQL externe) :

<Resource
name="jdbc/externalPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/mysqlbase"
username="myusername"
password="mypassword"
maxActive="10" maxIdle="5" maxWait="5000"
removeAbandoned="true"
removeAbandonedTimeout="2"
logAbandoned="true"
/>

Le second fichier de configuration de Tomcat à modifier s'appelle context.xml et se trouve dans le même répertoire. A l'intérieur de la balise <Context>, il faut insérer le bloc suivant :

<ResourceLink global="jdbc/externalPool" name="jdbc/externalPool" type="javax.sql.Datasource"/>

J'ai aussi pu lire ici et là que en fonction de la version de Tomcat utilisée, cela pouvait aussi se passer dans le fichier ROOT.xml qui se trouve dans le répertoire LIFERAY_HOME/tomcat/conf/Catalina/localhost. Dans ce cas, il faut ajouter

<Resource
name="jdbc/externalPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/mysqlbase"
username="myusername"
password="mypassword"
maxActive="10" maxIdle="5" maxWait="5000"
removeAbandoned="true"
removeAbandonedTimeout="10"
logAbandoned="true"
/>
<ResourceLink global="jdbc/externalPool" name="jdbc/externalPool" type="javax.sql.DataSource"/>

Le principe est donc le même. Après, il ne faut pas oublier d'arrêter le tomcat et de le relancer pour que les modifications soient prises en compte.

Au passage, pour intervenir durablement sur la datasource principale de Liferay, le plus simple est d'intervenir sur le fichier portal-ext.properties qui se trouve à la racine de l'installation (au dessus du répertoire tomcat).

Je recommande de jeter un oeil à ce post : http://www.liferay.com/community/forums/-/message_boards/message/5042394/maximized
Matthieu R.
RE: Datasource différente dans un portlet
August 21, 2012 12:14 AM
Answer

Matthieu R.

Rank: Junior Member

Posts: 44

Join Date: July 18, 2012

Recent Posts

Etrangement, je n'avais pas reçu de notifications pour une réponse sur ce thread.

Merci beaucoup pour ces réponses. J'avais trouvé une solution entre temps qui ressemble à celle-ci et tout fonctionne parfaitement à présent emoticon

Je pense que ce thread n'était pas inutile car les informations à ce sujet sont vraiment maigres!