Seam Logger внутри сервлета? - PullRequest
4 голосов
/ 30 ноября 2010

Есть ли способ использовать Seam Logger внутри стандартного сервлета Java? У меня есть один сервлет, который я использую для обслуживания контента, в то время как остальная часть моего приложения разрабатывается с использованием Seam. Я хотел бы иметь возможность использовать встроенную в Seam функциональность Log в моем сервлете, так же, как я использую остальные классы, основанные на Seam. В моем конструкторе сервлетов я попытался вызвать

Log logger = (Log)Component.getInstance(Log.class);

... но я получаю исключение. Есть ли лучший способ «внедрить» Logger в сервлет? Что-то мне не хватает? Спасибо !!

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Я не проверял это, но вы можете попробовать это:

Log mylog = Logging.getLogger(MyClass.class);

Это то, что я использую в своих тестах.

2 голосов
/ 30 ноября 2010

Для использования контекста Seam вы можете заключить методы doPost или doGet в ContextualHttpServletRequest, что позволяет выполнять поиск компонентов.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        final HttpServletRequest req = request;
        new ContextualHttpServletRequest( req ) {
            public void process() throws Exception {
                wrappedPost( req );
            }
        }.run();
    }

// you renamed original doPost method
private void wrappedPost(HttpServletRequest request) {
...
}

Приведенный выше пример кода позволяет получить доступ к компонентам по имени, которое объявлено с использованием аннотации имени:

@Name("MyCcomponent")

Регистратор обычно внедряется аннотацией @Logger, я проверил, регистрирует ли исходный пакет, нет компонента с аннотацией @Name, который можно было бы найти. Если вы вызываете компонент (с помощью @Logger) из обернутого контекста, будет добавлен регистратор (в вызываемый компонент).


Шов использует в своих компонентах:

private static final LogProvider log = Logging
            .getLogProvider(MailSession.class);
...