EJB永远不会被调用,而不是执行

时间:2011-12-12 17:21:59

标签: java java-ee ejb

我在这里问了一个类似的问题:Best way to interact with EJBs in Java EE而且反应很好,但我仍然没有得到我正在寻找的结果。即使我添加了@PostConstruct注释并将主类转换为托管bean,我仍然没有调用EJB,因此我可以使用注入。我认为我很接近,但我仍然没有掌握Java EE和EJB所涉及的一些基本概念。我想我可能不得不使用某种计时器事件来完成这项工作。

同样,我的问题是我希望这个类在运行时至少执行一次。它从URL获取twitter feed结果,将内容解析为数组,然后将第一个值添加到数据库中。数据库管理是通过另一个EJB完成的,所以我必须使用某种注入来访问这个类。最初我创建了一个测试代码的主方法但是我得到了Null引用异常,因为我试图从常规java类中注入并调用EJB的方法。

这是我的托管bean和PostConstruct注释的新代码:

@ManagedBean

public class Driver {

@EJB RSSbean rssbean;   

@PostConstruct
public void initURL() throws IOException, JSONException{

    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("s", "w"));
        }
  ///////////////end auth code/////////////////////////////////end

    URL twitterSource = new URL("http://search.twitter.com/search.json?q=news");
    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.trim());   

           JSONObject jsonObject = resultsArray.getJSONObject(0);   

            String twitterText = jsonObject.getString("text");

            System.out.println("Calling rssbean from Driver");
            **rssbean.updateDatabase("twitterText");**
                }}  

rssbean.updateDatabase的底线是需要执行的更新才能持久保存到数据库。

1 个答案:

答案 0 :(得分:2)

您必须添加@Stateless@Stateful(根据您的使用/需要而定),然后移除@ManagedBean。如果你使它成为@Stateful,一定要实现Serializeable接口。