Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Соединение с EJB 
:(
    Опции темы
chief39
Дата 21.2.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(zone51 @ 20.2.2006, 19:00 Найти цитируемый пост)
в нетбинсах написано что все реализации в последний файл пихать..я сомневался но покорился

Правильно заставили smile
Вся реализация - в классе. Класс + дескриптор - это, как бы, серверная часть.
Оба интерфейса - это скорее клиентская.
Поэтому всё должно быть реализовано в классе. Ну плюс файндер-методы, описанные в дескрипторе для энтити-бинов(Мне это дико не нравится, что методы из дескриптора генерятся, но ничего лучше сам придумать не смог бы smile )



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
zone51
Дата 21.2.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Так, чт такое бин, дескрипторы и домашний удаленный инт-сы я разобрался, как работает тож. А может мне ктонть толково обьяснить что такое get и set методы и что такое эти файндер методы?

Я буду smile пока не smile

smile


--------------------
The truth is out there
PM MAIL   Вверх
powerOn
Дата 21.2.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



JavaBean - Это компонент, т.е. класс, который написан по определенным правилам.
Что бы класс стал JavaBean-ом он должен подчиняться этим правилам - Такова архитектура
JavaBeans.
Среди эти правил есть такое, что если класс имеет поле < тип ИМЯПОЛЯ > ( например String name; ), то чтобы изменить его значение,
должен существовать метод < setИМЯПОЛЯ(тип) > для установки значения этого поля и
метод < тип getИМЯПОЛЯ() > для получения значения этого поля.
например:
Код

String name;
void setName(String n) {
        name = n;
}
String getName() {
        return name;
}


Таким правилам подчиняются все JavaBeans, что позволяет регламентированно их использовать. Например, добавлять новые компоненты на плитру граф редактора форм. Все компоненты Swing - это JavaBeans

Это сообщение отредактировал(а) MoonCat - 21.2.2006, 16:03


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
chief39
Дата 21.2.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(zone51 @ 21.2.2006, 12:58 Найти цитируемый пост)
то такое эти файндер методы?

Когда у тебя есть энтити Бин - это фактически управлялка таблицей. Хотя, согласно спецификации и прочая и прочая - "это абстрактное представление данных.... и т.п."
Так вот. Твой служебный хоум интерфейс работает как бы с таблицей.
А когда с помощью create или какого-либо find ты находишь строку - то эту строку представляет свежезозданный remote интерфейс.
То есть ты десять раз вызовешь create - создастся десять записей и получишь десять ссылок на remote интерфейс.
Ещё есть обязательный метод findByPrimaryKey. Его не надо описывать. В дескрипторе лишь важно указать поле для primary key. Этот метод создастся автоматически.
Но тебе могут понадобиться методы, ищущие наборы строк или ищущие по хитрым критериям. Тогда ты описываешь этот метод в дескрипторе:
Код

           <query>
                <query-method>
                    <!-- имя метода - тебе придётся в хоум интерфейсе описать такой же -->
                    <method-name>findByName</method-name>
                   <!-- список параметров(это тоже определяет метод в хоум интерфейсе)-->
                    <method-params>
                        <method-param>java.lang.String</method-param>
                    </method-params>
                  <!-- то, что он выполняет :) -->
                </query-method>
                   <!-- выбрать из таблицы(на самом деле это её отображение на бин Attribute) где name  равно первому параметру(соотв. параметру метода) и вернуть сей объект -->
                <ejb-ql>
                    <![CDATA[
                                      SELECT OBJECT( attr )      
                                       FROM Attribute AS attr  WHERE attr.name = ?1
                                ]]>
                </ejb-ql>
            </query>


В хоуме:
Код

    public Collection  findByName(String name)
       throws FinderException;

Они все выбрасывают такой эксепшн. а название и список параметров должно совпасть с тем, что в дескрипторе у нас - во время деплоя это проверится.
ты получишь Collection. Проходишь итератором и преобразуешь к remote интерфейсам. Если ничего не вернёт - коллекция будет пуста.
Если возвращаемое значение укажешь не Сollection, a remote интерфейс - тогда ты уверен что поиск по имени уникален, если не найдёт ничего - бросит тебе файндер эксепшн.
От так и описываешь свои файндеры smile
надеюсь ты понимаешь, что раньше мы говорили о сессионных бинах и ентити, а вот эта информация - конкретно по энтити




--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
zone51
Дата 21.2.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Ради Бога простите что я такой тупой! smile

[q]А когда с помощью create или какого-либо find ты находишь строку -[/q]

тупик.

Насчет гет и сет все понятно но тут..

У компоненты есть 2 инт-са: удаленный и ломашний. Домашний отвечает за создание обьекта, посте create создается экземпляр и передаецца ссылка н аего удаленный инт-с эт понятно..А уже в удаленном есть методы работающие с базой данных. так что я в тупике насчет того креате ищет строку..в удаленном инт-се могут быть метода vasya_pupkin например, ведь на этапе креате нет связи еще с бином и о какой базе и строках идет речь?

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

smile smile


--------------------
The truth is out there
PM MAIL   Вверх
chief39
Дата 22.2.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(zone51 @ 21.2.2006, 21:41 Найти цитируемый пост)
зы. Ради бога не злитесь на меня..я работал и с ява и проги писал..но ежб сильно хитрожелтая весчь именно поэтому и хочу в ней разобрацца

Это хорошо, что разобраться. Я и сам,честно говоря, EJB считаю хитрокрасным. Но ведь не боги сиё намудрили smile

Цитата(zone51 @ 21.2.2006, 21:41 Найти цитируемый пост)
ведь на этапе креате нет связи еще с бином и о какой базе и строках идет речь?

ЭЭЭ... неее.. почему нету связи ? smile Ты ведь криэйт откуда вызвал? Прааально... из хоума. А хоум откель взял? lookup'ом. То есть ты уже Свой Бин крепко держишь за одну оглоблю(которая хоум). А Бин давным давно(с момента деплоя) знает что он вот с этой табличкой должен работать. Тут его зовёшь криэйтом. Он обращается к базе, создаёт строку, создаёт remote интерфейс для этой строки и отдаёт его тебе на клиенте. Вот ты и дёргаешь уже конкретную строку ремоутом. Последовательность действий тебе не столь важна - все эти изменения бог знает когда в базу занесутся. А точнее - контейнер. Зачастую именно он транзакциями управляет, хотя потом про bmp почитаешь(не те что картинки, а те что bean managed persistency). Тут такой нюанс - криэйт не означает что СОЗДАЁТСЯ ссылка на ремоут-приводимый объект, означает то, что СТРОКА В БАЗЕ СОЗДАЁТСЯ. Ибо если тебе не надо создавать строку, а лишь получить имеющуюся и поработать с ней - вызываешь файндер какой-нить. Он ВЫТЯГИВАЕТ СТРОКУ(не создаёт!) и СОЗДАЁТ РЕМОУТ ИНТЕРФЕЙС(не совсем дотошное определение, но так яснее). То есть create тут означает новую строку а не создание ремоута. Ремоут тебе создастся в любом случае. Что при криэйте, что при файнде.
Чтоб легче было осмыслить, представь себе таким макаром для локального используемого класса:
- класс бина - это класс бина, который имлементит оба интерфейса (в EJB не имплементим - связь между ними и её валидация происходит динамически)
- хоум - это набор статик методов, которые управляют созданием или поиском существующих объектов данного класса.
- ремоут - это набор не статик методов для работы с конкретным объектом, созданным при помощи статика smile
Это всё аналогия, просто чтоб понять как выглядит лес, ибо деревья его и вправду частенько заслоняют. smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
zone51
Дата 22.2.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



тэксс...при вызове креате в зависимости от типа компонента или создаецца новая строка или вытягиваецца старая..А компоненты бывают BMP и CMP это я знаю smile в первых девелоперу надо самому писать все статик и нестатик методы. Во втором контейнер сам выполняет все обслуживание а девелоперу надо тока написать нестатик бизнес методы. Раз уж так то давайте углубимся smile . Значит как я себе представлял всю эту хрень:

1)Из жсп страницы или клиента, который знает интерфейс компонента(без реализаций)методом lookup или еще как то определяецца поиск бина по жнди имени, потом с ним устанавливаецца соединение, затем по соединению получаецца хоум интерфейс и уж потом получаецца ссылка на ремоут интерфейс методом креате и УЖ ПОТООМ вызываюцца конкретные методы через которые осущ. работа с бд.

Цитата

Тут его зовёшь криэйтом. Он обращается к базе, создаёт строку, создаёт remote интерфейс для этой строки и отдаёт его тебе на клиенте.


Так, что за строка? Это строка энтити бина, который в эту строку и сохраняецца если сервер упадет(на то он и энтити), или это результат конкретного запроса к бд(непохоже)?
Создает ремоут интерфейс для этой строки это ваще круто! То есть эта строка становицца как бы обьектом и этому обьекту копируется ремоут интерфейс? И ссылка на него даецца клиенту. А БД это на случай краха.
В общем случае работа с бд по запросам там и тд происходит только из биснес методов. Я так понял. Хотя есть сомнения. И создаецца ли в этом случае строка для сессион компонент?
Спасибо.






--------------------
The truth is out there
PM MAIL   Вверх
chief39
Дата 22.2.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(zone51 @ 22.2.2006, 16:11 Найти цитируемый пост)
или это результат конкретного запроса к бд(непохоже)?

Результат запроса ты получишь файндом smile А криэйтом - это будет инсерт(ну и данные инсерта-то у тебя остаются - тысызыть, селект свежевставленного).
А файндером ты можешь получить то, что в базе до тебя было - то есть банальный селект, описанный на ejb-ql в дескрипторе.

Цитата(zone51 @ 22.2.2006, 16:11 Найти цитируемый пост)
В общем случае работа с бд по запросам там и тд происходит только из биснес методов. Я так понял. Хотя есть сомнения.

Выборки происходят только через файндеры, а файндеры - это методы ХОУМА. Их сигнатура - в хоум интерфейсе, а тело создаётся автоматически на основе того, что в дескрипторе напишешь. Файндер - суть СЕЛЕКТ. Селект имеет смысл для таблицы, а не для записи. Соответственно, Из ХОУМА ты работаешь файндерами для выборки строк(ремоутов), или криэйтом для создания строки(ремоута).
Таким образом, если быть предельно честным, то работа с БД происходит не только с помощью бизнес-методов но и хоума smile
Для сессион бинов строки не создаются(где и зачем им создаваться?)
Сессион бин без состояния вообще сродни джсп страничке - ему сказали что сделать - он сделал и "отцепитесь от меня, не видел я никаких ваших данных".
Тут уж действительно хоум - лишь хоум, а все бизнес методы - в ремоуте.
Так сказать, хоум - это фабрика ремоутов. То есть та аналогия, что я приводил smile


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
zone51
Дата 22.2.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Ладно, теперь давайте конкретизуем это все. Можете Вы мне привести человеческий код выборки строки из бд через бин. То есть код жсп страницы-клиента. А то я загрузился. Ща попробую разргузицца. Спсибо.
smile smile


--------------------
The truth is out there
PM MAIL   Вверх
chief39
Дата 22.2.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(zone51 @ 22.2.2006, 17:37 Найти цитируемый пост)
Можете Вы мне привести человеческий код выборки строки из бд через бин. То есть код жсп страницы-клиента.

Это разные вещи smile
код выборки будет в дескрипторе бина. он будет работать на благо какого-нить файндера. Который, в свою очередь, можно из жсп вызвать. А может и не жсп, а из толстого клиента или другого бина.
Код выборки я выше привёл smile
Он в xml. Между тегами <ejb-ql> и </ejb-ql>

Там рядом и метод, для которого он старается в интерфейсе ХОУМ. smile
После lookup'а home и приведения к своему интерфейсу хоум, у него можно дёргать этот метод - он вернёт(если такое есть в базе - иначе FinderException выбросит) ссылку на ремоут, которую к твоему ремоут надо преобразовать smile





--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
zone51
Дата 24.2.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Фсё! Наконец до всего допёр и со всем разобрался! структура ежб работает! осталось тока дрова ждбц. Пробовал отписацца мускулистам, ни слова, а на форумах все хитрожелтое, подскажите если не трудно: mysql odbc-jdbc дрова это джар файл или через виндовозную консоль? как их юзать? Заранее спасибо..

smile smile smile smile


--------------------
The truth is out there
PM MAIL   Вверх
zone51
Дата 25.2.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 17.2.2006

Репутация: нет
Всего: 1



Товарищи, проблема соединения кацца решена, но мот ктонть обьяснит мне что это такое?

------------------------------------------------------
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: null object name
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

root cause

java.lang.IllegalArgumentException: null object name
org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:494)
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:638)
org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
sun.rmi.transport.Transport$1.run(Transport.java:153)
java.security.AccessController.doPrivileged(Native Method)
sun.rmi.transport.Transport.serviceCall(Transport.java:149)
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
java.lang.Thread.run(Thread.java:595)
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source)
org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:119)
org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:227)
org.jboss.invocation.MarshallingInvokerInterceptor.invoke(MarshallingInvokerInterceptor.java:37)
org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55)
org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:169)
org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:86)
$Proxy64.create(Unknown Source)
org.apache.jsp.index_jsp._jspService(org.apache.jsp.index_jsp:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.
Apache Tomcat/5.5
----------------------------------------------------------------------------------
Заранее спасибо.


--------------------
The truth is out there
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.