getSession v / s getDefaultSession и - PullRequest
0 голосов
/ 08 июля 2011

1.) В чем разница между getSession() и getDefaultSession()?Я прочитал Doc , но мне не ясно, что означает gets the default session object.

2.) В методе public static Session getDefaultInstance(Properties props, Authenticator authenticator)

для чего предназначен второй аргумент, что он делает и как он делает?

3.) Я часто сталкивался с фрагментом:

Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("USERNAME_HERE", "PASSWORD_HERE");
    }
});

и я видел, что отмененный здесь merthod никогда не вызывается.Что делает этот метод?

1 Ответ

0 голосов
/ 06 марта 2015

Из JavaMail FAQ :

Почти весь код должен использовать Session.getInstance. Метод Session.getDefaultInstance создает новый сеанс при первом его вызове, используя переданные свойства. Последующие вызовы вернут этот исходный сеанс и проигнорирует любые свойства, которые вы передадите в . Если вы хотите создать разные сеансы с разными свойствами, Session.getDefaultInstance этого не сделает. Если какой-то другой код в той же JVM (например, на том же сервере приложений) уже создал сеанс по умолчанию со своими свойствами, вы можете в конечном итоге использовать их сеанс, и ваши свойства будут игнорироваться. Это часто объясняет, почему настройки вашего свойства игнорируются. Всегда используйте Session.getInstance, чтобы избежать этой проблемы.

Второй аргумент - это подкласс, который знает, как получить имя пользователя и пароль, которые должны использоваться для входа на почтовый сервер. Это также касается некоторых дополнительных контекстов, которые могут потребоваться пользователю, таких как имя хоста, которое получит имя пользователя и пароль. Из javax.mail.Authenticator документации:

Класс Authenticator представляет объект, который знает, как получить аутентификацию для сетевого подключения. Обычно это делается путем запроса информации у пользователя.

Метод getPasswordAuthentication - это callback с жестко заданным именем пользователя и паролем. Изнутри этот метод вызывается при вызове javax.mail.Service.connect () . Одним из примеров этого является вызов public static void Transport.send (Message) .

...