У меня большой веб-проект в Java EE 6, пока все работает отлично.
Теперь я добавляю новый класс, который получает информацию из твиттера и возвращает строку.До сих пор строки были извлечены из файла JSON из твиттера и готовы к сохранению в моей базе данных.Моя проблема в том, что я не уверен, как передавать информацию из EJB, который обычно обрабатывает все вызовы моей базы данных.Я использую JPA и у меня есть класс DAO, который управляет всем доступом к базе данных.У меня уже есть метод для updateDatabase(String)
.Я хотел бы иметь возможность вызывать updateDatabase(String)
из класса, в котором есть строки, которые нужно добавить, но я не знаю, хорошо ли это создавать экземпляр такого компонента без состояния.Обычно вы вводите бины, а затем вызываете только их имя класса для доступа к их методам.Я мог бы также попытаться сослаться на класс генерации строк в твиттере изнутри EJB, но тогда мне пришлось бы создать его экземпляр и связываться с вызовами метода main () для выполнения.Я не совсем уверен, как это сделать.Прямо сейчас мой потребляющий Твиттер класс - это просто POJO с методом main.По какой-то причине некоторые из библиотечных методов не работали вне main в API-интерфейсе IOUtils () для лица напрямую говорится: «Экземпляры НЕ должны создаваться в стандартном программировании».
Итак, на более высоком уровне, я просто спрашиваю, как POJO обычно "смешиваются" в проекте Java EE, где большинство ваших классов - EJB и сервлеты.
Редактировать: вышеизложенное кажется мне запутанным после перечитывания, поэтому я постараюсь упростить его.в основном у меня есть класс с основным методом.Я хотел бы вызвать мой класс EJB, который обрабатывает доступ к базе данных, вызвать его метод updateDatabase(String)
и просто передать строку.Как мне это сделать?
Редактировать: Таким образом, похоже, что поиск JNDI и ссылка на подпоследовательность являются предпочтительным способом сделать это, а не создавать экземпляр EJB напрямую?
Редактировать: все эти классы находятся в одном веб-проекте.В той же упаковке.Я мог бы ввести один или преобразовать 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");