# Problem beim Deployen auf Sun AS 8.1



## bronks (3. Apr 2005)

Beim Deployen einer CMP-EJB auf dem Sun AS hab ich leichte Probleme. Es ist wiedermal eine einfache Beispielapp, die auf anderen Servern bereits läuft.

Das Deploytool loost mit einer Fehlermeldung ab, die bereits in den Sunforen diskutiert wird:
http://forum.java.sun.com/thread.jspa?threadID=586406&tstart=15    (korrektur: Plötzlich kommen sinnvolle Fehlermeldungen; keine Ahnung was los war)

Der JAVKE dagegen beherrscht eine klare Sprache und meint folgendes:	

```
For [ ejb2cmpear#ejb2cmp.jar#Product ] Error: Exception [ JDO74033: Cannot deploy application 'ejb2cmpear'
 module 'ejb2cmp' with CMP beans: cmp-resource is not defined for this module. The minimum requirement for a 
cmp-resource is to specify the jndi-name of a jdbc-resource or a persistence-manager-factory-resource to be used with 
the beans. ] while initializing JDO code generator.
```

Alles klar was er meint. Ist ja schließlich deutlich genug, aber eigentlich hab ich alles gemacht, damit dieser Fehler nicht auftritt:
1. Connectionpool erstellt
2. JDBC-Resource erstellt
3. Eine sun-ejb-jar.xml gibt es auch in der folgendes steht:


```
<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-->
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.0 EJB 2.1//EN" "http://www.sun.com/software/appserver/dtds/sun-ejb-jar_2_1-0.dtd">
<sun-ejb-jar>
  <enterprise-beans>
    <ejb>
      <ejb-name>Product</ejb-name>
      <jndi-name>ejb/Product</jndi-name>
    </ejb>
    <cmp-resource>
      <jndi-name>jdbc/EJBCoreDS</jndi-name>
    </cmp-resource>
  </enterprise-beans>
</sun-ejb-jar>
```

Wer kennt das Problem? Wer kann mir einen Tipp geben? Danke!


----------



## Bleiglanz (4. Apr 2005)

irgendwo musst du ihm schon sagen, dass deine CMP Bean mit dieser oder jener Datenquelle arbeiten soll

im deploytool die ejb
-> sun-specific settings

in der dropdown von "EJB Settings" zu "CMP database" wechseln

dann die CMP ressource auswählen


----------



## bronks (4. Apr 2005)

@Bleiglanz:
Danke! Das habe ich gemacht gehabt ...

Edit: Wenn man zwischendurch den Save-Button drückt, dann hilft das. Es funktioniert noch nicht, aber ich denke, daß ich auf dem richtigen Weg bin.


----------



## bronks (5. Apr 2005)

Deployed wird die App jetzt einwandfrei, aber jetzt kommt eine Meldung, die mir garnichts sagt. Hat jemand bitte eine kurze Interpretation für u.g. Meldung für mich und evtl. einen Tip was man dagegen unternehmen kann.

Ich habe sogar eine laufende App auf dem SunAS (die Sampleapp für Netbeans4.1), in der ich fleißig abschaue, aber jetzt bin ich echt aufgschmissn!


```
System Exception
com.sun.enterprise.resource.PoolingException: javax.resource.spi.LocalTransactionException: No operations allowed after connection closed.

Connection was closed due to the following exception:

** BEGIN NESTED EXCEPTION ** 

java.sql.SQLException
MESSAGE: Communication link failure: java.io.IOException, underlying cause: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen

** BEGIN NESTED EXCEPTION ** 
... ...
```


----------



## Bleiglanz (5. Apr 2005)

>>No operations allowed after connection closed

machst du irgendwas "händisch" mit JDBC?

Pool eingerichtet in der Adminoberfläche?


----------



## bronks (5. Apr 2005)

Bleiglanz hat gesagt.:
			
		

> ... machst du irgendwas "händisch" mit JDBC?
> 
> Pool eingerichtet in der Adminoberfläche?


Absolut kein händisches JDBC. Die betroffene App habe ich auf dem JBoss problemlos zum laufen gebracht und auf dem OC4J läuft das ding sowieso, weil mit dem JDeveloper erstellt.

Pool und das ganze drumherum ist eingerichtet und mit BMP funktioniert es einwandfrei.


----------



## Bleiglanz (5. Apr 2005)

welche Datenbank?


----------



## bronks (5. Apr 2005)

Bleiglanz hat gesagt.:
			
		

> welche Datenbank?


Mysql 4.10 nt max


----------



## Bleiglanz (6. Apr 2005)

Keine Ahnung was los ist!

irgendwo wird eine Verbindung einfach geschlossen, die Frage ist wo? Sagt der Server nicht, wo die Ex aufgetreten ist?

evtl. mal mit JDBC url + autoreconnect=true 

versuchen?


----------



## bronks (7. Apr 2005)

Bleiglanz hat gesagt.:
			
		

> ... autoreconnect=true ...


Danke! Vielen Dank!    Das war das große Problem

Jetzt ist aber noch ein Problem aufgekommen:
Auf dem Orion und dem JBoss funktioniert alles, also wird etwas sun-spezielles nicht ganz korrekt sein. Ich habe mir in Netbeans4.1 für die betroffene Datentabelle eine CMP generieren lassen, welche funktioniert und habe die sun-speziellen DeploymentDescriptors mit meinen Verglichen, aber ich werde leider nicht schlau ...

Meine EJB heißt "Product", die Tabelle in der DB heißt "Product*s*". 

In der "sun-cmp-mappings.xml" steht folgendes und es müßte ja passen:

```
... ...
     <ejb-name>Product</ejb-name>
      <table-name>PRODUCTS</table-name>
      <cmp-field-mapping>
        <field-name>basePrice</field-name>
        <column-name>PRODUCTS.PRICE</column-name>
      </cmp-field-mapping>
... ...
```
Ich habe nichts anderes gefunde, mit was man die EJB mit der DB-Tabelle in verbindung bringen kann. Wenn die EJB auf dem SunAS läuft, dann will sie dauernd auf die Tabelle "Product" zugreifen; so heißt die EJB, aber nicht die Tabelle.

Im DeployTool ist folgendes für die EJB im Register Entity  zu erkennen, daß die Find/Select Queries alle OK sind

Wenn man auf den Button "CMP Database (Sun specific ...)" drückt dann steht da das Problem offensichtlich da:
- Enterprise Bean: Product  (Das ist richtig)
- Primary Table: Product (Das ist falsch)
- Die Fieldmappings darunter sind ebenfalls falsch

Ist es mit der Zuordnung in der "sun-cmp-mapping.xml", wie oben zu sehen, noch nicht alles getan? Bitte einen Tipp für mich. Danke!


----------



## Bleiglanz (7. Apr 2005)

doch, aber du musst bei den spaltennamen natürlich die richtigen eintragen?

nämlich genau die, die zu deiner datenbank passen??


----------



## bronks (7. Apr 2005)

Bleiglanz hat gesagt.:
			
		

> doch, aber du musst bei den spaltennamen natürlich die richtigen eintragen?
> 
> nämlich genau die, die zu deiner datenbank passen??


Ich hab ganz geguldig den ganzen Nachmittag damit herumgespielt. Letztendlich habe ich die EJB umbenannt, weil den SunAS absolut nicht interessiert, daß ich "<table-name>PRODUCTS</table-name>"  geschrieben habe. Er sucht immer eine Tabelle, die so heißt wie die EJB und was vor den Feldnamen steht ist dem SunAs auch egal. Auf jeden Fall ist das eine so einfache Sache, daß man m.E. dabei eigentlich garnichts falsch machen kann. Ein Bug?  :?


----------



## Bleiglanz (8. Apr 2005)

pfff keine ahnung

vielleicht liegst auch nur am deploytool (das eigentlich nur für anfänger geeignet ist); das hat IMHO - habs aber nicht genau überprüft - gewisse probleme beim einlesen vorhandener xmls


----------

