Schweißnaht nicht richtig initialisiert

8

Ich richte eine Basisumgebung für das Lernen von CDI in JavaEE7 ein. Ich habe den folgenden Code zum Starten von Weld . Nur ein Start und Herunterfahren.

%Vor%

Ich folge meiner Konsole.

%Vor%

Die problematische Zeile ist WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. . Dies bedeutet einfach, dass die Dependency-Injektion nicht funktioniert. Aber ich bin mir nicht sicher, was das Problem ist. Ich habe weld-se.jar in meinem CLASSPATH hinzugefügt. Ich habe nicht einmal den Punkt der Initialisierung eines Objekts erreicht, warum tritt dieses Problem auf?

Die offizielle Dokumentation von Weld gibt auch denselben Code, den ich nach dem Lesen dieser Antwort erhalten habe . Der gleiche Code wird in dem Buch "Beginning Java EE 7" von "Antonio Goncalves" verwendet. Ich habe die Importe von dieser GitHub-Standort . Wenn ich also den korrekten Klassenpfad verwendet habe und kein Objekt erstellt habe, warum tritt dieses Problem auf?

    
Aseem Bansal 11.07.2014, 19:21
quelle

3 Antworten

1

Zum Ausführen der Java EE-Anwendung ist ein Anwendungsserver (oder Container) erforderlich. Dieser Container macht Ihr Leben bei der Integration verschiedener Dienste (Sicherheit, Messaging, Transaktionen usw.), die für die Ausführung einer Unternehmensanwendung benötigt werden, sehr einfach.

Wenn Sie keinen Anwendungsserver verwenden (wie Sie es in Ihrem Beispiel tun), müssen Sie diese Integration selbst vornehmen (d. h. einen eigenen Server erstellen). Das ist eine sehr harte und nutzlose Aufgabe, da Server existieren.

Der Code, den Sie in Ihrer Frage zeigen, ist, wie Sie den proprietären Teil von Weld verwenden können, um einen CDI-Container von Hand zu starten, wenn Sie keinen Container verwenden wollen oder können.

Wenn Sie das Buch von Antonio sorgfältig lesen, sehen Sie, dass auf der Seite xxxiv im Abschnitt "Herunterladen und Ausführen des Codes" angegeben ist, dass Sie Ihre Version bereitstellen müssen Code auf Glassfish 4, einem der Open Source Java EE 7 Server (der andere ist JBoss Wildfly )

Anhang A des Buchs ( Seite 539 ) beschreibt auf sehr präzise Weise, wie Sie Ihre Umgebung einrichten, um Buchbeispiele und einfache Java EE-Anwendungen auszuführen. Bitte folgen Sie den Anweisungen in diesem Teil und Sie werden sehen, dass die Entwicklung und Implementierung von Java EE 7 sehr einfach ist.

    
Antoine Sabot-Durand 23.09.2014, 17:32
quelle
5

Ihre Einrichtung ist in Ordnung, um CDI in Java SE zu lernen.

Für die Verwendung von CDI in Java EE benötigen Sie natürlich einen Java EE Container, eine einfache alte Anwendung mit einer main Methode wird nicht funktionieren.

Weld sagt Ihnen einfach, dass Transaktionen nicht verfügbar sind (da Sie nicht in einem EE-Container ausgeführt werden), daher werden alle transaktionsbezogenen CDI-Funktionen deaktiviert.

Abhängigkeitsinjektion funktioniert in Ihrem Fall, solange Sie nicht versuchen, Java EE-Objekte zu injizieren oder CDI-Funktionen zu verwenden, die einen Java EE-Container erfordern.

    
Harald Wellmann 12.07.2014 13:13
quelle
2

Um eine CDI-Lernumgebung einzurichten, benötigen Sie lediglich eine CDI-Implementierung, z. B. die Weld-Referenzimplementierung. Sie benötigen keinen Java EE-Container.

Der einfachste Weg ist, ein Maven-Projekt mit einer Abhängigkeit in pom.xml zu erstellen: (Stellen Sie sicher, dass Sie vor dem Ausführen der Java-Anwendung eine leere oder die minimale beans.xml -Datei im META-INF -Verzeichnis erstellen. Wenn Sie sich für maven entscheiden, können Sie META-INF im Verzeichnis src/main/resources erstellen)

%Vor%

Hier ist die Anwendung:

%Vor%

Die Klasse Book :

%Vor%

Und die Klasse BookService , um ein Buch zu erstellen und sein Aktivierungsdatum und seine ID (ISBN) mit dem eingegebenen NumberGenerator :

festzulegen %Vor%

In einer Servlet-Umgebung ist der Servlet-Container dafür verantwortlich, das CDI zu starten, dh Sie müssen Ihre "Webanwendung" auf einem Java EE-Container wie Tomcat oder Wildfly bereitstellen.

    
alix 19.06.2016 22:38
quelle

Tags und Links