# Datasourcemapping im OC4J



## bronks (12. Mrz 2005)

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.

```
<?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 (12. Mrz 2005)

soll das heissen, dass es so nicht funktioniert:

```
<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 (12. Mrz 2005)

@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 (12. Mrz 2005)

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 (12. Mrz 2005)

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:

```
<?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:

```
<?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 (12. Mrz 2005)

ahhh, schon wieder sorry!

die datasource stellt man in der jbosscmp-jdbc.xml ein

```
<jbosscmp-jdbc>
   <defaults>
     <datasource>java:/TestSource</datasource>
     <datasource-mapping>mySQL</datasource-mapping>
   </defaults>

   <enterprise-beans>
      <entity>
...
```


----------



## Bleiglanz (12. Mrz 2005)

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

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


----------



## bronks (12. Mrz 2005)

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 (12. Mrz 2005)

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...


----------



## Guest (13. Mrz 2005)

```
<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.


----------

