Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Java 8, Spring, Hibernate, SSP — начинаем играться

Anna | 1.06.2014 | нет комментариев
Совсем незадолго вышла Java 8. И у меня появилось желание написать что-то с применением новых плюшечек, которые дает 8-ерка.
Определенно Лямбы, новейший collection api, дозволяющий трудиться с коллекциями в больше функциональном жанре и default-способы в интерфейсах.

Статья является коротким обзором моего навыка по интегрированию Java 8, Spring MVC, Hibernate и SSP.

Кому увлекательно, умоляю под кат.

Вступление

Я длинное время(и все еще) продолжаю восторгаться языком Scala, но к сожалению, мне все еще мой пропитанный ынтырпрайзом мозг мешает перейти на чистую Scala.

В первую очередь из-за привязки ко внешним библиотекам (Hibernate, Spring, Spring MVC), к которым я до сих пор питаю слабость.
Я пытался их и применять в Scala-планах, но остается непрерывное ощущение, что занимаешься непрерывной расстановкой костылей и подпорок и не получается писать в Scala-жанре,
скорее пишешь на Java, но со Scala синтаксисом костыли и подпорки в виде неявных реформирований Java-коллекций в Scala-коллекции и обратно.

Следственно я решил пойти немножко больше «мягким» путем и применять приятель стек. Исключительное метаморфоза, к которому я пришел — применять SSP(Scala Server Pages) взамен JSP(Java Server Pages),
что бы получить статическую поддержку на стороне View и не иметь мощной головной боли с тем,
что что-то ломается при рефакторинге и ты узнаешь это теснее позже деплоймента(когда какой-то блок тупо перестает отображаться либо что еще дрянней подпортит данные в БД)

Предисловие

Выходит, начнем.

Будем применять мой любимый Maven.

Дадим Maven’у нампек, что план у нас будет применять Java 8:

...
<build>
	<plugins>
	...
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<executions>
				<execution>
					<phase>compile</phase>
					<goals>
						<goal>compile</goal>
					</goals>
				</execution>
			</executions>
			<configuration>
				<_source>1.8</_source>
				<target>1.8</target>
			</configuration>
		</plugin>
...
	</plugins>
</build>
...

Добавляем надобные зависимости на Spring(4-ой версии, тот, что поддерживает метаморфозы в новой версией JDK, а так же тянет библиотеку, которая может трудиться с байткодом, сгенерированной 8-ой Java’ой)/Hibernate и SSP. Все остальное по вкусу. Версии вынесены в «dependency management» секцию в parent pom’e.

<dependencies>
...
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-orm</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
	</dependency>

	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-core</artifactId>
	</dependency>

	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-entitymanager</artifactId>
	</dependency>

	<dependency>
		<groupId>org.hibernate.javax.persistence</groupId>
		<artifactId>hibernate-jpa-2.0-api</artifactId>
	</dependency>

	<!-- Scalate (SSP) support-->
	<dependency>
		<groupId>org.fusesource.scalate</groupId>
		<artifactId>scalate-core_2.10</artifactId>
	</dependency>

	<dependency>
		<groupId>org.fusesource.scalate</groupId>
		<artifactId>scalate-spring-mvc_2.10</artifactId>
	</dependency>
...
</dependencies>

Первая задача, на которую натолкнулся — несовмесs_rqvmk!

List<PersonForm> all = personService.findAll().stream().map(PersonForm::from).collect(Collectors.<PersonForm>toList());

View для отображения списка:

<%@ val people: java.util.List[name.dargiri.web.controller.PeopleController.PersonForm]%>
<div>
<h1>People</h1>
</div>
<table>
<thead>
    <tr>
        <th>#</th>
        <th>Username</th>
        <th>Action</th>
    </tr>
</thead>
<tbody>
    <% for(person <- people ) { %>
    <tr>
        <td>
            <%=person.id%>
        </td>
        <td>
            <%=person.username%>
        </td>
        <td>
            <a href="<%=uri("/people/edit/"   person.id)%>">Edit</a> |
            <a href="<%=uri("/people/delete/"   person.id)%>">Delete</a>
        </td>
    </tr>
    <% } %>
</tbody>
</table>

Сборка плана примитивна. В случае если вы выкачали мой план и хотите его подеплоить в сервлет контейнер, скажем в Tomcat, то запустим:
mvn -P=build clean package

И видим как пре-компилируются наши SSP’шечки:

...
[INFO] --- maven-scalate-plugin_2.10:1.6.1:precompile (default) @ web ---
[INFO] Precompiling Scalate Templates into Scala classes...
[INFO]     processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/views/scalate/main/person.ssp
[INFO]     processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/views/scalate/main/people.ssp
[INFO]     processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/scalate/layouts/default.ssp
...

Так что если не дай всевышний что-то вульгарно не так и мы что-то поломали в них из того, что компилируется, то мы узнаем об этом теперь, а не позже деплоймента на dev/qa/staging/production environment.

В примере применял Twitter Bootstrap, потому как нравится он мне.

Скриншоты

Создание пользователя:

Список пользователей:

Редактирование пользователя:

Код примера:
github.com/dargiri/spring-mvc-java8-web-app-template

В качестве бесплатного бонуса:

Тоже самое на Java 7:
github.com/dargiri/spring-mvc-java-web-app-template

Тоже самое на Scala:
github.com/dargiri/spring-mvc-scala-web-app-template

И если вы все еще это читаете и вытянули себе код и хотите с ним поиграться.

Я выбираю запускать из-под IDE, а не пользоваться плагинами для IDE.
Следственно в модуле web-app-launcher находим класс Launcher.
Если вы пользуетесь Idea, то все запустится без задач.
Если вы пользуетесь Eclipse/Netbeans, то необходимы некоторые манипуляции.
Для Eclipse — достать первоначально Eclipse с помощью JDK 8: www.eclipse.org/downloads/index-java8.php

P.P.S. Пишите код и да пребудет с вами сила.

Дальше для плана необходимо предпочесть maven-профайл build.
И в классе Launcher значение переменной MULTI_MODULE_DEFAULT_PATH сменить с «web/src/main/webapp» на “../web/src/main/webapp” либо на полный путь от корня вашей файловой системы.

Ссылки:

Apache Maven — maven.apache.org/
Scalate — scalate.fusesource.org/
Scala — www.scala-lang.org/
Apache Tomcat — tomcat.apache.org/
Twitter Bootstrap — getbootstrap.com/
Spring Data JPA — projects.spring.io/spring-data-jpa/
Hibernate ORM — hibernate.org/orm/
JDK 8 — www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Spring — projects.spring.io/spring-framework/

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB