LINUX.ORG.RU

Вышла седьмая редакция стандарта Java EE и её эталонная реализация

 , ,


2

1

Oracle официально представит Java EE 7 сегодня в 5 вечера по Гринвичу. Наряду с выпуском стандарта Oracle предоставляет офциальную реализацию стандарта  — Glassfish 4.0 и вскоре мы ожидаем увидеть релиз Netbeans 7.3.1, которая предоставит поддержку этой платформы. Несмотря на то, что изначально релиз планировался на конец прошлого года, он был задержан и некоторые вещи, такие как поддержка облачной инфраструктуры и API для кеширования, были перенесены на следующую версию. Это первый релиз Java EE под патронатом Oracle и содержит в себе 14 новых стандартов и 9 обновленных. Вместе с Oracle над стандартами работли Red Hat (CDI и Bean validation), IBM (Batch). В платформу были добавлены новые возможности, такие как WebSocket, JSON, Concurrency и Batch JSRs, в то время как JAX-RS, JPA, JMS, и Expression Language были существенно обновлены. Вот полный список изменений: JSRs:

  • Java Platform, Enterprise Edition 7 (JSR 342)
  • Concurrency Utilities for Java EE 1.0 (JSR 236)
  • Java Persistence 2.1 (JSR 338)
  • JAX-RS: The Java API for RESTful Web Services 2.0 (JSR 339)
  • Java Servlet 3.1 (JSR 340)
  • Expression Language 3.0 (JSR 341)
  • Java Message Service 2.0 (JSR 343)
  • JavaServer Faces 2.2 (JSR 344)
  • Enterprise JavaBeans 3.2 (JSR 345)
  • Contexts and Dependency Injection for Java EE 1.1 (JSR 346)
  • Bean Validation 1.1 (JSR 349)
  • Batch Applications for the Java Platform 1.0 (JSR 352)
  • Java API for JSON Processing 1.0 (JSR 353)
  • Java API for WebSocket 1.0 (JSR 356)

MRs:

  • Web Services for Java EE 1.4 (JSR 109)
  • Java Authorization Service Provider Contract for Containers 1.5 (JACC 1.5) (JSR 115)
  • Java Authentication Service Provider Interface for Containers 1.1 (JASPIC 1.1) (JSR 196)
  • JavaServer Pages 2.3 (JSR 245)
  • Common Annotations for the Java Platform 1.2 (JSR 250)
  • Interceptors 1.2 (JSR 318)
  • Java EE Connector Architecture 1.7 (JSR 322)
  • Java Transaction API 1.2 (JSR 907)
  • JavaMail 1.5 (JSR 919)

Ссылки

>>> Подробности

anonymous

Проверено: Shaman007 ()
Последнее исправление: ymn (всего исправлений: 4)

Ответ на: комментарий от dizza

Да, это помогает, но все равно не догоняет Java EE 6/7 в JBoss или тем более Guice

В спринге можно юзать JNDI, но никто не юзает, потому что няшные хелперы именно в спринге. Потом начинаем ждать пул и подобное. Одно дело заливать war - 200 кб, другое дело - 50 MB

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

Выкинь нахрен хибер, jpa и прочую ересь из проекта - и запускаться будет меньше 10-ти секунд с холодного старта.

Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

Зачем выкидывать JPA если он может почти полностью висеть в контейнере постоянно? Spring обычно все выгружает и загружает сам

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Ну хотя бы потому, что проблем он пораждает больше, чем решает. Производительность, постоянные исключения с отцепленными от сессии объектами, необходимость держать пачку dto из за несериализуемости entity объектов. При этом все равно перенос с базы на базу остается геммороем, да и людей, хорошо знающих hql еще сложнее найти чем на sql.

Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

За границей транзакции автоматически переоткрывает транзакции для докачки ленивых OneToMany. Автоматическое построение REST для тех ленивцев, которые не любят DTO. Хотя при полной bidirectional связи мне вообще не понятно как не выгрести всю базу одним запросом без нормальных DTO связанных с бизнес задачей.

Вообщем если ты точно знаешь что сущность отдаешь REST сервисом строго одним образом, то налепи туда JsonIgnore и выставляй в сеть. EclipseLink даже без JOIN FETCH откроет новую транзакцию за границей основной транзакции для докачки.

Доп. плюшка - MongoDB

И в отличии от гибера нету 2259 открытых багов

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)

Урррраааа, ура ура ура!

maxt
()
Ответ на: комментарий от Nagwal

И все это решается если просто не мепить ассоциации, а просто мепить fk как обычные поля. То есть юзать хибернейт как способ замепить поля, а не как ORM отображение. Профит в том, что капитанские запросы не нужно писать ручками - CRUD вокруг объектов тебе доступен по умолчанию, а это бОльшая часть работы. И HQL нафиг. Если что-то сложнее findById, то пишем запрос на голом sql.

dizza ★★★★★
()
Ответ на: комментарий от vertexua

Одно дело заливать war - 200 кб, другое дело - 50 MB

А вон оно что. Просто я последние года 3 только встраиваемый контейнеры юзаю. Запускаю из IDE. Пул стартует довольно быстро. У меня еще и все данные из базы в память выкачиваются, минуту это все где-то занимает.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Ну вариант конечно, но тогда какой вообще смысл в орм-е и его overhead-e? Проще написать ResultSetExtractor из спрингового jdbctemplate, строчек кода получается ровно столько же, сколько и аннотаций, расставленных над полями да еще и гибче в случае, когда объект к нескольким сджойненым табличкам вяжется ;)

Nagwal ★★★★
()
Ответ на: комментарий от vertexua

За границей транзакции автоматически переоткрывает транзакции для докачки ленивых OneToMany

Ну уже сильно лучше дефолтного хиберовского поведения.

Автоматическое построение REST для тех ленивцев, которые не любят DTO. Хотя при полной bidirectional связи мне вообще не понятно как не выгрести всю базу одним запросом без нормальных DTO связанных с бизнес задачей.

Рест это конечно хорошо, но не им единым все живет. Есть еще soap, jms-ы всякие, сквозь которые удобно гонять сериализованные объекты итд. А еще тот-же protobuf, в который с помощью jdbc я могу напрямую из resultset-a данные записать и отправить, а тут придется сначала создавать кучу entity объектов, потом перегонять их в протобуфовские итд.

Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

Я же написал - CRUD из коробки. Без хибера строчек сильно больше получается, чем аннотаций - на селект, апдейт, делит, и инсерт куча тупого бойлерплейта.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Не сильно, если тот-же JDBCTemplate использовать, вот пример:

package ru.omnicomm.ms.services;

import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.omnicomm.ms.model.Server;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * User: nagakhl
 * Date: 21.03.13
 * Time: 12:25
 */
@Service
public class ServerService extends SqlService {

    @Transactional(readOnly = true)
    public List<Server> getAll(int limit) {
        return template.query("select s.* from public.servers s limit ?", new ServerRowMapper(), limit);
    }

    @Transactional(readOnly = true)
    public Server get(Long id) throws DataAccessException {
        return template.queryForObject("select s.* from public.servers s where s.id = ?", new ServerRowMapper(), id);
    }

    @Transactional(readOnly = true)
    public Server get(String host, int port) throws DataAccessException {
        try {
            return template.queryForObject("select s.* from public.servers s where s.host = ? and s.port = ?", new ServerRowMapper(), host, port);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Transactional
    public void setState(Long serverId, Server.ServerSate state) {
        template.update("update public.servers set state = ? where id = ?", state.value(), serverId);
    }

    @Transactional
    public void delete(Long id) {
        template.update("delete from public.servers where id = ?", id);
    }

    @Transactional
    @PreAuthorize("hasAnyRole('Admin')")
    public Long save(Server server) throws OperationException {
        Long id = getNextId();
        if (get(server.getHost(), server.getPort()) != null) {
            throw new OperationException(source.getMessage("errors.common.object_already_exists", new Object[]{server.getHost() + ":" + server.getPort()},
                    defaultLocaleHolder.getLocale()));
        }
        template.update("insert into public.servers (id, host, port, state, last_accessed) values (?, ?, ?, ?, ?)",
                id, server.getHost(), server.getPort(), server.getState().value(), server.getLastAccessed());
        return id;
    }

    protected class ServerRowMapper implements RowMapper<Server> {

        @Override
        public Server mapRow(ResultSet rs, int rowNum) throws SQLException {
            return new Server(
                    rs.getLong("id"),
                    rs.getString("host"),
                    rs.getInt("port"),
                    rs.getInt("state"),
                    rs.getDate("last_accessed")
            );
        }
    }

}

Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

Да, не сильно. Но все же, зачем писать этот код, если можно не писать? Хотя это конечно дело вкуса.

dizza ★★★★★
()

Жаба и XSS/CSRF

В жабе есть web феймворки с защитой от XSS/CSRF из каропки?
Почти у всех php/ruby/python фреймворков такая защита есть.
Неужели феймворки на ыnterprise'зной java сливают в безопасности фреймворкам на скриптовых недоязычках?

anonymous
()
Ответ на: Жаба и XSS/CSRF от anonymous

Я из JEE бебморд юзал только ZK http://www.zkoss.org в нём реализована защита и от XSS и от CSRF, за остальные JEE морды ничего сказать не могу, так как больше ни с чем опыта работы не имел, да и собственно не хочу иметь. Если меня не устраивает в каком-то приложении ограничения ZK, то просто перехожу на чистый javascript и jaxrs на сервере с незначительными вкраплениями JSP, благо последнее время жабоскрипт библиотеки прибавили в качестве.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо! Посмотрю на досуге.

anonymous
()
Ответ на: комментарий от linux_art

Выбирай что больше нравится.

Официальный и эталон это не русские слова. Соответственно остается полуцерковное канон, и то неизвестно, может у него греческий или албанский корень

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

Референдумов больше не будет

Напомнил.

Взял и испортил настроение. :(

ak380618
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.