gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:19:53 24 4
gpt4 key购买 nike

我在 Java EE 6 中有一个大型 Web 项目,到目前为止一切都运行良好。

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

所以在更高层次的底线,我只是问 POJO 通常如何“混合”到 Java EE 项目中,其中您的大部分类都是 EJB 和 servlet。

编辑:重读后,上面的内容让我感到困惑,所以我会尽量简化它。基本上我有一个带有 main 方法的类。我想调用处理数据库访问的 EJB 类并将其称为 updateDatabase(String)方法,只需传入字符串即可。我应该怎么做?

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

编辑:这些类都在同一个网络项目中。在同一个包中。我可以注入(inject)一个或将 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");
}
}

我也得到一个 java.lang.NullPointerException某处 rssbean.updateDatabase("twitterText");

最佳答案

您应该使用 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();
}
}

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

关于java - 将 EJB 与常规 Java 类一起使用。尝试实例化无状态 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com