2015-06-16 2 views
6

Ich benutze Jboss EAP 6.3 und muss Messaging-Funktion verwenden. Ich habe gearbeitet in Jboss 4x, wo wir Verbindung einfach folgenden Code machen:Schreiben Sie ein Java-Programm, um in Jboss EAP 6.3 eine Verbindung zum HornetQ-Messaging-Dienst herzustellen?

public static final String PROVIDER_URL = "jnp://localhost:5445"; 
    public static final String JNP_INTERFACES = "org.jboss.naming:org.jnp.interfaces"; 
    public static final String INITIAL_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory"; 

    private static Context initialContext; 

    public static Context getInitialContextForClient() throws NamingException{ 
      if(initialContext == null){ 
       Properties prop = new Properties(); 
       prop.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
       prop.put(Context.URL_PKG_PREFIXES,JNP_INTERFACES); 
       prop.put(Context.PROVIDER_URL, PROVIDER_URL); 
       initialContext = new InitialContext(prop); 
      } 
      return initialContext; 
    } 

Wird über Art und Weise der Arbeit in EAP 6.3 verbinden HornetQ? Wenn ja, welche anderen Konfigurationen sind erforderlich? Auch ich fand 1099 ist auch nicht standardmäßig in standalone.xml konfiguriert.

Im Folgenden sind von Standardeinstellung für HornetQ getan in Standalone-full.xml Datei:

<subsystem xmlns="urn:jboss:domain:messaging:1.4"> 
     <hornetq-server> 
      <persistence-enabled>true</persistence-enabled> 
      <journal-type>NIO</journal-type> 
      <journal-min-files>2</journal-min-files> 

      <connectors> 
       <netty-connector name="netty" socket-binding="messaging"/> 
       <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> 
        <param key="batch-delay" value="50"/> 
       </netty-connector> 
       <in-vm-connector name="in-vm" server-id="0"/> 
      </connectors> 

      <acceptors> 
       <netty-acceptor name="netty" socket-binding="messaging"/> 
       <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> 
        <param key="batch-delay" value="50"/> 
        <param key="direct-deliver" value="false"/> 
       </netty-acceptor> 
       <in-vm-acceptor name="in-vm" server-id="0"/> 
      </acceptors> 

      <security-settings> 
       <security-setting match="#"> 
        <permission type="send" roles="guest"/> 
        <permission type="consume" roles="guest"/> 
        <permission type="createNonDurableQueue" roles="guest"/> 
        <permission type="deleteNonDurableQueue" roles="guest"/> 
       </security-setting> 
      </security-settings> 

      <address-settings> 
       <address-setting match="#"> 
        <dead-letter-address>jms.queue.DLQ</dead-letter-address> 
        <expiry-address>jms.queue.ExpiryQueue</expiry-address> 
        <redelivery-delay>0</redelivery-delay> 
        <max-size-bytes>10485760</max-size-bytes> 
        <page-size-bytes>2097152</page-size-bytes> 
        <address-full-policy>PAGE</address-full-policy> 
        <message-counter-history-day-limit>10</message-counter-history-day-limit> 
       </address-setting> 
      </address-settings> 

      <jms-connection-factories> 
       <connection-factory name="InVmConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/ConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <connection-factory name="RemoteConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="netty"/> 
        </connectors> 
        <entries> 
         <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <pooled-connection-factory name="hornetq-ra"> 
        <transaction mode="xa"/> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/JmsXA"/> 
        </entries> 
       </pooled-connection-factory> 
      </jms-connection-factories> 

      <jms-destinations> 
       <jms-queue name="ExpiryQueue"> 
        <entry name="java:/jms/queue/ExpiryQueue"/> 
       </jms-queue> 
       <jms-queue name="DLQ"> 
        <entry name="java:/jms/queue/DLQ"/> 
       </jms-queue> 
      </jms-destinations> 
     </hornetq-server> 
    </subsystem> 

Im Folgenden sind Socket-Bindungen in derselben Datei:

<socket-binding name="messaging" port="5445"/> 
    <socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/> 
    <socket-binding name="messaging-throughput" port="5455"/> 

Ich habe versucht, es wie unten, weil nicht in der Lage zu siehe org.jnp.interfaces.NamingContextFactory Klasse in Jboss EAP 6.3:

prop.put(Context.PROVIDER_URL,"localhost:5445"); 
prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.hornetq.core.remoting.impl.netty.NettyConnectorFactory"); 
prop.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces"); 

Curre Es wirft nur Connection Exception.

Könnte jemand bitte vorschlagen oder ein Java-Programm zur Verbindung mit Hornetq in Jboss EAP 6.3 vorschlagen?

Update: Ich weiß immer noch nicht, ob ich die richtige Vorgehensweise der gleichen zu folgen bin.

Es folgt Ausnahmen, die ich erhalte:

javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jnp.interfaces.NamingContextFactory from classloader ModuleClassLoader for Module 

ich seine jboss-client.jar in bin/Client und fand überprüft haben, die obige Schnittstelle dort nicht vorhanden ist, aber in früheren Versionen vorhanden ist, die jbiss enthält -allclient.jar. Ich glaube nicht, dass das in dieser jboss-Version richtig ist.

+0

Es könnte hilfreich sein, wenn Sie einen vollständigen Stacktrace hinzufügen. –

+0

@MartinBaumgartner Ich habe Ausnahmen oben aktualisiert. Es wird besser sein, wenn ich Informationen darüber bekommen kann, welche Strategie ich in zwei Schnipsel folgen soll und welche ist richtig oder sollte ich keiner der obigen folgen? – fatherazrael

+0

Passen Sie auf, ich denke, Sie versuchen, den Port 5445 für die Nachrichtenwarteschlange und Ihre Initialcontext-Konfiguration zu verwenden. Beide können nicht am selben Port arbeiten. Ich denke du verwendest den falschen Port für deinen initialContext. –

Antwort

0

Klicken Sie auf this jboss Link; enthält ein Schnellstartprogramm, das das genannte Problem löst.

1) Den Code herunterladen; Importieren Sie pom.xml von jboss-helloworld-jms in Netbeans. Führen Sie einen sauberen Build aus.

2) Verwenden Sie diesen Link, um Maven Probleme zu lösen bauen: Pom not found

3) Nach Schnipsel ist die Verbindung zum Server verwendet, um

private static final String DEFAULT_MESSAGE = "Hello, World!"; 
private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory"; 
private static final String DEFAULT_DESTINATION = "jms/queue/test"; 
private static final String DEFAULT_MESSAGE_COUNT = "1"; 
private static final String DEFAULT_USERNAME = "quickstartUser"; 
private static final String DEFAULT_PASSWORD = "quickstartPwd1!"; 
private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory"; 
private static final String PROVIDER_URL = "remote://localhost:4447"; 

String connectionFactoryString = System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY); 
log.info("Attempting to acquire connection factory \"" + connectionFactoryString + "\""); 
connectionFactory = (ConnectionFactory) context.lookup(connectionFactoryString); 
log.info("Found connection factory \"" + connectionFactoryString + "\" in JNDI"); 

4) Benutzer erstellen "quickstartUser"/"quickstartPwd1! ", in Jboss EAP 6.3; mit adduser.Fledermaus im Anwendungsbereich

5) Überprüfen Sie, ob diese jms/queue/test und jms/RemoteConnectionFactory in Standalone.xml vorhanden sind.

6) Ausführen von Code als einfache Java-Anwendung und Magie ist da.

0

Nach Ihren stacktrace ich nehme an, Sie nicht Ihre alten JNDI-Einstellungen JBoss EAP 6.3

adept Von: http://blog.akquinet.de/2014/09/26/jboss-eap-wildfly-three-ways-to-invoke-remote-ejbs/

Properties prop = new Properties(); 

prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 

prop.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080"); 
prop.put(Context.SECURITY_PRINCIPAL, "username"); 
prop.put(Context.SECURITY_CREDENTIALS, "password"); 

prop.put("jboss.naming.client.ejb.context", false); 
prop.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 

Context context = new InitialContext(prop); 

Ihre Anwendung kann nicht den initial instanziiert, was ein Problem sollten Sie ist konzentrieren Sie sich auf.

Auch sieht es irgendwie komisch für mich aus, dass sowohl die Nachrichtenwarteschlange als auch Ihr jndi versucht, localhost: 5445 zu verbinden.

+0

Es heißt: ConnectionFactory - service jboss.naming.context.java.jboss.exported.ConnectionFactory – fatherazrael

+0

Bitte fügen Sie volle Stacktraces, das wäre wirklich hilfreich. Außerdem gibt es oft mehr Informationen in den Protokollen als die letzte Ausnahmebedingungsnachricht, und außerdem wäre der fehlerverursachende Code gut. –

Verwandte Themen