Когда использовать представления базы данных и если не?

JSF 2.3 +

Для этого вы можете использовать @Push и . Ниже приведен пример запуска, который обновляет таблицу данных при событии, запущенном бэкэндом.


    #{notification.message}



    
        
    

@Named @ApplicationScoped
public class Bean {

    private List notifications;

    @Inject
    private NotificationService service;

    @Inject @Push
    private PushContext push;

    @PostConstruct
    public void load() {
        notifications = service.list();
    }

    public void onNewNotification(@Observes Notification newNotification) {
        notifications.add(0, newNotification);
        push.send("updateNotifications");
    }

    public List getNotifications() {
        return notifications;
    }

}

@Stateless
public class NotificationService {

    @Inject
    private EntityManager entityManager;

    @Inject
    private BeanManager beanManager;

    public void create(String message) {
        Notification newNotification = new Notification();
        newNotification.setMessage(message);
        entityManager.persist(newNotification);
        beanManager.fireEvent(newNotification);
    }

    public List list() {
        return entityManager
            .createNamedQuery("Notification.list", Notification.class)
            .getResultList();
    }

}

JSF 2.2 -

Если вы еще не находитесь в JSF 2.3, вам нужно перейти в сторонние библиотеки JSF.

Отмечено, что является основой для JSF 2.3 ]. Итак, если вы нашли много общего, то это правильно.

PrimeFaces использует Атмосфера под капюшонами (что неудобно для настройки без Maven). Атмосфера поддерживает websockets с возвратом SSE и длительным опросом. ICEfaces основан на древней методике длинного опроса . Все они не реализуют собственный API-интерфейс JSR356 WebSocket, который был позже представлен в Java EE 7.

OmniFaces использует собственный API-интерфейс JSR356 WebSocket (поддерживается на всех серверах Java EE 7 и Tomcat 7.0.27+). Поэтому он также очень прост в настройке и использовании (один JAR, один параметр контекста, один тег и одна аннотация). Для этого требуется только CDI (не сложно установить на Tomcat ), но он позволяет вам даже нажать от артефакта не-JSF (например, @WebServlet). В целях безопасности и безопасности JSF, он поддерживает только односторонний push (от сервера к клиенту), а не наоборот. Для этого вы можете использовать JSF ajax обычным способом. JSF 2.3 в значительной степени основан на OmniFaces , поэтому вы найдете много сходства в своих API-интерфейсах ( JSF - OmniFaces ).

Кроме того, вы можете использовать опрос вместо нажатия. Практически каждая библиотека компонентов JSF, поддерживающая ajax, имеет компонент , такой как PrimeFaces с . Это позволяет отправлять exery X секунд запрос ajax на сервер и обновлять контент, когда это необходимо.

См. Также:

30
задан FerranB 13 July 2009 в 23:00
поделиться

7 ответов

Профессионалы: Позволяет Вы для изменения базовых структур данных, не влияя на приложения запросов используете (как долго, поскольку представление может скрыть структуры данных)

13
ответ дан Andy White 28 November 2019 в 00:09
поделиться

Безопасность. Предоставьте доступ на представлении пользователям, которые должны быть в состоянии видеть столбцы, возвращенные из него.

13
ответ дан John Saunders 28 November 2019 в 00:09
поделиться

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

8
ответ дан SingleNegationElimination 28 November 2019 в 00:09
поделиться

Хотя представления могут скрыть сложность и несколько соединений, это сложность, которая была бы в SP так или иначе.

, Если SP, возможно, был оптимизирован, то представление должно быть оптимизировано, который привел бы к увеличенной производительности на всем SPS, которые поражают то представление.

Представления невероятно мощны и полезны по одной причине, которая выделяется, прежде всего, другие очень серьезные основания. Они уменьшают дублирование кода. Таким образом, в большинстве случаев, нижняя строка. Если запрос будет использоваться в трех или больше местах, то представление решительно упростит Ваши изменения, если схема или параметры запроса изменятся.

я когда-то должен был отредактировать 22 хранимых процедуры для изменения некоторой логики запроса. Если бы исходная архитектура использовала представления, то у меня было бы только три изменения.

4
ответ дан DevinB 28 November 2019 в 00:09
поделиться

Теперь, когда SQL Server имеет общие выражения таблицы , я создаю меньше представлений. Когда я действительно создаю представление, это обычно для нормализованной иерархии, которая может использоваться во многих запросах не что-то, что заменяет один запрос.

, Например, регион, Рынок и Город могут быть тремя нормализованными таблицами (снежинка). 90% моих запросов нужны эти данные, таким образом, я создам представление. Представление никогда не заменяет единый запрос, но делает все другие запросы простыми и DRY.

3
ответ дан jason saldo 28 November 2019 в 00:09
поделиться

Я должен был использовать представления несколько раз для того, чтобы сделать странные соединения и группироваться псевдонимами.

странными соединениями, я означаю выбирать список отличных дат и затем внешнего присоединения к ним назад к таблице, из которой они произошли получать пустые записи в течение пустых дней. Я не мог выяснить никакой другой способ сделать его.

Что касается группировки псевдонимами, это, казалось, зависело от сложности формулы в псевдониме. Если псевдоним не ссылался ни на какие фактические столбцы или столбцы, которые уже группировались, все было в порядке, но псевдонимы на столбцах, которые не были включены в группировку, бросали ошибки.

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

Одно последнее преимущество использования представления: сводные таблицы в Excel. Я не думаю, что существует способ присоединиться к таблицам, или по крайней мере не в интерфейсе мастера. Могло бы быть возможно сделать, участвует в Microsoft Query, но я еще не попробовал, потому что мысль просто произошла со мной теперь.

1
ответ дан Scott 28 November 2019 в 00:09
поделиться

Я раньше использовал их все время, теперь редко. Однако я делаю весь свой доступ к данным через хранимые процедуры, таким образом, полноценность представления несколько меньше, так как SP может скрыть сложность соединения при необходимости.

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

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

0
ответ дан E.J. Brennan 28 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: