Newsgroup: it.comp.java
Titolo: MDB & Transazioni

Ciao a tutti
Non riesco a far partire il contesto transazionale in OC4J per i Message
Driven Bean. Il file ejb-jar.xml:
<ejb-jar>
 <description>no description</description>
 <display-name>NetQueueListener</display-name>
 <enterprise-beans>
  <message-driven>
   <description>no description</description>
   <display-name>NetQueueListener</display-name>
   <ejb-name>NetQueueListener</ejb-name>
   <ejb-class>mgo.jms.ejb.business.NetQueueListener</ejb-class>
   <transaction-type>Container</transaction-type>
   <message-driven-destination>
    <destination-type>javax.jms.Queue</destination-type>
   </message-driven-destination>
   <security-identity>
    <description></description>
    <use-caller-identity>True</use-caller-identity>
    <run-as-specified-identity>
     <description></description>
     <role-name>NetAdministrator</role-name>
    </run-as-specified-identity>
   </security-identity>
  </message-driven>
 </enterprise-beans>
 <assembly-descriptor>
  <security-role>
   <description>Amm coda Net</description>
   <role-name>NetAdministrator</role-name>
  </security-role>
  <container-transaction>
   <method>
    <ejb-name>NetQueueListener</ejb-name>
    <method-intf>Remote</method-intf>
    <method-name>onMessage</method-name>
    <method-params>
     <method-param>javax.jms.Message</method-param>
    </method-params>
   </method>
   <trans-attribute>Required</trans-attribute>
  </container-transaction>
 </assembly-descriptor>
</ejb-jar>
Nel caso di Container Management Transaction ho i seguenti errori:
java.lang.IllegalStateException: MessageDriven beans have no EJBHome
java.lang.IllegalStateException: Not active or marked for rollback
Mentre nel caso di Bean Management Transaction (modificando opportunamente
il file ejb-jar.xml) ottengo:
java.lang.IllegalStateException: Only beans with user-managed transactions
can invoke getUserTransaction()
Non so come proseguire.
Ho però una importantissima informazione, infatti sulla mailing list della
Orion (Azienda che produce OC4J - 
www.ironflare.com
) ho trovato numerose
domande simili e senza risposta. Sono giunto quindi alla conclusione che
molto probabilmente OC4J non supporta attualmente le transazioni CMT e BMT
per i Message Driven Bean.
Sono comunque molto interessato a possibili soluzioni.
Grazie a tutti. Ciao

 wrote in message
news:9rj6hi$jpg$1...@news.mch.sbs.de...


Ciao
Il codice dell'MDB è semplicissimo a parte gli import:
public class NetQueueListener implements MessageDrivenBean, MessageListener
{
  private transient MessageDrivenContext mdbContext;
  public void ejbCreate ()  throws CreateException { }
  public void ejbRemove() {   mdbContext = null;  }
  public void setMessageDrivenContext(MessageDrivenContext
messageDrivenContext) {   mdbContext = messageDrivenContext;  }
  public void onMessage(Message msg) {
    ObjectMessage obj = (ObjectMessage)msg;
    try {
System.out.println("<--------------->"+obj.getObject()+"<--------------->");
      mdbContext.setRollbackOnly();
    }
   catch(JMSException ex) { ex.printStackTrace(); }
  }
}//end Class
L'MDB prende l'oggetto in coda, lo stampa e lancia un rollback per
rimetterlo in coda (nel caso di BMT faccio il rollback a mano).
Penso che il ruolo 'system' :
  <security-identity>
        <run-as-specified-identity>
          <role-name>system</role-name>
        </run-as-specified-identity>
      </security-identity>
che mi consigli senza un opportuno mapping nell'assembly-descriptor porti ad
un errore del tipo:
nessun ruolo trovato come 'system'
ed inoltre bisogna associare un ruolo con i J2EE users e groups
dell'application server-J2EE Container (OC4J).
Ti assicuro che le ho provate tutte. Il discorso dei ruoli proprio dopo la
tua e-mail a riguardo.
Non sono riuscito a far partire il contesto transazionale sia CMT che BMT su
OC4J, mentre lo stesso codice che hai visto funziona benissimo sul server
J2EE (quello di prova messo a disposizione dalla SUN su cui funziona tutto
!)
Penso proprio che OC4J abbia qualche baco. Questa tesi è avvalorata anche
dalle numerose e-mail su 
www.iroflare.com
 riguardo questo problema e
soprattutto senza risposta.
Spero che tu abbia la soluzione altrimenti dovrò usare gli MDB senza
contesto transazionale, ossia imposssibilità di fare insert e/o update
direttamente o tramite altri ejb session staeless.
Grazie per l'interessamento.
Ciao e a presto



 wrote in message
news:9rmfps$i1q$1...@news.mch.sbs.de...
