Bonjour
je défini avec camel-blueprint des bundles OSGI contenant des routes camel qui utilisent des connexions JDBC.
sous OSGI je sais définir une datasource et je sais depuis mon bundle camel la retrouver.
OSGI fourni un service JNDI qui fonctionne sans trop de difficulté.
Mon problème vient de JUNIT
lorsque je teste mes composants camel avec JUNIT camel fournit une classe CamelTestSupport
voici ce que fait cette classe
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| protected Context createJndiContext() throws Exception {
Properties properties = new Properties();
// jndi.properties is optional
InputStream in = getClass().getClassLoader().getResourceAsStream("jndi.properties");
if (in != null) {
log.debug("Using jndi.properties from classpath root");
properties.load(in);
} else {
//JE PASSE PAR ICI
properties.put("java.naming.factory.initial", "org.apache.camel.util.jndi.CamelInitialContextFactory");
}
return new InitialContext(new Hashtable(properties));
} |
dans mon code lorsque mon constructeur de route prépare la route il fait
1 2
| final InitialContext reg = new InitialContext();
reg.bind("jdbc/myDatasource", dataSource); |
ou datasource est une datasource que je viens de créer.
plus loin dans le code je fais
1 2
| InitialContext namingContext = new InitialContext();
dataSource = (DataSource) namingContext.lookup("jdbc/myDatasource"); |
et j'ai une erreur. comme quoi il ne trouve pas la datasource.
Je suis passé en debug pas à pas et chaque appel à InitialContext me retourne un objet différent. je ne sais pas si c'est normal.
en inspectant le contenu j'ai :
après le premier InitialContext bindings et environnement de l'objet retourné contiennent java.naming.factory.initial=org.apache.camel.util.jndi.CamelInitialContextFactory.
après le bind bindings et environnement de l'objet retourné contiennent java.naming.factory.initial=org.apache.camel.util.jndi.CamelInitialContextFactory. et treeBindings contient
jdbc/transcoDataSource=com.mchange.v2.c3p0.PoolBackedDataSource@76313fc7 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@c51f7c3c [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2yscvx8mm2k4at3zeyd5|515979, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@c1558ebb [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 2yscvx8mm2k4at3zeyd5|780024, jdbcUrl -> jdbc:derby:datas/transcodb;create=true, properties -> {} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 2yscvx8mm2k4at3zeyd5|c92575, numHelperThreads -> 3 ]
et
jdbc=org.apache.camel.util.jndi.JndiContext@53d34c
après le troisième InitialContext bindings et environnement de l'objet retourné contiennent java.naming.factory.initial=org.apache.camel.util.jndi.CamelInitialContextFactory. et treeBindings est vide {}
du coup le me suis demandé s'il ne fallait pas passer les mêmes properties à InitialContext() mais ça ne change rien.
merci de votre aide
A+JYT
Partager