Использование своих java классов в Alfresco

В этой статье я покажу, как использовать свои java классы при написании скриптов в Alfresco.

В качестве примера я предлагаю написать класс, который будет отсылать уведомления по электронной почте. В предыдущей статье я писал о ограничениях, которые наложены на письма, отправляемые при помощи actions. Давайте избавимся от них :) Чтобы класс можно было использовать внутри Alfresco, он обязательно должен быть унаследован от BaseProcessorExtension. Итак, пишем вот такой нехитрый код (Notifier.java):

// пакет
package ru.ossportal.notifier;
 
// импорт
import org.alfresco.repo.processor.BaseProcessorExtension;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
 
// класс для отправки уведомлений
// использует smtp-сервер 127.0.0.1:25 без аутентификации
public class Notifier extends BaseProcessorExtension
{
	// функция отправки почты
	public boolean send(String to, String toPerson, String subject, String content)
	{
		// результат
		boolean result = true;
 
		try
		{
			// задаём параметры соединения 
			Properties props = new Properties();
			props.setProperty("mail.transport.protocol", "smtp");
			props.setProperty("mail.host", "127.0.0.1");
			props.setProperty("mail.port", "25");
 
			// создаём соединение
			Session mailSession = Session.getDefaultInstance(props, null);
			Transport transport = mailSession.getTransport();
 
			// задаём параметры письма
			MimeMessage message = new MimeMessage(mailSession);
			message.setSubject(subject);
			message.setText(content);
			message.setFrom(new InternetAddress("noreply@nohost.zz","Notification system"));
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(to, toPerson));
 
			// отправялем письмо
			transport.connect();
			transport.send(message);
			transport.close();		
		}
		catch (Exception e)
		{
			result = false;
		}
 
		return result;
	}
}

Собираем, делаем jar и кладём в tomcat/webapps/alfresco/WEB-INF/lib. Затем регистрируем наш класс в файле tomcat/webapps/alfresco/WEB-INF/classes/alfresco/script-services-context.xml:

<bean id="Notifier" parent="baseJavaScriptExtension" class="ru.ossportal.notifier.Notifier">
	<property name="extensionName">
		<value>Notifier</value>
	</property>        
</bean>

После этого внутри любого javascript-кода станет доступным новый объект Notifier, при помощи которого можно отправлят уведомления. Вместо кода, который мы писали раньше:

var mail = actions.create("mail");
mail.parameters.to = initiator.properties["cm:email"];
mail.parameters.subject = "Публикация статьи";
mail.parameters.text = "Добрый день.nnВаша статья прошла проверку редактора и отправлена техническому редактору на рассмотрение.";
mail.execute(bpm_package);
 

можно писать вот так:

Notifier.send(initiator.properties["cm:email"], initiator.properties["cm:firstName"]+" "+initiator.properties["cm:lastName"], "Публикация статьи", "Добрый день.nnВаша статья прошла проверку редактора и отправлена техническому редактору на рассмотрение.");
3023
Прикрепленные файлыРазмер
notifier.jar1.31 кб

Комментарии

Спасибо за статью!

Вопрос  - а не возникало ли такой траблы, что после прописывания бина в script-services-context.xml сервак альфрески (томкат) вобще не может подняться? У меня его загрузка просто останавливается на одном месте и висит.. :(

пути и именование класса в описании бина - верные.. джарник тоже подложен в правильное место и класс в нем присутствует

fufler аватар

Нет, такой проблемы не было. Пару раз tomcat не запускался из-за того, что был указан не уникальный bean id. Можете лог показать?