Announcement

Collapse
No announcement yet.

Access-Datenbank an JNDI binden (Jboss)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Access-Datenbank an JNDI binden (Jboss)

    Ich versuche eine ACCESS-DB (kundendatenbank) als ODBC-Datenquelle an den JNDI von JBoss zu binden.
    Dazu habe ich im Deploy-Verzeichnis von JBoss folgenden Eintrag in die Konfigurationsdatei gemacht:
    ..
    <datasources>

    <local-tx-datasource>
    <jndi-name>kundendatenbank</jndi-name>
    <!-- format of URL is "jdbcdbcSNNAME" -->
    <connection-url>jdbcdbc:kundendatenbank</connection-url>
    <driver-class>sun.jdbc.odbc.JdbcOdbcDriver</driver-class>
    <user-name></user-name>
    <password></password>
    </local-tx-datasource>
    </datasources>
    ...

    Diese wird auch beim Deploy des JBoss gelesen und es kommt folgende Meldung:
    ...
    INFO [WrapperDataSourceService] Bound connection factory for resource adapter for ConnectionManager 'jboss.jca:name=kundendatenbank,service=DataSource Binding to JNDI name 'java:kundendatenbank'
    ...
    Das klingt zunächst mal gut, aber dann versuchte ich einen lookup aus Java:

    ....
    Hashtable env = new Hashtable();

    // Setzen der JBoss JNDI-Factory
    env.put(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");

    // URL des Namensdienstes (JBoss-Standard-Port: 1099)
    env.put(Context.PROVIDER_URL, "localhost:1099");

    // Konfiguration der URL Package Präfixe
    env.put(Context.URL_PKG_PREFIXES,
    "org.jboss.namingrg.jnp.interfaces");

    Context ctx = new InitialContext(env);

    // Extrahieren der DataSource

    DataSource datasource =(DataSource)ctx.lookup("kundendatenbank");

    ...

    und bekomme folgende Fehlermeldung:

    "javax.naming.NameNotFoundException: kundendatenbank not bound"

    Muss ich im Suchstring des lookups noch irgendein Prefix voranschieben?
    ..ich habe schon alles probiert.
    Oder muss die Konfigurationsdatei woanders stehen?
    Übrigens: Mit der Access Datenbank muss alles in Ordnung sein, den der Zugriff klappt einwandfrei über DriverManager.

  • #2
    Defaultmäßig werden Datasources im java-Subcontext gespeichert:

    DataSource datasource =(DataSource)ctx.lookup("java:/kundendatenbank");

    Das müsste gehen...

    Comment


    • #3
      Auch das habe ich schon probiert - ohne Erfolg

      Trotzdem Danke

      Comment


      • #4
        <connection-url>jdbcdbc:kundendatenbank</connection-url>

        Comment


        • #5
          Frage: Bist du beim lookup innerhalb der JBoss-VM? Wenn ja, dann laß mal beim InitialContext die Umgebungs-Properties weg, also einfach

          InitialContext context = new InitialContext();

          Wenn nein, dann funktioniert der lookup mit dieser Konfiguration ohnehin nicht, da der java-Kontext nur innerhalb der Server-VM verfügbar ist.

          Du kannst in diesem Fall versuchen, ein

          <use-java-context>false</use-java-context>

          einzufügen, also

          <local-tx-datasource>
          <jndi-name>kundendatenbank</jndi-name>
          <use-java-context>false</use-java-context>
          ...

          Der remote-lookup müsste dann klappen (allerdings ohne den java-Prefix). Das funktioniert aber auch erst ab einer bestimmten JBoss-Version (ich glaube 4.0). Vorher konnte man auf DataSources remote gar nicht zugreifen.

          Comment


          • #6
            Prima, es klappt! Ich habe Deine zweite version ausprobiert mit

            <use-java-context>false</use-java-context>

            Prima, es klappt! (Habe JBoss 4.0.)

            Danke!!!

            Comment


            • #7
              Hallo,

              hab ein ähnliches Problem. Jedoch arbeite ich mit einer XML-DB.
              Das ganze sollte eigentlich laufen. Jedoch bei mir nicht.
              Bekomme immer die Fehlermeldung :
              ERROR [STDERR] javax.naming.NameNotFoundException: CoLORServiceBean not bound

              Der Aufruf den mir der JBoss als Grund nennt sieht wie folgt bei mir aus: CSB = (CoLORService) ctx.lookup("CoLORServiceBean/remote");


              Selbst der Entwickler des WebServices kann sich die Fehlermeldung nicht erklären!

              Comment


              • #8
                Hallo
                Ich krieg vom JBoss beim deployen folgende Fehlermeldung:
                javax.naming.NamingException: resource-ref: jdbc/testapp has no valid JNDI binding. Check the jboss-web/resource-ref

                Aber die mysql-ds.xml existiert und der jndi-name ist identisch. im jboss-web.xml ist
                <jboss-web>
                <resource-ref>
                <res-ref-name>jdbc/testapp</res-ref-name>
                <res-type>javax.sql.DataSource</res-type>
                <jndi-name>java:/testapp</jndi-name>
                </resource-ref>
                </jboss-web>

                wo liegt der fehler?
                und die web.xml und ejb-ref.xml sind vollständig. gehört sonst noch was in die jboss-web.xml oder jboss.xml?

                Comment


                • #9
                  Ich geh mal davon aus das Du im web.xml und/oder ejb-jar.xml ebenfalls einen Block

                  <resource-ref>
                  <res-ref-name>jdbc/testapp</res-ref-name>
                  <res-type>javax.sql.DataSource</res-type>
                  ...

                  hast. Im Code muß dann mit

                  Code:
                  context.lookup("java:comp/env/jdbc/testapp");
                  abgefragt werden. Den <res-type> im jboss-web.xml kannst Du Dir sparen. Dort erfolgt nur das Mapping res-ref-name -> jndi-name

                  Comment

                  Working...
                  X