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");
您应该使用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名称的概念.
| 归档时间: |
|
| 查看次数: |
12982 次 |
| 最近记录: |