Запустите приложение EJB в AWS лямбда - PullRequest
0 голосов
/ 10 октября 2019

У нас есть одна настраиваемая среда Java, основанная на EJB. Используя эту структуру в качестве зависимости (означает расширение функциональности), у нас есть несколько приложений (поэтому косвенно, эти приложения также являются EJB). Это приложение размещено на одном предварительном сервере jboss.

Теперь мы хотим удалить этот предварительный сервер и переместить это приложение на AWS lambda, поскольку это приложение используется только один раз в день (я имею в виду вызовк этому приложению приходит только один раз в день). Более того, критерии не касаются существующего кода приложения. мы можем написать несколько классов для добавления лямбда-обработчика или чего-то еще, но мы можем изменить существующий код приложения или архитектуру. (некоторые ограничения, которые я действительно хотел бы переписать, но без опций).

Может кто-нибудь подсказать, возможно ли запустить JAVA-приложение на основе EJB (которое сегодня размещается на предварительном jboss) из AWS-lambda? ? (я имею в виду, можем ли мы разместить его на лямбде?).

Это отправная точка этого приложения EJB:

package packagename;

//various imports here
import javax.ejb.*;
import javax.jms.MessageListener;

@MessageDriven(messageListenerInterface=MessageListener.class,
    activationConfig = {
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/queue/queuename"),
            @ActivationConfigProperty(propertyName="hostName", propertyValue="${jms.queue.manager.host}"),
            @ActivationConfigProperty(propertyName="port", propertyValue="${jms.queue.manager.port}"),
            @ActivationConfigProperty(propertyName="channel", propertyValue="${jms.queue.manager.channel}"),
            @ActivationConfigProperty(propertyName="queueManager", propertyValue="${jms.queue.manager.name}"),
            @ActivationConfigProperty(propertyName="useJNDI", propertyValue="true")
    })
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class BatchInvoker extends BatchInvokerServiceMDB {

    @EJB
    public ImportPlannedCoursesJob importPlannedCoursesJob;

}

1 Ответ

1 голос
/ 10 октября 2019

Это должно быть возможно, но JBoss имеет очень медленное время запуска.

В Lambda запуск будет происходить очень часто (по одному на каждый параллельный вызов). Также контейнеры эфемерны (они закрываются через несколько минут / часов).

Существует также ограничение по времени (максимум 15 минут). Таким образом, если запуск JBoss займет 10 минут, у вас останется только 5 минут для выполнения запроса.

Кроме того, считается ли такая задержка приемлемой? Я бы предложил, возможно, другое решение - Эластичный бобовый стебель

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