EJB никогда не вызывается, не выполняется - PullRequest
0 голосов
/ 12 декабря 2011

Я задавал подобный вопрос к этому здесь: Лучший способ взаимодействия с EJB в Java EE И ответ был отличным, но я все еще не получаю результаты, которые я ищу.EJB по-прежнему не вызывается, хотя я добавил аннотацию @PostConstruct и преобразовал основной класс в управляемый компонент, чтобы использовать инъекцию.Я думаю, что я близок, но я все еще не понимаю некоторые фундаментальные концепции, связанные с Java EE и EJB.Я думаю, что мне, возможно, придется использовать какое-то событие таймера, чтобы сделать эту работу.

Опять же, моя проблема в том, что я хочу, чтобы этот класс выполнялся хотя бы один раз во время работы.Он получает результаты в Твиттере с URL-адреса, анализирует содержимое в массиве и затем добавляет первое значение в базу данных.Управление базой данных осуществляется с помощью другого EJB, поэтому мне нужно использовать какое-то внедрение для доступа к этому классу.Первоначально я создал основной метод для тестирования кода, но я получал исключения из ссылки на Null, потому что я пытался внедрить и вызвать метод EJB из обычного Java-класса.

Вот мой новый код с управляемыми 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 Ответ

2 голосов
/ 12 декабря 2011

Вы должны добавить @Stateless или @Stateful (в зависимости от вашего использования / необходимости), а затем удалить @ManagedBean.Если вы сделаете это @Stateful, убедитесь, что также реализовали интерфейс Serializeable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...