Maven
MAVEN_OPTS=” -Xmx1024m -XX:MaxPermSize=512m “
MAVEN_OPTS=” -Xmx1024m -XX:MaxPermSize=512m “
Если вам необходимо использовать в своем java-приложении Ajax, попробуйте DWR – Direct Web Remoting. Эта библиотека позволяет обращаться к серверным java-классам и javascript. Существует множество способов подключения DWR. Мне больше нравитсья работать с аннотациями. Для этого в web.xml необходимо включить следующий код:[xml]
<servlet>
<description>DWR controller servlet</description>
<servlet-name>DWR controller servlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>
com.example.RemoteFunctions,
com.example.RemoteBean
</param-value>
</init-param>
</servlet>
[/xml]
mvn org.apache.maven.plugins:maven-archetype-plugin:1.0-alpha-7:create \ -DarchetypeGroupId=org.scala-tools.archetypes \ -DarchetypeArtifactId=scala-archetype-simple \ -DarchetypeVersion=1.1 \ -DremoteRepositories=http://scala-tools.org/repo-releases \ -DgroupId=ru.vaniashev.web -DartifactId=Test
Для авторизации в Spring в большинстве случаев используется фреймворк Spring Security. Соответствующие компоненты вы можете включить в проект с помощью плагина m2eclipse.
Для того, чтобы Spring Security обрабатывал запросы, в web.xml необходимо включить соответствующий фильтр:
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Для того, чтобы можно было выполнять конфигурацию Spring Security, в dispatcher-servlet необходимо добавить просторанство имен “xmlns:security=”http://www.springframework.org/schema/security”" и в xsi:schemaLocation добавить строки “http://www.springframework.org/schema/security” и “http://www.springframework.org/schema/security/spring-security-2.0.2.xsd”.
Очень часто в приложениях требуется выбрать из базы данных только небольшое количество строк. В основном это необходимо при выводе данных порциями, постранично.
setMaxResult(), setFirstResult
Посмотреть возможные варианты выбора и сравнить их по скорости
Struts – это среда, облегчающая разработчику создание приложений соответствующих шаблону MVC.
Сначала необходимо включить Struts в приложение. Для этого, в web.xml необходимо внести следующие строки:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>ru.vaniashev.actions</param-value>
</init-param>
</filter>
В этом случае, при старте приложения, запросы будут отправляться FilterDispatcher, который будет выполнять действия, находящиеся в модуле ru.vaniashev.actions.
Для того, чтобы использовать Spring Security, необходимо чтобы каждый запрос проходил через его фильтр. Для этого фильтр необходимо прописать в web.xml:
<filter>
<filter-name>filterChainProxy</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>filterChainProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Этот фильтр должен быть описан в контексте приложения. Убедитесь, что в пространство имен xml документа, описывающего контекст приложения были включены следующее пространство имен и schema locations:
xmlns:security="http://www.springframework.org/schema/security"
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd
<bean id="filterChainProxy"
class="org.springframework.security.util.FilterChainProxy">
<security:filter-chain-map path-type="ant">
<security:filter-chain pattern="/**" filters="authenticationProcessingFilter"/>
</security:filter-chain-map>
</bean>
В цепочке фильтров, описантолько один фильтр – authenticationProcessingFilter, отвечающий за аутентификацию пользователя с помощью html формы:
<bean id="authenticationProcessingFilter" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureUrl" value="/login.jsp?login_error=1" />
<property name="defaultTargetUrl" value="/" />
<property name="filterProcessesUrl" value="/j_spring_security_check" />
</bean>
Для работы этого фильтра, его необходимо связать с authenticationManager, также описанным в контексте приложения:
<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
<property name="sessionController" ref="concurrentSessionController" />
</bean>
<bean id="daoAuthenticationProvider"
class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService"/>
<property name="userCache" ref="userCache"/>
</bean>
<bean id="concurrentSessionController"
class="org.springframework.security.concurrent.ConcurrentSessionControllerImpl">
<property name="maximumSessions" value="1"/>
<property name="sessionRegistry">
<bean class="org.springframework.security.concurrent.SessionRegistryImpl"/>
</property>
</bean>
Включить зависимость Spring Security в проект можно с помощью добавления в pom.xml следующих строк:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>2.0.0</version> </dependency>
Замечательной возможностью Jboss Seam – является управление “разговорами”. По русски это звучит странно, поэтому лучше буду использовать заморское слово – conversation. Для управления conversations, в Seam предусмотренно несколько инструментов:
Для рассмотрения вышеперечисленных вариантов управления conversations, давайте напишем небольшое приложение, содержащее мастер, состоящий из нескольких страниц.
Для этого, создадим каркас приложения Seam, и реализуем мастер с использованием всех вариантов. На первой странице разместим поле ввода для названия статьи. На второй странице – поле ввода для текста статьи, а на третьей странице – подтверждение создания новой статьи.
Управление conversations с помощью аннотаций:
Важной составляющей качественного проекта является наличие модульных тестов. Во flex, по сравнению с java достаточно мало возможностей для написание модульных тестов. Причем сама архитектура Flex, основанная на событиях, затрудняет их написание. Одним из фреймворков разработки тестов для Flex приложений является FlexUnit. В этой статье я расскажу об основах работы с ним.
Для начала давайте создадим проект, который мы будем тестировать. Предположим, это будет простое приложение с полем ввода и кнопкой, по нажатию на которую, число в поле ввода будет умножаться само на себя. Результат будет записываться в то же поле ввода.
Код приложения состоит из двух файлов:
FUTest.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="190" height="40" xmlns:local="*"> <local:Calculator id="calc"/> <mx:Button x="98" y="10" label="Посчитать" click="value.text = calc.process(Number(value.text)).toString()"/> <mx:TextInput x="10" y="10" width="80" id="value" text="значение"/> </mx:Application>
Calculator.as:
package
{
public class Calculator
{
public function Calculator()
{
}
public function process(value:Number):Number{
if (isNaN(value)){
return -1;
}
return value * value;
}
}
}
Работающее приложение выглядит так:
FlexUnit Test
Теперь напишем модульный тест для класса Calculator. Модульные тесты мы будем создавать в новом проекте, в который подключим код ранее созданного нами.
Создаем в том же рабочем пространстве FlexBuilder новый проект. Скачиваем архив с библиотекой и документацией. Разархивируем его.