将EJB与常规java类一起使用.尝试实例化无状态EJB

Ran*_*num 1 java eclipse ejb jpa java-ee

到目前为止,我在Java EE 6中有一个大型Web项目,一切都很顺利.

现在我正在添加一个新类,它接收twitter信息并返回一个字符串.到目前为止,字符串已经从twitter的JSON文件中提取出来,并且可以保存在我的数据库中.我的问题是我不确定如何从通常处理我的所有数据库调用的EJB传递信息.我正在使用JPA并且有一个DAO类来管理所有数据库访问.我已经有了一个方法updateDatabase(String).我希望能够updateDatabase(String)从具有要添加的字符串的类中调用,但我不知道实例化像这样的无状态bean是否是好的形式.通常,您注入bean,然后只调用它们的类名来访问它们的方法.我也许可以尝试从EJB内部引用twitter字符串生成类,但之后我必须在那里实例化它并乱用main()方法调用来执行.我真的不确定怎么做.现在我的Twitter消费类只是一个主要方法的POJO.出于某种原因,某些库方法在主要面向IOUtils()API之外不起作用直接说"实例不应该在标准编程中构造".

所以在更高层次的底线上,我只是问POJO通常如何"混合"到Java EE项目中,其中大多数类都是EJB和servlet.

编辑:上面的内容在重读后似乎让我感到困惑所以我会尝试简化它.基本上我有一个主要方法的类.我想调用我的EJB类来处理数据库访问并调用它的updateDatabase(String)方法并传入字符串.我该怎么做?

编辑:所以看起来像JNDI查找和子序列引用是首选方法,而不是直接实例化EJB?

编辑:这些类都在同一个Web项目中.在同一个包中.我可以注入一个或将POJO转换为EJB.然而,POJO确实有一个main方法,并且一些库文件不喜欢被实例化,因此在main中运行它似乎是最好的选择.

我的主要代码:

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"); 
    }
}  
Run Code Online (Sandbox Code Playgroud)

我也java.lang.NullPointerException到处都是rssbean.updateDatabase("twitterText");

jFr*_*tic 6

您应该使用InitialContext#lookup方法从应用程序服务器获取EJB引用.
例如:

@Stateless(name="myEJB")
public class MyEJB {

  public void ejbMethod() {
    // business logic
  }

}

public class TestEJB {

  public static void main() {
    MyEJB ejbRef = (MyEJB) new InitialContext().lookup("java:comp/env/myEJB");
    ejbRef.ejbMethod();
  }
}
Run Code Online (Sandbox Code Playgroud)

但请注意,用于查找的ejb名称可能是特定于供应商的.此外,EJB 3.1引入了应用于每个应用程序服务器的可移植JNDI名称的概念.