tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
723
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tonteria Tonteria ist offline Mitglied
    Registriert seit
    Jan 2007
    Beiträge
    17
    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 :

    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änger :

    PHP-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 = (TextMessagemessage;
          
    System.out.println(textMsg);
          try {
            
    inbox.setValue(textMsg.getText());
        } catch (
    JMSException e) {
            
    // TODO Auto-generated catch block
            
    e.printStackTrace();
        }
      }
     
      


    EmpfängerPostfach

    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;
        }

        

    View :

    HTML-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>
    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 in
    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,

    Tonteria
    Geändert von Tonteria (20.05.10 um 00:58 Uhr)
     

  2. #2
    Tonteria Tonteria ist offline Mitglied
    Registriert seit
    Jan 2007
    Beiträge
    17
    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 :

    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 byjava.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  [AbstractDLQHandlerMessage redelivered=6 max=5 sending it to the dlq delegator->JBossMessage[20878292186660866]:PERSISTENTdeliveryId=
    Sieht so aus als sei der Empfänger nicht initialisiert. ich dachte aber das geschieht automatisch vom JBoss aus.
    Hat vielleicht jemand Ahnung davon und weiß dazu einen Rat ?

    Beste Grüße,

    Tonteria
    Geändert von Tonteria (20.05.10 um 01:12 Uhr)
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 18.05.10, 18:46
  2. Antworten: 1
    Letzter Beitrag: 11.07.07, 11:56
  3. Messages nach Export einer RCP
    Von KlaDi im Forum Java
    Antworten: 0
    Letzter Beitrag: 06.03.07, 16:22
  4. Antworten: 2
    Letzter Beitrag: 16.01.06, 08:41
  5. Antworten: 3
    Letzter Beitrag: 01.03.05, 10:36

Stichworte