EJBs mit regulären java-Klassen. Zu instanziieren versucht, eine stateless EJB

Ich habe ein großes web-Projekt in Java EE 6 so weit alles funktioniert Super.

Nun bin ich das hinzufügen einer neuen Klasse, nimmt twitter-Informationen an und gibt einen string zurück. So weit die Saiten wurden extrahiert aus der JSON-Datei aus twitter und bereit sind, beibehalten werden in meiner Datenbank. Mein problem ist, ich bin mir nicht sicher, wie Sie Sie zum weitergeben von Informationen aus dem EJB, die normalerweise behandelt alle meine Datenbank-Aufrufe. Ich verwende JPA und haben eine DAO Klasse, die Manager-Datenbank zugreifen. Ich habe bereits eine Methode, die es für updateDatabase(String). Ich möchte in der Lage sein zu rufen updateDatabase(String) aus der Klasse, die strings hinzufügen, aber ich weiß nicht, ob es die gute form zu instanziieren Sie ein stateless bean so. Normalerweise werden Sie injizieren Bohnen und rufen Sie dann nur auf Ihre Klasse Namen für den Zugriff auf deren Methoden. Ich könnte vielleicht auch versuchen und auf die twitter-string generieren von Klassen aus dem inneren des EJB-aber dann hätte ich zu instanziieren und es Durcheinander mit main () - Methode ruft für die Ausführung. Ich bin mir nicht wirklich sicher, wie dies zu tun. Jetzt meine Twitter konsumieren Klasse ist nur ein POJO mit einer main-Methode. Für einige Grund, warum einige von der Bibliothek Methoden nicht funktionieren, die außerhalb der Haupt-im Gesicht IOUtils () - API direkt sagt "Instanzen sollten NICHT konstruiert werden, in der standard-Programmierung".

Also auf einer höheren Ebene-bottom-line, ich bin nur zu Fragen, wie POJO ' s sind in der Regel "mixed" in eine Java-EE-Projekt, wo die meisten Ihre Klassen EJBs und servlets.

Edit: das oben scheint verwirrend für mich nach dem Wiederlesen also werde ich versuchen, um es zu vereinfachen. im Grunde habe ich eine Klasse mit einer main-Methode. Ich möchte meine EJB-Klasse, mit der Datenbank access und rufen Sie es updateDatabase(String) - Methode, und übergeben Sie einfach in den string. Wie sollte ich das tun?

Edit: So sieht es aus, wie eine JNDI-lookup und Teilfolge Referenz ist der bevorzugte Weg, dies zu tun, anstatt die Instanziierung der EJB direkt?

Edit: diese Klassen sind alle in der gleichen web-Projekt. Im gleichen Paket. Ich konnte injizieren ein oder konvertieren Sie die POJO, EJB. Aber die POJO hat eine main-Methode und einige der library-Dateien, möchte nicht instanziiert werden, so läuft es im wesentlichen scheint die beste option.

Mein main-code:

public class Driver {

    @EJB
    static RSSbean rssbean;   

    public static void main(String[] args) throws Exception {

        System.setProperty("http.proxyHost", "proxya..com");
        System.setProperty("http.proxyPort", "8080");
        /////////////auth code///////////////auth code/////////////////
        String username = System.getProperty("proxy.authentication.username");
        String password = System.getProperty("proxy.authentication.password");
        if (username == null) {
            Authenticator.setDefault(new ProxyAuthenticator("", ""));
        }
        ///////////////end auth code/////////////////////////////////end

        URL twitterSource = new URL("http://search.twitter.com/search.json?q=google");
        ByteArrayOutputStream urlOutputStream = new ByteArrayOutputStream();

        IOUtils.copy(twitterSource.openStream(), urlOutputStream);
        String urlContents = urlOutputStream.toString();
        JSONObject thisobject = new JSONObject(urlContents);
        JSONArray names = thisobject.names();
        JSONArray asArray = thisobject.toJSONArray(names);
        JSONArray resultsArray = thisobject.getJSONArray("results");
        JSONObject(urlContents.substring(urlContents.indexOf('s')));                
        JSONObject jsonObject = resultsArray.getJSONObject(0);

        String twitterText = jsonObject.getString("text");          
        rssbean.updateDatabase("twitterText"); 
    }
}  

Ich bin auch immer ein java.lang.NullPointerException irgendwo um rssbean.updateDatabase("twitterText");

Sie sollte nicht erstellen eine Instanz der EJB. Je. Das ist etwas, das die conainer Griffe. Was könnten Sie tun, auf der anderen Seite, ist PostConstruct-annotation an einer Methode und etwas tun, die es (anstelle der Konstruktor), aber das ist nicht bezogen auf dein problem
Ok, der Grund, warum, EJB null ist, ist wahrscheinlich, weil die Treiber-Klasse ist keine container-Klasse verwaltet. Dies sollte nur funktionieren, wenn die Fahrer der Klasse application entry-point-Klasse (das ist der einzige Weg, können Sie Spritzen EJB auf statisches Feld). Aber Sie sagte, dass dies ist eine web-Anwendung. Also, wo aus rufst du Treiber.main()? Jedenfalls, wenn Sie wirklich brauchen, um haben, dass code in einer statischen Methode (vorausgesetzt, es ist nicht der entrypoint), sehe ich entweder JNDI-lookup oder Umgestaltung von code factory-pattern, um zu injizieren, die Instanz oder etwas entlang jenen Linien.
Ich war nur mit der main-Methode als eine Methode zur Untersuchung der Vorgänge. Brauche ich nicht unbedingt es für die web-Anwendung. Obwohl ich nicht sicher bin, was Mus ich würde zum auslösen der Operationen, um Daten aus der URL und dann das hinzufügen in die Datenbank. Ich bräuchte eine Art automatische Ausführung.
Ah, aber das ist sehr wichtige information, das ist, warum ich fragte, wie Sie diese ausführen. Ich bin mir nicht wirklich sicher, was Ihre Nutzung Fall ist, aber wenn Sie die automatische Ausführung für Ihr logic, verwenden Sie den \@Schedule-annotation. Oder MDB. Oder etwas vollkommen anderes. Aber für diese zu arbeiten, Sie kann nicht laufen, nur diese mit Java SE und werfen \@EJB an. Mehr info hier: stackoverflow.com/questions/1862445/...
Sie haben die Verwendung von JNDI für, die, richtige. Erhalten Sie null-pointer, korrigieren. Zeitplan für die ejb-timer-service, das ist für die automatische Ausführung, die Sie gefragt haben. Wenn Sie gehen, um ausführen Ihre Twitter-Klasse von sagen wir einer JSF-controller (welche wird also ein verwaltetes Objekt, so genannte backing-bean), dann können Sie wandeln es in EJB injizieren Sie die DAO-EJB etc. und du bist fertig. Ansonsten, JNDI verwenden.

InformationsquelleAutor Randnum | 2011-12-09

Schreibe einen Kommentar