ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
723
723
EMPFEHLEN
-
Hi,
ich wollte zum Einarbeiten in Seam und JMS im Speziellen eine kleine Mini-Chat-Anwendung schreiben in der 2 Chatter miteinander kommunizieren können. (Bin Anfänger in J2EE allgemein).
Dazu sollen 2 MDBs aus 2 verschiedenen Queues die Messages rausholen bzw. hineinpacken.
Für das Beispiel reicht aber erstmal 1 Sender, 1 Queue, 1 Empfänger, 1 EmpfängerPostfach, 1 View.
Bisher habe ich das folgendermaßen gehandhabt (ich gehe davon aus, dass es der falsche Ansatz ist, aber ich wollte wissen ob es auch so klappt) :
Sender :
Empfänger :PHP-Code:
package org.domain.chat.session;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.ScopeType;
@Name("chatterone")
@Scope(ScopeType.CONVERSATION)
public class ChatterOne {
@In
private QueueSender aQueueSender;
@In(create = true)
private QueueSession queueSession;
public void sendMessage() {
try {
aQueueSender.send(queueSession.createTextMessage("Test!"));
} catch (Exception e) {
System.out.println("aaaaaarrrggghhhh");
}
}
}
EmpfängerPostfachPHP-Code:
package org.domain.chat.session;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.ejb.ActivationConfigProperty;
import org.jboss.beans.metadata.api.annotations.Inject;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
@Name("chattertworeceiver")
@MessageDriven(name = "chatterTwoReceiver", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/chatQueue") })
public class ChatterTwoReceiver implements MessageListener {
@In(create=true)
public ChatterTwoInbox inbox;
public void onMessage(Message message) {
TextMessage textMsg = (TextMessage) message;
System.out.println(textMsg);
try {
inbox.setValue(textMsg.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
View :PHP-Code:
package org.domain.chat.session;
import org.jboss.seam.annotations.Name;
@Name("chattertwoinbox")
public class ChatterTwoInbox {
public String value;
public ChatterTwoInbox() {
}
public void setValue(String string) {
this.value=string;
System.out.println(string);
}
public String getValue(){
return value;
}
}
Bisher wird der Text nur als outputtext ausgegeben, was nur zu Testzwecken dienen soll (das funktioniert aber nicht aufgrund des fehlerhaften Codes im View nehm ich an). Eigentlich wollte ich die Messages untereinander inHTML-Code:<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" template="layout/template.xhtml"> <ui:define name="body"> <h:form> <rich:panel> <h:panelGrid columns="2"> <h:graphicImage value="/img/seamlogo.png" alt="Seam logo"/> <s:div styleClass="info"> <p><strong>Chat</strong></p> <ul class="bullets"> <li><a4j:commandButton value="start chat" action="#{chatterone.sendMessage}" reRender="a"/></li> <h:outputText id="a" value="#{chattertwoinbox.value}" /> </ul> </s:div> </h:panelGrid> </rich:panel> </h:form> </ui:define> </ui:composition>
Textfeldern oder Listboxen ausgeben lassen, weiß aber nicht wie das anzustellen ist
Ausserdem ist das mit dem Singleton nur eine Notlösung weil ich auch nicht wusste wie man MDBs aus dem View aus sonst ansprechen kann.
Meine Fragen :
1.) Wie geht man mit Listboxen in Seam um ?
2.) Ist es einfach die von einer MDB empfangene Message an eine Listbox weiterzuleiten ?
Bin am Verzweifeln... besten Dank für jeden Tipp im Voraus !
Herzliche Grüße,
TonteriaGeändert von Tonteria (20.05.10 um 00:58 Uhr)
-
Ich hab jetzt das Postfach per CDI in den Empfänger eingebunden um die Message an den View weiterzuleiten.
Siehe dazu erstes Post : Code von Empfänger und EmpfängerPostfach.
Wenn ich das aber mache bekomme ich folgende JBoss-Fehlermeldung :
Sieht so aus als sei der Empfänger nicht initialisiert. ich dachte aber das geschieht automatisch vom JBoss aus.PHP-Code:
javax.ejb.EJBTransactionRolledbackException
at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:115)
at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:80)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:262)
at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:270)
at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:140)
at $Proxy300.onMessage(Unknown Source)
at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:178)
at org.jboss.jms.client.container.ClientConsumer.callOnMessageStatic(ClientConsumer.java:160)
at org.jboss.jms.client.container.SessionAspect.handleRun(SessionAspect.java:831)
at org.jboss.aop.advice.org.jboss.jms.client.container.SessionAspect_z_handleRun_17807976.invoke(SessionAspect_z_handleRun_17807976.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170)
at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.jms.client.delegate.ClientSessionDelegate.run(ClientSessionDelegate.java)
at org.jboss.jms.client.JBossSession.run(JBossSession.java:199)
at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:234)
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:213)
at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:260)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.domain.chat.session.ChatterOneReceiver.onMessage(ChatterOneReceiver.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor$InvocationContext.proceed(InvocationContextInterceptor.java:138)
at org.jboss.seam.intercept.EJBInvocationContext.proceed(EJBInvocationContext.java:44)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56)
at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:118)
at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:83)
at org.jboss.ejb3.interceptors.aop.EJB3InterceptorInterceptor.invoke(EJB3InterceptorInterceptor.java:70)
at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:59)
at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_17807976.invoke(InvocationContextInterceptor_z_fillMethod_17807976.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_17807976.invoke(InvocationContextInterceptor_z_setup_17807976.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126)
... 30 more
00:57:06,075 WARN [AbstractDLQHandler] Message redelivered=6 max=5 sending it to the dlq delegator->JBossMessage[20878292186660866]:PERSISTENT, deliveryId=0
Hat vielleicht jemand Ahnung davon und weiß dazu einen Rat ?
Beste Grüße,
TonteriaGeändert von Tonteria (20.05.10 um 01:12 Uhr)
Ähnliche Themen
-
Seam : Objekt von MessageDrivenBean weiterleiten lassen (zwecks Textausgabe im View)?
Von Tonteria im Forum JavaAntworten: 0Letzter Beitrag: 18.05.10, 18:46 -
Messages in einer Console Application empfangen
Von henhus im Forum C/C++Antworten: 1Letzter Beitrag: 11.07.07, 11:56 -
Messages nach Export einer RCP
Von KlaDi im Forum JavaAntworten: 0Letzter Beitrag: 06.03.07, 16:22 -
[Axis] String weiterleiten und Antwort wieder vielleicht weiterleiten
Von Anime-Otaku im Forum JavaAntworten: 2Letzter Beitrag: 16.01.06, 08:41 -
CTreeCtrl + Messages in meiner View Klasse (abgeleitet von CWnd)
Von pibr im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 01.03.05, 10:36





Zitieren
Login





