вторник, 27 июля 2010 г.

Белая юрта: postgresql в среде Ruby on Rails

Белая юрта: postgresql в среде Ruby on Rails

Creating and getting cookie. Как создать и взять куки.

Приведу сразу часть кода из своего файла по управлению кукки:


/**
 *  Здесь я создаю кукки, который создает URL для элемента гиперссылка.
 */

    public void createRegionPathCookie(Integer RegionId) {
        HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        Cookie cookie = new Cookie("RegionPath", "/w-info/faces/info/region.jsp?subjectid=0&id=" + RegionId + "&sort=0");
        cookie.setPath("/w-info/");
        cookie.setMaxAge(31536000);
        cookie.setComment("Cookie with Path to remembered Region");
        httpServletResponse.addCookie(cookie);
    }

/**
 *  Здесь я создаю кукки, который добавляет ID выбранного пользователем
 *  региона, который в последующем используется в предыдушем коде.
 */
    public void createRegionIdCookie(Integer RegionId) {
        HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        Cookie cookie = new Cookie("RegionId", RegionId.toString());
        cookie.setPath("/w-info/");
        cookie.setMaxAge(31536000);
        cookie.setComment("Cookie with id of Region");
        httpServletResponse.addCookie(cookie);
    }

/**
 *  А вот таким образом я беру значение кукки созданного в первом коде.
 */
    public String getRegionPathCookie() {
        String regionPath = "";
        HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        Cookie[] cookies = httpServletRequest.getCookies();
        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++) {
                if (cookies[i].getName().equalsIgnoreCase("RegionPath")) {
                    regionPath = cookies[i].getValue();
                }
            }
        }
        return regionPath;
    }

Для того, чтобы удалить кукки, нужно просто поставить ему setMaxAge(0);

Самое интересное, что я заметил, а затем и прочитал в другом месте, дак это то, что только что созданные кукки не могут быть использованы на этой же странице. Необходимо заставить пользователя обновить страницу, либо придумать что-то другое. Я это "другое" уже придумал и, скорее всего, позже выложу. Проблема заключалась в удалении кукки с ID и MD5 строкой пользователей, при нажатии кнопки выход, необходимо было скрыть одну панельку (приветствие юзера) и показать другую (инфо с регистраицей и входом), но отображение этих панелей как раз и зависело от состояния кукки.

четверг, 22 июля 2010 г.

Установка и запуск jDeveloper 11g на Ubuntu 10.04

1. Скачиваем JDeveloper последней версии (на момент написания это Oracle JDeveloper 11g (11.1.1.3.0) - April 2010). Отсюда.  Скачиваем *.bin файл.
2. Дальше жмем alt+F2 и пишем путь к скачанному файлу.
3. Устанавливаем, все как обычно.
4. В приложениях (applications) он не отобразится, поэтому создаем на панели или где угодно кнопку, называем ее например jDev и указываем команду  /[install dir]/Oracle/Middleware/jdeveloper/jdev/bin/jdev
5. Запускаем и работаем.

п.с. Если нужно запустить это же приложение под виндой, то там  в папке Oracle/Middleware/jdeveloper/ есть   jdeveloper.exe. Вот его и запускаем.

воскресенье, 11 июля 2010 г.

JPA, как удалить запись и связанные с ней записи.

У меня есть 2-е таблицы, в одной из них создаются элементы связанные с одним из элементов в другой таблице.
Простым методом удаления типа:

    public void deleteInvisibleNotice(Notice noticeName) {
        EntityManager iem = EntityManagerProvider.getEntityManager();
        try {
            iem.getTransaction().begin();
            Notice localNotice = iem.find(Notice.class, noticeName.getId());
            iem.remove(localNotice);
            iem.getTransaction().commit();
        } finally {
            iem.close();
        }
    }

Удалить связанные с этой записью записи в другой таблице, естественно не получится, а кроме того, ее просто нельзя удалить, ибо нарушится целостность БД или что-то в этом духе, в общем не даст БД ее удалить, выдав ошибку (раньше наверное гибернейт заругается, в общем не суть.)
Порывшись в интернете нашел способ, который и применил, скорее всего я его немного изменю, но суть от этого не изменится - он работает.

    public void deleteNoticeAndHisParameters(Integer noticeId) {
        EntityManager iem = EntityManagerProvider.getEntityManager();
        try {
            iem.getTransaction().begin();
            Notice localNotice = iem.find(Notice.class, noticeId);
            Query q = iem.createQuery("select Object(o) from ParameterValue as o where o.notice = :notice");
            q.setParameter("notice", localNotice);
            List parameterValuesList = q.getResultList();
            for (ParameterValue parameterValue : parameterValuesList) {
                parameterValue.getNotice().getParameterValues().remove(parameterValue);
                iem.remove(parameterValue);
            }
            localNotice = iem.merge(localNotice);
            iem.remove(localNotice);
            iem.getTransaction().commit();
        } finally {
            iem.close();
        }
    }