Can you please add a way to specify Connection schema #18

Closed
jflefebvre06 opened this Issue Oct 30, 2012 · 20 comments

Comments

Projects
None yet
4 participants

No description provided.

Contributor

slandelle commented Oct 30, 2012

Any idea on how I'd do that? Depending on the database, one can specify the default schema in the connection url, but there's no generic mechanism I'm aware of.

I think you can base it on a system property to define
If property
GetConnection(con, property)
Else
Getconnection

What do you think about That ?

Le 30 oct. 2012 à 22:14, "Stephane Landelle" <notifications@github.commailto:notifications@github.com> a écrit :

Any idea on how I'd do that? Depending on the database, one can specify the default schema in the connection url, but there's no generic mechanism I'm aware of.


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-9923148.

Contributor

slandelle commented Oct 31, 2012

OK, I hadn't realized that DBUnit's DatabaseConnection had such a functionality.
I will implement this in the next days, stay tuned.

slandelle was assigned Oct 31, 2012

Thanks a lot

slandelle closed this in 281cf7a Nov 3, 2012

Contributor

slandelle commented Nov 3, 2012

@jflefebvre06 I've pushed the feature in the master. Could you try it out and tell me if it suits your needs, please?

Bonjour Stephane
Merci pour cette implémentation super rapide !!!!
Cela fonctionne très bien mais j aurais fait une autre approche plutôt basée sur une propriété system car d'un environnement à l'autre (dev, qualif,...) le nom du schéma est très souvent différent et avec l'implementation proposée il est impossible de la paramétrer
Autre idée, définition d'un bean de config, non obligatoire injecté en autowire (required=false) contenant la propriété schéma
JF

bokc commented Nov 6, 2012

Bonjour,
Je suis d'accord avec JF. J'utilise dans mon cas 2 types de bases de données differentes suivant si je fais des tests en dev (base mémoire) ou des tests pour la qualification (DB2 sur AS400) or le nom du schemas est differents.

BokC

Contributor

slandelle commented Nov 6, 2012

Bonjour,

Je comprend bien le besoin.

L'approche d'un bean spring de configuration existe déjà pour le module
web, mais pas pour le module test.
De manière générale, j'aimerais refactorer la partie configuration afin de
permettre des stratégies de fallback, un peu comme le fait la librairie
config de TypeSafe.
Je ne pourrais faire ça que dans une prochaine version, ce qui n'arrivera
pas avant quelques temps (malheureusement, j'ai peu de dispos en ce moment
et je les consacre en priorité à mon autre projet Gatling), pas avant
décembre.

Dans l'immédiat, je vais mettre en place une propriété System, mais il
s'agira d'un hack voué à disparaitre (si l'on dispose d'un bean Spring, il
est configurable via un PPHC qui peut résoudre des propriétés System).

Je fais rapidement et sors une release.

Stéphane

Le 6 novembre 2012 14:49, bokc notifications@github.com a écrit :

Bonjour,
Je suis d'accord avec JF. J'utilise dans mon cas 2 type de bases de
données differentes suiavnt si je fais des tests en dev (base mémoire) ou
des tests (DB2 sur AS400) pour la qualification or le nom du schemas est
differents.

BokC


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-10111034.

Contributor

slandelle commented Nov 6, 2012

Je viens de pusher les modifications.
La propriété s'appelle "spring.dbunit.schema". Pourriez-vous me faire un
retour afin que je fasse la release, svp?

Stéphane

Le 6 novembre 2012 14:59, Stéphane Landelle slandelle@excilys.com a écrit
:

Bonjour,

Je comprend bien le besoin.

L'approche d'un bean spring de configuration existe déjà pour le module
web, mais pas pour le module test.
De manière générale, j'aimerais refactorer la partie configuration afin de
permettre des stratégies de fallback, un peu comme le fait la librairie
config de TypeSafe.
Je ne pourrais faire ça que dans une prochaine version, ce qui n'arrivera
pas avant quelques temps (malheureusement, j'ai peu de dispos en ce moment
et je les consacre en priorité à mon autre projet Gatling), pas avant
décembre.

Dans l'immédiat, je vais mettre en place une propriété System, mais il
s'agira d'un hack voué à disparaitre (si l'on dispose d'un bean Spring, il
est configurable via un PPHC qui peut résoudre des propriétés System).

Je fais rapidement et sors une release.

Stéphane

Le 6 novembre 2012 14:49, bokc notifications@github.com a écrit :

Bonjour,

Je suis d'accord avec JF. J'utilise dans mon cas 2 type de bases de
données differentes suiavnt si je fais des tests en dev (base mémoire) ou
des tests (DB2 sur AS400) pour la qualification or le nom du schemas est
differents.

BokC


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-10111034.

Bonjour de Stéphane,

Je viens de checker, ca marche impec.

Merci beaucoup

@slandelle slandelle pushed a commit that referenced this issue Nov 6, 2012

Stephane Landelle Add a system property for default schema, close #18 8ed1076
Contributor

slandelle commented Nov 6, 2012

Release done: 1.1.10

bokc commented Nov 7, 2012

Je n'arrive pas a l'utiliser.

Dans ma config Spring j'ai rajouté ca pour positionner la variable "System" :
<bean id="systemPrereqs" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" value="#{@systemproperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<!-- The new Properties -->
<util:properties>
<prop key="spring.dbunit.schema">${database.schema}</prop>
</util:properties>
</property>
</bean>

En mode debug j'ai bien le System.getProperty("spring.dbunit.schema") qui me donne le nom du schema que j'ai définit. Par contre dans DbUnitDatabasePopulator ligne 57 (String schema = dataSetConfiguration.getSchema();) le schema est null.

Aurais-je oublié quelque chose?

L'entête de mon TestU :
@runwith(SpringJUnit4ClassRunner.class)
@contextconfiguration(locations = { "/app-config.xml", "/junit-config.xml", "/security-config-test.xml" })
@testexecutionlisteners({ DependencyInjectionTestExecutionListener.class,
DataSetTestExecutionListener.class })
@dataset(locations = { "/bouchons/BaseTablesReference.xml",
"/bouchons/authentification/Utilisateur.xml", "/bouchons/Devise.xml",
"/bouchons/localisation/Filiale.xml" }, tearDownOperation= DBOperation.DELETE_ALL, columnSensing = true)
public class UtilisateurServiceTest extends ServiceBaseTest<IUtilisateurService, Utilisateur> {

Contributor

slandelle commented Nov 7, 2012

Il faudra que je regarde dans le code (pas accès pour l'instant), mais
pourquoi faire aussi complexe?

Par exemple, si les tests sont lancés depuis maven, il suffit de configurer
la propriété System au niveau de surefire (éventuellement avec un profile
selon l'environnement):
http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html

2012/11/7 bokc notifications@github.com

Je n'arrive pas a l'utiliser.

Dans ma config Spring j'ai rajouté ca pour positionner la variable
"System" :



util:properties
${database.schema}
/util:properties

En mode debug j'ai bien le System.getProperty("spring.dbunit.schema") qui
me donne le nom du schema que j'ai définit. Par contre dans
DbUnitDatabasePopulator ligne 57 (String schema =
dataSetConfiguration.getSchema();) le schema est null.

Aurais-je oublié quelque chose?

L'entête de mon TestU :
@runwith(SpringJUnit4ClassRunner.class)
@contextconfiguration(locations = { "/app-config.xml",
"/junit-config.xml", "/security-config-test.xml" })
@testexecutionlisteners({ DependencyInjectionTestExecutionListener.class,
DataSetTestExecutionListener.class })
@dataset(locations = { "/bouchons/BaseTablesReference.xml",
"/bouchons/authentification/Utilisateur.xml", "/bouchons/Devise.xml",
"/bouchons/localisation/Filiale.xml" }, tearDownOperation=
DBOperation.DELETE_ALL, columnSensing = true)
public class UtilisateurServiceTest extends ServiceBaseTest {


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-10151294.

Pour info, j’avais testé en settant la propriété system via surefire.

Contributor

slandelle commented Nov 7, 2012

@jflefebvre06 De quelle manière as-tu testé? J'ai l'impression que j'ai
fait une boulette et que la propriété System est systématiquement écrasée
par la propriété de @dataset -> null
@bokc Pourrais-tu builder le code source en apportant la modification
suivante?
dans com.excilys.ebi.spring.dbunit.config.DataSetConfiguration
vers la ligne 165:

if (!schema.isEmpty())
dataSetConfiguration.schema = schema;

Le 7 novembre 2012 16:41, Stéphane Landelle slandelle@excilys.com a écrit
:

Il faudra que je regarde dans le code (pas accès pour l'instant), mais
pourquoi faire aussi complexe?

Par exemple, si les tests sont lancés depuis maven, il suffit de
configurer la propriété System au niveau de surefire (éventuellement avec
un profile selon l'environnement):

http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html

2012/11/7 bokc notifications@github.com

Je n'arrive pas a l'utiliser.

Dans ma config Spring j'ai rajouté ca pour positionner la variable
"System" :



util:properties
${database.schema}
/util:properties

En mode debug j'ai bien le System.getProperty("spring.dbunit.schema") qui
me donne le nom du schema que j'ai définit. Par contre dans
DbUnitDatabasePopulator ligne 57 (String schema =
dataSetConfiguration.getSchema();) le schema est null.

Aurais-je oublié quelque chose?

L'entête de mon TestU :
@runwith(SpringJUnit4ClassRunner.class)
@contextconfiguration(locations = { "/app-config.xml",
"/junit-config.xml", "/security-config-test.xml" })
@testexecutionlisteners({ DependencyInjectionTestExecutionListener.class,
DataSetTestExecutionListener.class })
@dataset(locations = { "/bouchons/BaseTablesReference.xml",
"/bouchons/authentification/Utilisateur.xml", "/bouchons/Devise.xml",
"/bouchons/localisation/Filiale.xml" }, tearDownOperation=
DBOperation.DELETE_ALL, columnSensing = true)
public class UtilisateurServiceTest extends ServiceBaseTest {


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-10151294.

bokc commented Nov 7, 2012

Le code que tu proposes corrige le pb.

Contributor

slandelle commented Nov 7, 2012

Bon, ben, je vais corriger et faire une nouvelle release...

2012/11/7 bokc notifications@github.com

Le code que tu proposes corrige le pb.


Reply to this email directly or view it on GitHubhttps://github.com/excilys/spring-dbunit/issues/18#issuecomment-10156749.

slandelle reopened this Nov 7, 2012

@slandelle slandelle pushed a commit that referenced this issue Nov 7, 2012

Stephane Landelle Properly fixing #18 b67f53d
Contributor

slandelle commented Nov 7, 2012

Changed milestone to 1.1.11

Contributor

slandelle commented Nov 8, 2012

Release done

slandelle closed this Nov 8, 2012

Gaffney commented Nov 19, 2013

Chose this over Spring-Test-DBUnit because of this feature. (Couldn't find an elegant way of overcoming the DBUnit "AmbiguousTableNameException" if you have multiple schemas that reference the same table.)

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment