JBoss AS 7 einfache "hello world" - Anwendung
Ich versuche einen einfachen JMS-Anwendung "Hello world" ausführen. Ich möchte versuchen, es auf JBoss Application Server 7, aber ich bin nicht in der Lage, um es auszuführen. Jboss HornetQ als embedden und ich begann ihn mit dem folgenden Befehl:
standalone.bat --server-config=standalone-preview.xml
Ich denke, das problem ist wahrscheinlich der Weg, den ich so konfiguriert haben, dass der queue innerhalb von JBoss. Hier sind die Schritte, die ich Tat.
- Konfigurieren Sie die queue -
Quene-name: testQueue
JNDI name: queue/test
Den queue Konfiguration ist eine option für "Auswahl". Kann dieses leer gelassen werden, und wenn nicht, was geht in diesem Bereich?
- Code
Hier ist der code, den ich verwende als Absender. Ich bin nicht besorgt der Empfänger für jetzt, wie ich gerade starten wollen, senden Sie eine Nachricht zuerst.
package jms.ex3;
import javax.naming.InitialContext;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.DeliveryMode;
import javax.jms.QueueSession;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
public class Sender
{
public static void main(String[] args) throws Exception
{
//get the initial context
InitialContext ctx = new InitialContext();
//lookup the queue object
Queue queue = (Queue) ctx.lookup("queue/test");
//lookup the queue connection factory
QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
lookup("queue/connectionFactory");
//create a queue connection
QueueConnection queueConn = connFactory.createQueueConnection();
//create a queue session
QueueSession queueSession = queueConn.createQueueSession(false,
Session.DUPS_OK_ACKNOWLEDGE);
//create a queue sender
QueueSender queueSender = queueSession.createSender(queue);
queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//create a simple message to say "Hello"
TextMessage message = queueSession.createTextMessage("Hello");
//send the message
queueSender.send(message);
//print what we did
System.out.println("sent: " + message.getText());
//close the queue connection
queueConn.close();
}
}
Wenn ich das vor der Klasse bekomme ich folgende Fehlermeldung:
java -classpath C:\Users\702723344\Downloads\glassfish-3.1.1\glassfish3\glassfish\lib\javaee.jar;. jms.ex3.Sender
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at jms.ex3.Sender.main(Sender.java:22)
Wie funktioniert das genau mit dem oben genannten Klasse weiß, dass der Provider(JBoss) ausgeführt wird auf dem localhost Maschine? Dont ich brauche, um geben Sie eine IP-Adresse irgendwo? Irgendwelche Ideen?
Bearbeiten
Meisten der Dokumentation, die scheinen zu beziehen sich auf den JBoss AS 6. Ich habe aktualisiert das code-snippet, um die folgenden:
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL, "jnp://localhost:1199");
ctx = new InitialContext(env);
Ich bin jetzt immer classNotFound exception. Ich denke, es braucht eine zusätzliche jar-Datei Hinzugefügt werden, um die classpath-aber welche???
java -classpath C:\Users\702723344\Downloads\glassfish-3.1.1\glassfish3\glassfish\lib\javaee.jar;. jms.ex3.Sender
Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.InitialContext.<init>(Unknown Source)
at jms.ex3.Sender.main(Sender.java:27)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
... 5 more
InformationsquelleAutor ziggy | 2011-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantwortung auf ClassNotFoundException.
org.jnp.interfaces.NamingContextFactory
können sich injboss-as-7.0.0.Final\modules\org\jboss\as\naming\main\jboss-as-naming-7.0.0.Final.jar
.Auch aufgefallen glassfish\lib\javaee.jar in Ihren Klassenpfad ein und wollte einen Rat zu geben, wie leicht enthalten im classpath mehrere Gläser von jboss/client Ordner.
Aber oups - es gibt keinen solchen Ordner in den JBoss AS 7.0.
Scheint es, dass JBoss AS 7.0 unterstützt keine remote-clients auf allen (zumindest für EJB).
Werfen Sie einen Blick auf diesen thread: http://community.jboss.org/message/613171. Es ist sehr interessant.
Gibt es eine chance, dass Sie weiter erhalten Sie etwas mit der Verwendung von ClassCastExceptions glassfish\lib\javaee.jar.
InformationsquelleAutor Vadzim
Ich bin nicht einverstanden mit der letzten Antwort von Vadzim
Ich weiß, ich bin die Beantwortung einer sehr alten Frage, aber diese info miss-led-mir, für einen Tag, Es war das erste mal, dass ich versucht hatte, Sie zu setup-JMS-Warteschlange remote auf JBOSS 7 , damit hatte zu beantworten, das hat mich arbeiten.
Ist es möglich, den Anruf zu remote queue. unten sind die folgenden Schritte ..
Stellen Sie sicher, dass Sie die Warteschlangen standalone.xml oder (full.xml) , unten habe ich myRemoteStatusQueue einrichten , wenn Sie beobachten, exportiert option ist ein muss, so dass der jboss weiß, es wird konsumiert durch die externen jms-client
Stellen Sie sicher, dass Sie zum hinzufügen einer Rolle zu einem Benutzer der Anwendung : wie ein remote-Rolle , nach dem hinzufügen der Rolle stellen Sie sicher, dass Sie Sie in der Jboss-s standalone.xml.
Stellen Sie sicher, verwenden Sie folgenden code ,die Sie sehen können, habe ich mit remote:/als Teil der URL für das remoting
Stellen Sie sicher, dass Sie die richtigen Gläser für das Obige Beispiel habe ich
hornetq-core-2.2.14.Final.jar
und die Verwendung der richtigen JBOSS-client-jar-Datei , die gehen, um die client-Ordner des bin-Verzeichnis der JBOSS Sie habenreadme.txt
, dort haben Sie auch Referenz-für Maven-version zu verwenden, wenn Sie als standalone-Anwendung, dann können Sie auf der angegebenen jar in das Verzeichnis.Bereitstellen der app auf JBOSS , Während der Inbetriebnahme sollten Sie die konfigurierte Warteschlange ohne Fehlermeldung. Sie können sehen, zum Beispiel in meinem server startup log,
java:jboss/exported/jms/queue/myRemoteStatusQueue
. Wenn der obige Eintrag hat mit zu kommen, Fehler, nun sind Sie gut zu gehen ...Happy coding,
Grüße,
Abhijith
InformationsquelleAutor Abhijith Rao