2010-10-29 21 views
7

Ceci est mon persistence.xml:Pourquoi la source de données n'est pas trouvée dans JNDI après l'injection de jndi.properties?

<persistence> 
    <persistence-unit name="MyUnit"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>jdbc/abcDS</jta-data-source> 
    </persistence-unit> 
</persistence> 

C'est un fichier jndi.properties de src/test/resources qui est censé créer une source de données au cours des essais, depuis un serveur d'application réel avec une source de données est absent:

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory 
jdbc/abcDS=new://Resource?type=DataSource 
jdbc/abcDS.JdbcDriver=org.hsqldb.jdbcDriver 
jdbc/abcDS.JdbcUrl=jdbc:hsqldb:mem:testdb 
jdbc/abcDS.JtaManaged=true 
jdbc/abcDS.DefaultAutoCommit=false 
jdbc/abcDS.UserName=sa 
jdbc/abcDS.Password= 

Cette est la classe de test:

public class FinderTest { 
    @BeforeClass 
    public static void startEJB() throws Exception { 
    InitialContext ic = new InitialContext(); 
    ic.lookup("jdbc/abcDS"); 
    } 
} 

Malheureusement, la source de données est n ot créé et c'est ce que je continue à voir:

[...] 
javax.naming.NameNotFoundException: Name "jdbc/abcDS" not found. 
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:193) 
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150) 
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:124) 
at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115) 
at javax.naming.InitialContext.lookup(InitialContext.java:392) 
at com.XXX.FinderTest.startEJB(FinderTest.java:31) 
[...] 

Qu'est-ce que je fais mal? S'il vous plaît aider!

ps. Par la façon dont il fonctionne de cette façon (ce qui se passe ???):

ic.lookup("java:/openejb/Resource/jdbc/abcDS"); 
+0

Quelque chose dans les journaux du serveur? –

+0

@ Thorbjørn Il n'y a pas de "serveur", c'est un cycle de test. En fait, c'est un OpenEJB embarqué au lieu d'un vrai serveur d'applications. – yegor256

Répondre

7

devrait être trouvée si vous lookup openejb:Resource/jdbc/abcDS

En plus, vous pouvez obtenir injection in your TestCase. Fondamentalement, vous:

  1. ajouter un vide src/test/resources/META-INF/application-client.xml ou ejb-jar.xml
  2. annoter vos test avec @LocalClient
  3. Appel initialContext.bind("inject", this)

Voir l'exemple testcase-injection dans le examples.zip

EDIT Si la recherche échoue toujours s, publiez votre sortie de journal (la sortie de la console).

+0

Fonctionne parfaitement, merci beaucoup! – yegor256