tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
979
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ChrisJava ChrisJava ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    7
    hallo alle zusammen,

    ich würde gerne das eine meiner Stateless Session Beans im JBOSS, mit dem JBOSS gestartet wird. Ich habe über Onkel Google nicht allzu viele Informationen herausfinden können.

    Ich habe für den Websphere ein proprietäres Feature gefunden, welches wohl exakt das macht was ich mir wünsche. Und zwar die im Topic erwähnten Startup Beans. Nur würde ich es gerne mit Mitteln nach EJB3 machen, und natürlich im JBOSS.
    ist das möglich? Falls nicht gibt es für den JBOSS ein ähnliches proprietäres Feature?
    Ich habe leider bei meinen Recherchen nur einen hinweis auf ein Szenario mit MBeans gefunden. Dies habe ich leider nicht zum laufen bekommen.

    Über hilfe würde ich mich freuen. Ich hänge an diesem Thema schon einige Zeit.

    Danke

    Christian
     

  2. #2
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Was heißt "gestartet"? Reicht dir @PostConstruct nicht?

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  3. #3
    ChrisJava ChrisJava ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    7
    also gestartet heisst folgendes:

    es soll beim application server start, oder halt beim deploy meiner anwendung, eine instanz dieser stateless session bean angelegt werden.

    @PostConstruct würde erst ausgeführt werden wenn ein anderes Objekt eine Referenz auf dieses Objekt anfordert, da es dann erst Instanziert wird!?

    Normalerweise würde ja die Bohne erst instanziert werden, wenn ein Client oder eine andere Bohne darauf zugrieft.

    Ich möchte aber das das vorher schon passiert damit ich mir bestimmte daten zum "start" der application cachen kann...

    Ich habe nun für den JBOSS die Annotation @Service gefunden.
    Mit @Service kann ich einer klasse die ein bestimmtes interface implementiert die fähigkeit geben von jboss beim deploy gestartet zu werden.

    zwar ist dieses feature jboss spezifisch und dadurch natürlich nicht portabel, aber eventuell gibt es ja so etwas in ejb4

    naja wie dem auch sei, für interessiert hier mal ein snippet code...

    erst einmal das interface welches mit @Management annotiert ist.
    ps: ihr könnt diese @Service beans einfach über jmx anwenden.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    import org.jboss.ejb3.annotation.Management;
     
     
    @Management
    public interface StartupManagement {
     
        void create() throws Exception;
        void start() throws Exception;
        void stop() throws Exception;
        void destroy();
        
    }

    nun die implementierung der @Service klasse

    package com.aastra.hermes.ejb3;

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    import javax.ejb.EJB;
    import org.jboss.ejb3.annotation.Service;
     
    @Service
    public class Manager implements StartupManagement, ManagerLocal, ManagerRemote {
     
     
        @Override
        public void startup() {
                   // do some things at app startup 
        }
     
        @Override
        public void create() throws Exception {
            // TODO Auto-generated method stub
            
        }
     
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
     
        @Override
        public void start() throws Exception {
            // application start here! 
        }
     
        @Override
        public void stop() throws Exception {
            // application stop here 
            
        }
     
     
    }

    diese @Service beans können auch local und remote interfaces haben, sind also vom verhalten so wie session beans.

    mfg
     

  4. #4
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Du solltest überdenken, ob es sinnvoll ist zwischen Applikationsstart und Komponenteninstantiierung zu unterscheiden. Wenn die Komponente wirklich gebraucht wird, wird sie eh beim Appstart mit instantiiert und dann greift @PostConstruct.

    Im Klartext: ist es wirklich relevant, dass die Daten beim Appstart gecached werden? Warum reicht es nicht, dass beim ersten Zugriff zu tun?

    Ich persönlich würde mich nicht an ein API eines Appserver herstellers binden. Wie testest du sowas dann?

    Ollie

    PS: mit JavaEE 6 kommt wahrscheinlich ein @Startup um sicherzustellen, dass die Komponente beim start instanttiert wird.
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  5. #5
    ChrisJava ChrisJava ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    7
    Zitat Zitat von Oliver Gierke Beitrag anzeigen
    Du solltest überdenken, ob es sinnvoll ist zwischen Applikationsstart und Komponenteninstantiierung zu unterscheiden. Wenn die Komponente wirklich gebraucht wird, wird sie eh beim Appstart mit instantiiert und dann greift @PostConstruct.

    Im Klartext: ist es wirklich relevant, dass die Daten beim Appstart gecached werden? Warum reicht es nicht, dass beim ersten Zugriff zu tun?

    Ich persönlich würde mich nicht an ein API eines Appserver herstellers binden. Wie testest du sowas dann?

    Ollie

    PS: mit JavaEE 6 kommt wahrscheinlich ein @Startup um sicherzustellen, dass die Komponente beim start instanttiert wird.
    Aber klar ist es sinnvoll etwas beim appserver startup zu instanzieren, aus welchem Grund sollten dann Leute darüber nachdenken eine @Startup annotation zu entwerfen? Anwendungsfälle hierfür gibt es zu hauf. Wenn man mal von der Standard Web Application absieht.
    leider brauche ich dieses feature jetzt schon. also wird solange bis @Startup verfügbar ist @Service mit einem TODO im code genutzt ...


    mfg
     

  6. #6
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Nur weil etwas standardisiert ist, heißt es noch lange nicht, dass es sinnvoll ist. Bestes Beispiel: WS-* Spezifikationen. Gibts zu hauf, nutzt *niemand*. Selbst wenn etwas grundsätzlich sinnvoll ist, heißt das wiederum auch nicht, dass es für deinen entsprechenden Fall sinnvoll ist. IMHO bleibt ein konzeptionelles Problem, kein technisches...

    My 0,02€...

    REINHAUN!
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  7. #7
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    hast du auch ne Web App in deiner Anwendung? Wenn ja würde ichs mit einem javax.servlet.ServletContextListener probieren.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  8. #8
    ChrisJava ChrisJava ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    7
    hallo thomas,

    ja ich habe auch eine Web App in meiner Solution.
    Nutze Sie aber nur für verschiedenste WebServices.
    Es wiederstrebt mir aber meine Bean über irgendwas mit Servlets zu starten, wenn es entsprechende Annotationen gibt, bzw. standardisierte geplant sind.
    Hört sich irgendwie nach Workaround an!
     

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    Es wiederstrebt mir aber meine Bean über irgendwas mit Servlets zu starten, wenn es entsprechende Annotationen gibt, bzw. standardisierte geplant sind.
    Hört sich irgendwie nach Workaround an!
    Na ja, erstmal hat das außer dem Namen mit normalen Servlets nicht so viel gemeint. ServletContextListener.contextInitialized wird aufgerufen wenn die Web App gestartet wird (beim Deployment).

    Dort könntest du dann deine SessionBean aufrufen oder gleich dort den Code ausführen den du beim start der SessionBean ausführen wolltest.

    Allgemeine Container callbacks (Init/Shutdown) gibts erst mit EJB 3.1
    http://jcp.org/en/jsr/detail?id=318
    Requests:
    ...
    Application-level callback notifications, including for container initialization and shutdown
    ...
    Das ist IMHO kein Workaround, sondern ein App-Server neutraler Weg dein Vorhaben mit JEE 5 Mitteln zu realisieren.

    In EJB 3.1 könntest du beispielsweise ein Bean mit
    @Singleton
    @Startup
    Annoations deklarieren. Dann sollte der Container die mit @PostConstruct Annotierte Methode des Singletons aufrufen.
    Es ist jedoch abhängig vom Container wann das Singleton nun erzeugt wird... aber in der Spec wird das so beschrieben um auf Container-Callbacks reagieren zu können.

    Mehr dazu gibts in Kapitel 4.8.1 im EJB 3.1 Proposed Final Draft beschrieben.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  10. #10
    ChrisJava ChrisJava ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    7
    ok, danke für deine erläuterung.
    Die ganze Java Welt ist noch neu für mich. Ich habe noch keinen genauen Überblick.
    Vielen dank für eure Hinweise ich werde das ganze jetzt wohl noch mit ServletContextListener probieren.

    Gute Diskussion hier im Forum

    Mfg und schönen Tag noch!

    Christian
     

Ähnliche Themen

  1. C# equivalent zu Javas ByteBuffer putInt(int)
    Von Danny125 im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 04.12.10, 18:37
  2. Zugriff auf JBoss Beans aus einem SLSB?
    Von gorefest im Forum Java
    Antworten: 6
    Letzter Beitrag: 02.02.10, 19:04
  3. EJB 3 + Persistence Beans + JBoss 4.2.0, Error beim Deployment
    Von F5erl im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 16.12.07, 20:46
  4. Get / Set - Equivalent in Java wie in .NET ?
    Von MasterEvil im Forum Java
    Antworten: 2
    Letzter Beitrag: 05.12.05, 10:11
  5. Startup Tut ?
    Von Dieselboy im Forum HTML-Editoren
    Antworten: 7
    Letzter Beitrag: 20.03.02, 20:07

Stichworte