Java Resource Adapter (JCA 1.5) / MDB Deployment Problem

larolana

Grünschnabel
Hallo zusammen,

ich habe ein Problem, bei dem ich nicht weiterkomme. I versuche basierend auf der JCA 1.5 Spezifikation einen Adapter zu schreiben, der sowohl Inbound (EIS -> AppServer) als auch Outbound (AppServer -> EIS) Kommunikation ermöglich soll. Ich habe mich zum Einstieg in das Thema zunächst an den Inbound gemacht. Als Vorlage dienet der Code aus dem Sun J2EE 1.4 Sample Applications (mailconnector). Den Adapter (.rar) habe ich erstellen können und auch das Deployment auf einem Weblogic 10.3 AppServer hat funktioniert. Der Adapter scheint den Log-Ausgaben nach sein Dienst, das Pollen einer Datei auf neuen Inhalt, zu verrichten. Nun müssen die erhalten Informationen an eine Applikation, die ebenfalls auf den gleichen Server deployed werden soll, weitergereicht werden. Der übliche Weg scheint die Verwendung einer MDB zu sein. Ich habe EJB Projekt mit einer MDB erstellt, die die Daten über ihre onMessage Methode empfangen soll. Beim Deployment tritt jedoch folgender Fehler auf:

Code:
Unable to deploy EJB: D:\Bea\bea_10.3\user_projects\domains\test_domain\servers\AdminServer\tmp\_WL_user\TestMdbEAR\s1hf62\TestMdb.jar from TestMdb.jar:

In EJB TestMdb(Application: TestMdbEAR, EJBComponent: TestMdb.jar), the bean class must implement myConnector.api.MessageListener.
        at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:452)
        at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
        at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
        at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
        at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58)
        Truncated. see log file for complete stacktrace

Diesen Fehler kann ich nicht erklären, da meine MDB das in der Fehlermeldung genannte Interface implementiert:

Code:
package myConnector.mdbTest;

import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class TestMdb implements MessageDrivenBean, myConnector.api.MessageListener {

	private static final long serialVersionUID = 1L;

	private transient MessageDrivenContext mdc = null;
	private Context context;
	
	public TestMdb() {
        System.out.println("<MDB> In TestMdb()");
    }
	
	@Override
	public void ejbRemove() throws EJBException {
		System.out.println("<MDB> In TestMdb.remove()");
	}

	public void ejbCreate() throws EJBException {
		System.out.println("<MDB> In TestMdb.create()");
	}

	@Override
	public void setMessageDrivenContext(MessageDrivenContext mdc) throws EJBException {
		System.out.println("<MDB> TestMdb.setMessageDrivenContext()");
		this.mdc = mdc;
	}

	@Override
	public void onMessage(String message) {
		try {
			context = new InitialContext();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
}

Habt Ihr einen Tipp? Habe ich etwas übersehen? Muss ich noch etwas in den Deployment Deskriptoren hinzufügen?


Vielen Dank & Gruß
Tim
 
Meines Erachtens muss ein MDB das Interface javax.jms.MessageListener implementieren.

Aber ist nur ein Tipp ins Blaue

MFG
Jenson
 
Zurück