Интерфейс взаимодействия и Java-код - PullRequest
0 голосов
/ 06 декабря 2011

Хи Фолкс,

хорошо, (для меня) мою проблему трудно объяснить, но я думаю, для большинства из вас это покажется довольно тривиальным.Я создаю приложение, используя Spring Webflow.Пользователи должны ввести свое имя пользователя в веб-приложение, которое затем сохраняется в бине.Когда они нажимают на кнопку «Войти», вызывается метод компонента (connect()), который устанавливает соединение jms с другим сервером.

public class HumanBrokerBean implements Serializable {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /** The broker name. */
    private String brokerName;

    /** The password. */
    private String password;

    private double cashPosition = 0;



    /**
     * Gets the password.
     * 
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * Sets the password.
     * 
     * @param password
     *            the new password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * Gets the broker name.
     * 
     * @return the broker name
     */
    public String getBrokerName() {
        return brokerName;
    }

    /**
     * Sets the broker name.
     * 
     * @param brokerName
     *            the new broker name
     */
    public void setBrokerName(String brokerName) {
        this.brokerName = brokerName;
    }

    /**
     * @return the cashPosition
     */
    public double getCashPosition() {
        return cashPosition;
    }


        public boolean connect(){

         ConnectionService connection = new ConnectionService();
         //if there have been problems while establishing the connection
         if(!connection.connect(username, password, serverConnection, byPass)){
            return false;
        }
        //if connection was established
        return true;
    }

}

Через некоторое время появляется сообщение от удаленногосервер прибывает, говоря, что CashPosition конкретного пользователя изменился.Теперь мне придется обновить переменную «cashPosition» Бина, которая должна отображаться в пользовательском интерфейсе.

1) Моя проблема в том, что я просто не могу получить доступ к значениям бина.Как мне получить к ним доступ?

2) Через некоторое время пользователь может захотеть отправить сообщение на сервер.По этой причине у меня есть метод внутри моего класса ConnectionService.Теперь я хотел создать метод в Bean, который должен быть посредником между пользовательским интерфейсом и сервисом ConnectionService.Здесь у меня проблема в том, что я не могу создать переменную класса и соответствующий метод, такой как

private Connection Service connection;

public void sendMessage(String message){
    connection.send(message);
}

, потому что некоторые элементы службы соединений класса не сериализуемы (ActiveMQ).Вот почему я попробовал это так:

public void sendMessage(String message){
    ConnectionService connection = new ConenctionService();
    connection.send(message);
}

Но это решение всегда создает новый экземпляр службы соединений классов, которая не работает здесь из-за ActiveMQ ... Так что я должен иметь возможностьчтобы получить доступ к этому классу из моего бина, но я не уверен, как.

Я надеюсь, что я обмолвился, проясню вашу проблему ...

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 06 декабря 2011

Вы можете поместить connection в качестве переменной класса, как вы пытались, но пометить его ключевым словом transient, чтобы предотвратить его сериализацию, например:

private transient Connection Service connection;

Просто имейте в виду, чтоесли бин когда-либо десериализован, connection будет нулевым - поэтому вам нужно либо проверить это, либо предоставить собственный метод private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;, который выполняет десериализацию по умолчанию, а затем воссоздает соединение.(Дополнительная информация доступна на http://docs.oracle.com/javase/6/docs/api/java/io/Serializable.html.)

...