Datasourcemapping im OC4J

Status
Nicht offen für weitere Antworten.

bronks

Top Contributor
Mit dem Mapping gibt es bei mir Probleme. Egal ob OC4J oder JBoss. Entweder es kommt eine Fehlermeldung oder es funktioniert einfach nur nicht.

Im JDev hab ich eine Database mit dem Namen "EJB" angelegt. Über Lookup "jdbc/EJBCoreDS" komme ich auch wunder ran. So kann ich das auf keinen anderen Serverübertragen und will die Database ander mappen, damit ich den Lookup mit "java:comp/env/jdbc/EJBDS" machen kann.

Orientiert habe ich mich für den OC4J nach dieser Dokumentation für den OC4J und habe das versucht umzusetzen, was unter "Portable Data Source Lookup" steht.

Die ejb-jar.xml sieht jetzt so aus.
Code:
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
  <enterprise-beans>
    <entity>
         ... bla ... lba
        <res-ref-name>jdbc/EJBCoreDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    </entity>
  </enterprise-beans>
  <assembly-descriptor>
   ... bla ... bla  
</assembly-descriptor>
</ejb-jar>

In der orion-ejb-jar.xml steht im moment garnix. Wenn ich <resource-ref-mapping ... /> eintrge, dann wurdert sich der OC4J über den unbekannten Depoyment Tag. In o.g. Dokumentation steht auch nur drin, daß der Tag in ein OC4J-specific XML file reingehört. Ich dachte daß das die orion-ejb-jar.xml sein könnte.

Wer von euch ist so nett und schreibt mir bitte was ich in welche XML-Datei, an welcher stelle reinschreiben muß, damit ich an die DB über den Enviromental Context per "java:comp/env/jdbc/EJBDS" rankomme. Nach mehreren hunder Seiten Doku ist bei mir die Verwirrung perfekt und ich weiß nicht, was ich noch ausprobieren kann.
 

Bleiglanz

Gesperrter Benutzer
soll das heissen, dass es so nicht funktioniert:
Code:
<orion-ejb-jar>
<enterprise-beans>
<entity-deployment name="dieseBeanbrauchtZugriff">

<!-- resource-ref-mapping ist ein kindelement von
       entity-deployment -->

<resource-ref-mapping 
  location="physikalischer/JNDIname"                                      
  name="jdbc/EJBCoreDS" />

</entity-deployment>
</enterprise-beans>
</orion-ejb-jar>
 

bronks

Top Contributor
@Bleiglanz:
Doch so funktioniert es. Vielen Dank!

Das muß man erstmal wissen, daß resource-ref-mapping unter entity-deployment stehen muß. Jetzt ist der Zusammenhang klar.

Der OC4J schluckt das ohne weiteres. Der JBoss verschluckt sich daran gnadenlos und sucht eine Tabelle absolut unbegründet im HSql.

HSql hat damit doch ganichts zu tun, wenn ich auf MySql zugreifen will?
 

Bleiglanz

Gesperrter Benutzer
HSql hat damit doch ganichts zu tun,wenn ich auf MySql zugreifen will?

oha, du musst im jboss.xml für deine entity beans mit angeben, welche datasource verwendet werden soll (wenn diese angabe fehlt, dann nimmt der jboss immer seine "default" datenbank...)
 

bronks

Top Contributor
Ich hab im "Getting Started with JBoss" das Kapitel "using other Databases" mindestens schon 5x gelesen. Das steht zu dem Mysql beispiel nicht mehr drin. Wenn ich die "hsqldb-ds.xml" lösche, dann weiß JBoss nichteinmal mehr, ob er der Boss ist oder jemals war. Ich hab in die Dateien folgendes eingetragen. Fehlt dort irgendetwas? Ich kann auf die Datasource mit "java:/jdbc/EJBDS" ganz normal zugreifen. Nur wenn ich mit "java:/comp/env/jdbc/EJBMappedDS" zugreifen will, dann kommt der JBoss mit seinem Hsql angehumpelt. Bitte einen Tip.

jboss.xml:
Code:
<?xml version = '1.0' encoding = 'windows-1252'?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">
<jboss>
  <enterprise-beans>
    <entity-deployment name="Der Name der EntityBean">

      <resource-ref-mapping name="jdbc/EJBMappedDS"
                            location="jdbc/EJBCoreDS"/>
    </entity-deployment>
  </enterprise-beans>
</jboss>

ejb-jar.xml:
Code:
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
  <enterprise-beans>
    <entity>
...
      <resource-ref>
        <res-ref-name>jdbc/EJBMappedDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    </entity>
  </enterprise-beans>
...
 </ejb-jar>
 

Bleiglanz

Gesperrter Benutzer
ahhh, schon wieder sorry!

die datasource stellt man in der jbosscmp-jdbc.xml ein
Code:
<jbosscmp-jdbc>
   <defaults>
     <datasource>java:/TestSource</datasource>
     <datasource-mapping>mySQL</datasource-mapping>
   </defaults>

   <enterprise-beans>
      <entity>
...
 

Bleiglanz

Gesperrter Benutzer
ach ja, nur mal nebenbei: machst du CMP oder BMP?

wozu brauchen deine Entity-Beans eine Referenz auf eine Datasource??
 

bronks

Top Contributor
Bleiglanz hat gesagt.:
ach ja, nur mal nebenbei: machst du CMP oder BMP?

wozu brauchen deine Entity-Beans eine Referenz auf eine Datasource??
Ich mache BMP. Die jbosscmp-jdbc.xml beschreibt sicher eine CMP ... richtig erraten?

Die Entity-Bean soll Daten lesen, updates und inserts machen.
 

Bleiglanz

Gesperrter Benutzer
jo, dann vergiss mal die cmp dinger schnell wieder :)

dann musst du wohl oder übel für JEDE Entity in der jboss.xml einen eintrag machen, der den physikalischen namen (vermutlich in mysql-ds.xml zu finden) auf den ENC abbildet...

<ressource-ref>

<ressource-ref-name>encname</ejb-ref-name>

<jndi-name>physikalischername</jndi-name>

</ressource-ref>

irgendwie sowas...:)
 
G

Guest

Gast
Code:
<resource-ref>
  <res-ref-name>jdbc/EJBMappedDS</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>
in ejb-jar.xml für jede Entity-Bean und jede Session-Bean, die auf die Datenbank zugreift.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B EJBs funktionieren im OC4J nicht mehr Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben