Aufgrund einer Änderung in der JAX-RPC-Spezifikation
(Java™ APIs for XML based Remote Procedure Call)
können EJB-Anwendungen, die in WebSphere Application Server Version 5.1 noch gepackt werden konnten,
in Version 9.0 nur noch dann gepackt werden, wenn Sie den Code für die Ausnahmebehandlung der EJB-Basisanwendung ändern.
Informationen zu diesem Vorgang
Im Wesentlichen sagt die Spezifikation JAX-RPC Version 1.1 Folgendes:
eine servicespezifische Ausnahme, die in einer fernen Methodensignatur deklariert ist, muss eine geprüfte Ausnahme sein.
Sie muss eine Erweiterung von java.lang.Exception (direkt oder indirekt), darf aber keine
RuntimeException sein.
Eine direkte Verwendung von java.lang.Exception und java.lang.Throwable ist also nicht möglich. Für die Konformität mit der
Spezifikation müssen Sie Ihre Anwendungen ändern und servicespezifische Ausnahmen verwenden.
Vorgehensweise
- Ändern Sie die Anwendungen, die servicespezifische Ausnahmen verwenden. Angenommen, die vorhandene EJB verwendet eine servicespezifische Ausnahme mit dem Namen
UserException. Die UserException enthält ein Feld mit dem Namen ex, das den Typ
java.lang.Exception hat.
Um Ihre Anwendung mit Web-Services in
WebSphere Application Server Version 9.0
verfügbar zu machen, müssen Sie die Klasse UserException ändern. In diesem Beispiel könnten Sie die Klasse UserException so ändern, dass
ex den Typ "java.lang.String" anstelle des Typs "java.lang.Exception" erhält.
new UserException class:
package irwwbase;
/**
* Beschreibung des Typs hier einfügen
* Erstellungsdatum: (9/25/00 2:25:18 PM)
* @author: Administrator
*/
public class UserException extends java.lang.Exception {
private java.lang.String _infostring = null;
private java.lang.String ex;
/**
* Kommentar zum Konstruktor für die UserException
*/
public UserException() {
super();
}
/**
* Kommentar zum Konstruktor für die UserException
*/
public UserException (String infostring)
{
_infostring = infostring;
} // ctor
/**
* Beschreibung der Methode hier einfügen
* Erstellungsdatum: (11/29/2001 9:25:50 AM)
* @param msg java.lang.String
* @param ex java.lang.Exception
*/
public UserException(String msg,String t) {
super(msg);
this.setEx(t);
}
/**
* @return
*/
public java.lang.String get_infostring() {
return _infostring;
}
/**
* @return
*/
public java.lang.String getEx() {
return ex;
}
/**
* @param string
*/
public void set_infostring(java.lang.String string) {
_infostring = string;
}
/**
* @param Exception
*/
public void setEx(java.lang.String exception) {
ex = exception;
}
public void printStackTrace(java.io.PrintWriter s) {
System.out.println("the exception is :"+ex);
}
}
- Ändern Sie die gesamte Ausnahmebehandlung in den betroffenen Enterprise-Beans. Sie müssen sicherstellen, dass Ihre Enterprise-Beans für die Unterstützung der neuen Ausnahmen codiert sind.
In diesem Beispiel könnte der Code wie folgt aussehen:
new EJB exception handling:
try {
if (isDistributed()) itemCMPEntity = itemCMPEntityHome.findByPrimaryKey(ckey);
else itemCMPEntityLocal = itemCMPEntityLocalHome.findByPrimaryKey(ckey);
} catch (Exception ex) {
System.out.println("%%%%% ERROR: getItemInstance - CMPjdbc " + _className);
ex.printStackTrace();
throw new UserException("error on itemCMPEntityHome.findByPrimaryKey(ckey)",ex.getMessage());
}