Я работаю над приложением Java EE с GlassFish в качестве сервера приложений. Я разработал подключаемый модуль для отправки электронных писем (я назвал его EmailProvider). Для этого я использую позднюю привязку, чтобы загрузить JAR EmailProvider во время выполнения. У меня есть пользовательский URLClassLoader, который загружает файл класса EmailProvider. Поставщик электронной почты имеет JavaMail API для отправки электронной почты. Вот фрагмент кода. Этот код отлично работает, если я включаю класс EmailProvider в свое приложение Java EE, но выдает исключение при
Transport transport = session.getTransport ("smtp");
говоря "javax.mail.NoSuchProviderException: smtp" я загружаю класс во время выполнения, используя customClassLoader. Я знаю, что это проблема загрузки классов. Я также загружаю javax.mail.jar через customloader. Я думаю, что проблема в том, что одни и те же классы (javax.mail.jar) загружаются из двух разных загрузчиков классов. Если я опускаю javax.mail.jar, я получаю ClassNotFoundException для классов javax.mail
Class EmailProvider{
try {
Properties props = new Properties();
props.put("mail.smtp.host", "IP ADDRESS");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
Session session = Session.getInstance(props, null);
session.setDebug(false);
Provider provider = session.getProvider("smtp");
javax.mail.Message message = new MimeMessage(session);
InternetAddress addressFrom = new InternetAddress("name@some.com");
message.setFrom(addressFrom);
InternetAddress[] addressTo = new InternetAddress[1];
addressTo[0] = new InternetAddress("somenamea@gmail.com");
//msg.setRecipients(javax.mail.Message.RecipientType.TO, addressTo);
message.setSubject("Hello");
message.setContent("testing..", "text/plain");
session.setProvider(provider);
Transport transport = session.getTransport("smtp");
transport.connect("IP ADDRESS", "domain\\username", "password");
transport.sendMessage(message, addressTo);
} catch (Exception ex) {
Logger.getLogger(SendEmail.class.getName()).log(Level.SEVERE, null, ex);
} }