Сущесвтует два способа управления траназкциями в enterprise-приложениях: контейнером и приложением. Первый вид предпологает автоматическое начало, сопровождение и
завершение транзакции, обеспечиваемое контейнером. В этом случае процесс управления транзакциями осуществляется прозрачно через аннотации, т.е.
мы заранее декларируем поведение системы, а контейнер обеспечивает это поведние нам. В противном случае, мы можем сами говорить приложению
когда начинать и когда заканчивать транзакции. Это и называется управлением транзакциями на уровне приложения.
25 октября 2011 г.
10 октября 2011 г.
Основы EJB: часть 1
Сервер приложений j2ee состоит из двух основных элементов: контейнер web-приложения (JSP, JSF и т.д.) и EJB-контейнер. Первый служит для создания пользовательского интерфейса и слабо подходит для описания бизнес-логики приложения. Для этого используется вторая часть J2EE - EJB.
Технологию EJB (Enterprise Java Beans) можно рассматривать с двух точек зрения: как фреймворк, и как компонент.
С точки зрения компонента EJB - это всего-лишь надстройка над POJO-классом, описываемая с помощью аннотации. Существует три типа компонентов EJB:
Перед тем, как продолжить обзор основ EJB остановимся на основе любого приложения - архитектуре.
Технологию EJB (Enterprise Java Beans) можно рассматривать с двух точек зрения: как фреймворк, и как компонент.
С точки зрения компонента EJB - это всего-лишь надстройка над POJO-классом, описываемая с помощью аннотации. Существует три типа компонентов EJB:
- session beans - используется для описания бизнесс-логики приложения
- message-driven beans - так же используется для бизнесс-логики
- entities - используется для хранения данных
Перед тем, как продолжить обзор основ EJB остановимся на основе любого приложения - архитектуре.
4 октября 2011 г.
Удаление всех таблиц из БД
Иногда возникает необходимость удалить все таблицы. Конечно, проще удалить пользователя базы и создать его заново. Это самый надёжный вариант, который точно удалит весь мусор, который может остаться в базе, однако не всегда на это есть пермиссии. Но можно воспользоваться этим скриптом:
BEGIN FOR i IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE('DROP TABLE ' || user || '.' || i.table_name || ' CASCADE CONSTRAINTS'); END LOOP; END;А тут еще 2 полезных скрипта:
3 октября 2011 г.
Фильтры в web-приложениях
С помощью фильтров обеспечивается дополнительная прослойка между сервлетом и клиентом. Фильтры могут использоваться как в сторону от клиента к сервлету (фильтры запроса), так и в обратную сторону (фильтры ответа).
Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации один интерфейс – Filter.
Пример декларации фильтра в дескрипторе развертывания:
Реализация фильтра для данного примера может быть такой:
Фильры запроса могут использоваться для: проведения дополнительных проверок безопасности, форматирования заголовка или тела запроса, ведения логов и т.д.
Фильтры ответа могут использоваться для: сжатия выходного потока, дополнять или подменять выходной поток и т.д.
И фильтр запроса, и фильтр ответа используют при реализации один интерфейс – Filter.
Пример декларации фильтра в дескрипторе развертывания:
Вместо <url-pattern> можно было указать <servlet-name> и использовать фильтр к какому-то конкретному сервлету.MyAppRequest com.example.myapp.myappRequest LogFileName UserLog.txt MyAppRequest *.do
Реализация фильтра для данного примера может быть такой:
public class myappRequest implements Filter { private FilterConfig fc; private void init(FilterConfig config) throws ServletException { this.fc = config; } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest httpReq = (HttpServletRequest) req; String name= httpReq.getRemoteUser(); if( name!= null ) fc.getServletContext().log(“User: “ +name); chain.doFilter(req,resp); } public void destroy() {} }
Безопасность web-приложения
Безопасность приложения обеспечивается: аутентификацией, авторизацией, конфеденциальностью и целостностью данных.
Не следует путать аутентификацию и авторизацию: на этапе аутентификации приложение запрашивает логин и пароль, в то время как на этапе авторизации приложение определяет имеет ли уже залогиненый пользователь доступ к информации.
Аутентификация
Настройка листа пользователей, имеющих доступ к работе с приложением, зависит от контейнера, который вы используете. К примеру, для Apache Tomcat нужно модифицировать файл tomcat-users.xml, который расположен по адресу $TOMCAT/conf. Например, он может выглядеть так:
Для того чтобы аутентификация работала, нужно в дескрипторе развёртывания написать:
Не следует путать аутентификацию и авторизацию: на этапе аутентификации приложение запрашивает логин и пароль, в то время как на этапе авторизации приложение определяет имеет ли уже залогиненый пользователь доступ к информации.
Аутентификация
Настройка листа пользователей, имеющих доступ к работе с приложением, зависит от контейнера, который вы используете. К примеру, для Apache Tomcat нужно модифицировать файл tomcat-users.xml, который расположен по адресу $TOMCAT/conf. Например, он может выглядеть так:
<tomcat-users> <role rolename=”Admin”/> <role rolename=”User”/> <user username=”root” password=”toor” roles=”Admin, User” /> <user username=”user” password=”resu” roles=”User” /> </tomcat-users>Имена ролей чувствительны к регистру.
Для того чтобы аутентификация работала, нужно в дескрипторе развёртывания написать:
<login-config> <auth-method>BASIC</auth-method> </login-config>И указать какие роли мы хотим использовать в приложении:
<security-role><role-name>Admin</role-name></security-role> <security-role><role-name>User</role-name></security-role>
Подписаться на:
Сообщения (Atom)