bekam schließlich die Antwort,
retrieving a value from message listener and print in Main
In dieser Klasse haben die Benutzer ein Beispiel gegeben:
@Stateful
public class AManagerBean implements ejb.AManagerRemote {
@Resource(mappedName = "jms/QueueConnectionFactory")
private ConnectionFactory queueConnectionFactory;
@Resource(mappedName = "jms/Queue")
private Queue queue;
private static int fineAmt;
......
static class AListener implements MessageListener{
public void onMessage(Message message){
.....
fineAmt = msg.getInt("fineAmt");
// I NEED FINEAMT TO SHOW IN MAIN CLASS
.....
}
}
public int returnFine(){
return fineAmt;
}
In der Hauptklasse ...
public class Main {
@EJB
public static AManagerRemote amr;
public static void main(String[] args) {
......
System.out.println(amr.returnFine());
// ALWAYS RETURN 0
Zuallererst sind nicht-finale statische Variablen in einem EJB nicht erlaubt. Es gibt einen Eintrag dazu in der EJB Restrictionc FAQ
Nicht-finale statische Klassenfelder sind in EJBs nicht zulässig, da solche Felder die Verteilung einer Enterprise-Bean erschweren oder unmöglich machen. Statische Klassenfelder werden von allen Instanzen einer bestimmten Klasse gemeinsam genutzt, jedoch nur innerhalb einer einzelnen Java Virtual Machine (JVM). Das Aktualisieren eines statischen Klassenfelds impliziert die Absicht, den Feldwert zwischen allen Instanzen der Klasse zu teilen. Wenn eine Klasse jedoch gleichzeitig in mehreren JVMs ausgeführt wird, haben nur die Instanzen Zugriff auf den neuen Wert, die in derselben JVM wie die aktualisierende Instanz ausgeführt werden. Mit anderen Worten verhält sich ein nicht finales statisches Klassenfeld anders, wenn es in einer einzelnen JVM ausgeführt wird, als wenn es in mehreren JVMs ausgeführt wird. Der EJB-Container reserviert die Option, Enterprise-Beans über mehrere JVMs zu verteilen (die auf demselben Server oder auf einem Cluster von Servern ausgeführt werden). Nicht finale statische Klassenfelder sind nicht zulässig, da sich Enterprise-Bean-Instanzen abhängig davon, ob sie verteilt sind oder nicht, unterschiedlich verhalten. Zweitens haben Sie eine Stateful-Session-Bean definiert. Eine Stateful-Session-Bean soll einen Konversationsstatus haben, und ein Client (normalerweise) hat für die Dauer seiner Lebenszeit ein Handle mit derselben Stateful-Bean. Ich kann in Ihrem Beispiel nichts Konversation sehen (ich nehme an, da Sie etwas Code ausgeschnitten haben), also muss es wirklich eine Stateful Bean sein?
Also würde ich vorschlagen, dass das erste, was du tust, ist, ein Re-Design zu machen und zu versuchen, ein realistischeres Beispiel zu bekommen.
Verwenden der eigenständigen Hauptmethode, wie verbinden Sie Message Queue. Wahrscheinlich hilft Ihnen dieser Link http://www.novell.com/documentation/extend5/Docs/help/MP/jms/tutorial/ – Premraj
@premraj, ich versuche den Wert mit setMsgData (textMessage.getText()) zu setzen; und versuche dann, den Getter aufzurufen, um den Wert zu erhalten, aber leider wird der Getter nicht aufgerufen. –
Es würde helfen, wenn Sie den Code zeigen, der Getter aufrufen soll, da dies der Teil zu sein scheint, der nicht richtig funktioniert. –