Xpages+postgresql

Тема в разделе "Lotus - Xpages", создана пользователем JohnLemon, 19 май 2015.

  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Здравствуйте, сразу не пинайте, необходимо реализовать связку xpages+PostgreSQL, все данные необходимо хранить в БД PostgreSQL. Подскажите с помощью каких компонентов это можно сделать. Самые главные вопросы это как добавлять данные и как отображать ? ). Желание заказчика... переубедить бесполезно )
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    2 пользователям это понравилось.
  3. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Скачал бд как на видео. Поставил ExtLib, но не могу понять. Что написать вместо
    Код (Text):
    <jdbc>
    <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
    <url>jdbc:derby:${rcp.data}\derby\XPagesJDBC;create=true</url>
    <user>phil</user>
    <password>phil</password>
    </jdbc>
    И как закинуть, и куда, драйвер PostgreSQL на сервер.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    хм... ${rcp.data} может быть это: C:\Program Files\IBM\Notes\framework\rcp\
    на сервере?
     
    2 пользователям это понравилось.
  5. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    В роде разобрался, все не так сложно было, а может кто подсказать как залить файл в бд теперь ? )
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    2 пользователям это понравилось.
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @JohnLemon, через LEI можно http://www.ibm.com/developerworks/lotus/library/LEI-attachments/
    [DOUBLEPOST=1432731253,1432731078][/DOUBLEPOST]@JohnLemon, c другой стороны зачем?
    чтобы базу раздуло?
    Проще, а может и правильнее:
    файлы сохранить в серетвую шару
    в psql передать путь к файлу
    при обращении к записи - открывать файл с шары
     
    2 пользователям это понравилось.
  8. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Просто желание заказчика, переубеждать по ходу бесполезно...

    Есть пример как это сделать на xpages без агента только, на ssjs?


    Интересный вариант, а это реально реализовать через jdbs компоненты в xpages ? или с помощью ExtLib?
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    а почему без агента? В чем проблема с агентом?
    из xpage можно же вызывать агентов...

    не могу сказать, LEI использует Notes C API, что наводит на мысль что стандартными методами нельзя...

    Вот тут делается загрузка, но в документ: http://openntf.org/XSnippets.nsf/snippet.xsp?id=replace-attachment-when-uploading-a-new-attachment
    По логике надо заменить документ на сетевой путь, вот и всё.
     
    2 пользователям это понравилось.
  10. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Но все таки как можно записать файл в базу PostgreSQL?
    Делаю так, что то нито )
    Код (Text):
    var stream:NotesStream = session.createStream();
    var pathname:string = "c:\\test.txt";
    if (stream.open(pathname, "binary")) {
    @JdbcExecuteQuery("derby1", "INSERT INTO test_goverment(who, files) VALUES ('anonim files', '"+stream.read()+"')");
    stream.close();
    } else _dump("Can't open c:\\notes\\data\\temp.gif");
    Хочу записать в тип bytea.
     
  11. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Думаю, рецептов тебе не найти - не делают так: гемор и по скорости и по потреблению памяти.
    Хоть теоретически PostgreSQL и предоставляет возможность хранения в БД файлов - непосредственно в bytea полях или через large objects. Кста, там ограничение 1Гб, если не изменяет склероз.
    В Post... хранят ссылки на файлы в файловой системе.

    А конечную архитектуру аппликухи, всё ж, определяет прогер, а не заказчик ;)
    А то придётся соглашаться, за бабки "забивать гвозди в асфальт"...
    Меж строк, по твоим вопросам, предполагаю автоматизацию чего то медицинского. Я прав?
    Если так, то построение её на реляционке - верёвки. Не стоит наступать на грабли в сотый раз...
    И ещё, чем передавать большие файлы?? HTTP - жёсткий лимит, я бы на FTP смотрел.
    К тому же, если "медицина", рано или поздно встанет вопрос о передаче\хранении DICOM файлов, а это могут быть и несколько гигов...
     
  12. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Сейчас новый проект )

    Будут только документы, небольшие я думаю.
     
  13. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Мед. доки - туева хуча разномастной инфы и дикое кол-во объёмных справочников и регламентов. И картинки с пэдээфами и дикомами.
    Я ж говорю "рано или поздно..." Такшта моё ИМХО - только NoSQL.
    А медики очень тяжёлые заказчики - их "логика" осмыслению не поддаётся:(
    И общую картину катастрофы они озвучить не в состоянии - прогеру её надо просто знать самому и изучать тему.
     
    2 пользователям это понравилось.
  14. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    797
    Симпатии:
    78
    2 пользователям это понравилось.
  15. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Это я так понимаю на Java?
    как раз хотелось бы штатными средствами..
    А может еще кто подсказать почему при выполнении @JdbcExecuteQuery, возникает ошибка что не может получить ответ от сервера, а запрос выполняется!
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    поддается, надо просто быть таким же социопатом + немного мизантропии + здоровый цинизм.
     
  17. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    :) нудык!
    Медик и получится. А прогить кто будет? Круг замкнулся.
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @alexas1, ну я же пишу код) все нормально, поверь
     
  19. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    ))) я тоже. Друзьям-медикам. Нудык, то друзьям ))) Да и в темах ихних оч давно говорим на одном языке.
    А абстрактного заказчика не взял бы.
     
  20. Hogmuzzle

    Hogmuzzle Member

    Регистрация:
    15 дек 2015
    Сообщения:
    21
    Симпатии:
    0
    Если актуально то отвечаю. На мой взгляд правильней всего использовать Hibernate + настройка пула соединений с помощью c3p0
    Набор необходимых jar файлов
    antlr-2.7.7
    c3p0-0.9.2.1
    commons-logging-1.3.3
    dom4j-1.6.1
    hibernate-c3p0-4.2.6.Final
    hibernate-commons-annotations-4.0.2.Final
    hibernate-core-4.2.6.Final
    hibernate-jpa-2.0-api-1.0.1.Final
    javassit-3.15.0-GA
    jboss-logging-3.1.0.GA
    jboss-transaction-api_1.1_spec-1.0.1.Final
    mchange-commons-java-0.2.3.4
    spring-1.2-rc1
    postgresql-9.3-1102.jdbc41

    postgres.cfg.xml ------------------------------------
    Код (XML):
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "[URL]http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd[/URL]">
    <hibernate-configuration>
    <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postrgesql</property>
    <property name="hibernate.connection.username">postgres</property>
    <property name="hibernate.connection.password">2128506</property>
    <property name="hibernate.default_schema">public</property>
    <property name="hibernate.show_sql">false</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="hibernate.jdbc.batch_size">0</property>
    <property name="hibernate.c3p0.acquire_increment">3</property>
    <property name="hibernate.c3p0.idle_test_period">300</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">30</property>
    <property name="hibernate.c3p0.timeout">1800</property>
    <property name="hibernate.c3p0.max_statements">0</property>
    </session-factory>
    </hibernate-configuration>
    создаем сессию вот так примерно ------------------------------------
    Код (Java):
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    public class HibernateUtilitiesForPostgres {
    private static SessionFactory sessionFactory;
    private static ServiceRegistry serviceRegistry;
    static {
    try {
    Configuration configuration = new Configuration().configure("postgres.cfg.xml");
    serviceRegistry = new ServiceRegistryBuilder().
    applySettings(configuration.getProperties()).buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    } catch (Throwable ex) {
    System.err.println("Initial SessionFactory creation failed." + ex);
    throw new ExceptionInInitializerError(ex);
    }
    }
    public static SessionFactory getSessionFactory() {
    return sessionFactory;
    }
    }
     
    #20 Hogmuzzle, 15 дек 2015
    Последнее редактирование модератором: 15 дек 2015

Поделиться этой страницей