Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
1

Костность мышления: таблицы и бины...

22.05.2009, 22:10. Показов 2736. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема: ну базы меня научили писать и даже проектировать (ха-ха). А вот как спроектировать EJB-систему? Что в качестве бинов брать?
Область - технологические процессы производства. Есть операции, из них составляются схемы (ориентированные нагруженные графы), у операций есть ресурсы (люди, оборудование) и расходные материалы, есть готовые продукты. Потом все это грузится, отображается для пользователя в удобоваримом виде и анализируется с помощью теории сетевого планирования и управления. Короче, все понятно, но что здесь за сущности? А что в сессионные запихивать?
Ну хоть какие соображения есть? Критерии отбора?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2009, 22:10
Ответы с готовыми решениями:

Посоветуйте задания для развития мышления
Доброй ночи господа.нужна ваша помощь в развитии мышление как у программиста. Что посоветуете?? Мне...

Session stateless бины
Всем привет! Подскажите, если бин помечен как session stateless, нам гарантируется, что каждый...

Spring. отловить момент, когда все бины уже автоварены
Есть приложение(спринг+ хибернейт) Хочу перед использованием пользователем приложения(при...

Постановка мышления Java-JuniorDeveloper
Для модераторов: ребят, просьба оставить это в теме про Яву и не переносить в Поиск работы и прочие...

18
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
23.05.2009, 01:17 2
ого, масштаб вопросика...

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

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

в 2 абзацах так дело обстоит. а вообще постарайся более конкретно потом спросить - больше ответов будет
0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
23.05.2009, 16:04  [ТС] 3
Ну с сессионными я разберусь, а вот с сущностными проблематичнее. Про всякие там ресурсы, люди, материалы понятно. Но мне нужно в базе (реляционной) хранить ориентированный нагруженный граф с циклами и двумя типами ребер. Как это в базе выглядит я представляю (с помощью двух таблиц, хранящих собственно ребра двух видов, и нескольких таблиц для нагрузки), а вот что тут будет бинами? Ребра? Или вообще сущностного бина не делать для графа, а работать с ним напрямую из сессионного бина (одного). Но тогда он должен быть StateLess, да и то будет ли по части паралелльго доступа все корректно?
Везде примеры банальны до безобразия - магазин, система заказов, библиотека. А как насчет структур посерьезней - с графами в EJB кто-нибудь вообще работал?
0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
23.05.2009, 16:08  [ТС] 4
Кстати, совсем забыл. Как вообще лучше - самому скрипт для базы писать, или позволить при развертывании создать все? Если самому, то как там с отношениями EJB20, да и имена таблиц потом что везде самому прописывать?
Извините, если глупый вопрос.
0
1 / 1 / 5
Регистрация: 22.07.2007
Сообщений: 366
24.05.2009, 10:06 5
Вы меня конечно извените.. Но зачем тогда сущностные бины вообще. Если чесно отдовать себе отчёт то сущностные бины нужны если возможно база у тебя стоит на одном компе, бины (сущностные на другом), сессионные на третем и все они друг друга терзают через IIOP и всё это на разных системах (чесно говоря в моём проекте приблизительно так и есть). Но вот что скажу есть такой анекдтот '20 лет работаю режисёром порнофильмов и до сих пор не знаю зачем порнофильмам режисёр'. Вот сейчас мы закончили проект, провели тесты производительности (лично сам проводил) - заказчик 'У шоку', мы боимся что денег не даст. Короче я всё к чему, если ты очевидной выгоды от использования Entity beans здесь не видишь то и не надо тогда их использовать вообще.
0
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
24.05.2009, 11:59 6
Пропустите-пропустите, дайте и мне свои две копейки приткнуть :-))

У меня сложилось такое видение вопроса: человек уже знает (!), как вся это ботва будет храниться в БД. Так это же здорово! Считай, модель данных готова.

Теперь вопрос: использоавть Entity или нет? Мой ответ: как хочешь.

Допустим, выбор пал на 'да'. Вопрос №2: CMP или BMP? Мой ответ: как надо. А 'надо' зависит как раз от ответов на те вопросы, что ты задавал: как расценивать бины, какой логикой их нагружать и т. д.

Если это CMP, то
а) их писать проще (намоного проще), чем BMP;
б) одна таблица -- один бин (свзяующую тбл. в отношение M2M можно спрятать);
в) кол-во запросов к БД всегда n+1, где n -- кол-во загружаемых поисковиком (finder-метод) записей;
г) пункт в) справедлив, только если запрос к БД осуществляется. Аппсервер мог закешировать как-нть и что-нть и вообще не делать запроса. И это второе и более существенное преимущество CMP перед BMP, нежели пункт а).

Преимущество BMP, на мой взгляд, единственное: бин может инкапсулировать в себя не одну таблицу, а моделируемую сущность целиком. Я не знаю, завершился ли хоть один проект при таком подходе к инкапсуляции логики в Entity бинах, но когда я попытался таким же образом подойти к одному из своих проектов, через какое-то время мне пришлось отказаться от посыла 'несколько таблиц, представляющие одну моделируемую сущность реального мира, -- один бин'. И все быренько переделал не CMP :-))

По поводу того, что сказал simplepilot.
> Если чесно отдовать себе отчёт то сущностные бины нужны если
> возможно база у тебя стоит на одном компе, бины (сущностные на
> другом), сессионные на третем и все они друг друга терзают через
> IIOP и всё это на разных системах (чесно говоря в моём проекте
> приблизительно так и есть).
Только не для EJB 2.0. Преимущество получаем именно из-за локальных интерфейсов Entity бинов -- раз, ни в коем случае не открываем ни один из Entity бинов во вне, то есть не определяем удаленный интерфейс -- два.

> Но зачем тогда сущностные бины вообще.
Да, есть другие варианты, например, JDO.

И последнее. Пока нет БД, точнее, пока нет МОДЕЛИ ДАННЫХ (желательно в UML на концептуальном уровне), хотя бы более-менее устаканенной, нечего и пытаться проектировать EJB. Это исключительно ИМХО.

Думаю, прочитав первую часть книги http://www.theserverside.com/books/EJBDesignPatterns/index.jsp целиком, много вопросов отпадет само собой.

Желаю удачи :-))
0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
24.05.2009, 16:35  [ТС] 7
ОК, ОК, убедили - CMP, сначала базу. Но возник другой вопрос. Просто я уже решил провести проектирование до конца, а потом садиться писать.
Мне все это дело надо отображать у клиента в графическом виде (иначе фигня получается), речь конечно только о Web-клиентах. Значит простой HTML отпадает и просто генерить страницы JSP, обрабатывая запросы сервлетами, не получится. Намекаю на апплеты. Но тут вдруг обнаружил, что никогда не задумывался как организовать настоящий диалог из апплета с сервером: как послать серверу (сервлету, JSP) какие-то данные (выбор пользователя)? Может создать новый урл и get'ом вконец приписать данные? А потом сервлет отработает и апплет читает какой-то файл на сервере с результатами? Но как это во времени утрясти? Можно напрямую посылать апплету что-нибудь? Как то коряво все выглядит.
0
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
24.05.2009, 18:13 8
Если можно обойтись без апплета, то я бы постарался это сделать. Нужно отображать графику, хорошо. Почему бы не рисовать картинки на сервере? Конечно в этом случае нельзя расчитывать на активные картинки. Хотя, можно, используя тег map, но уж лучше апплетом, чем map'ом.

Обмен с сервером -- проще простого. Перво-наперво продумываем протокол обмена между апплетом и сервлетом. Транспортом, конечно же, будет выступать HTTP. Удобнее всего передавать сериализованные объекты поверх HTTP. Например, объявить два базовах класса CustomRequest и CustomReponse. У каждого будет метод getType(). Значение type однозначно определяет наследника. Для каждого наследника сфой объект-обработчик, тоже наследник от базовго RequestProcessor или ResponseProcessor (для апплета и сервлета).

Ну, это просто. Можно даже пойти дальше: на сервере опереться на API javax.servlet или javax.servlet.http. Сделать свой пакет, который будет уметь обрабатывать оъекты CustomRequest, напрмер, doHandshake(), doPostCoords(), doBye(), do...

Когда протокол продуман, запрос-ответ не проблема:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class ... extends Applet {
 
    public void init() {
        URL url = nwe URL(getCodeBase(), '/your/servlet/uri');
    }
}
 
class HttpClient {
    private URL url;
    public HttpClient(URL) {...}
 
    public Response request(Request rq)
    throws IOException, ClassNotFoundException {
 
        // IOException never happens
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(rq);
 
        // IOException can occur
        URLConnection conn = url.openConnection();
        conn.setAllowUserInteraction(true);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestProperty('Content-Type', 'application/x-java-serialized-object');
        conn.setRequestProperty('Content-Length', String.valueOf(bos.size()));
 
        OutputStream os = conn.getOutputStream();
        bos.writeTo(os);
        os.close();
 
        InputStream is = conn.getInputStream();
        Response rs =
                (Response) new ObjectInputStream(is).readObject();
        is.close();
 
        return rs;
    }
}
0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
24.05.2009, 18:40  [ТС] 9
Danissimo, ты брависсимо! Прямо мои мысли читаешь - я тоже по этому пути двигаюсь. Насчет map даже и не хочу думать, без апплета выводить граф таблицей - все равно, что напевать Битлз вместо концерта.
Вся загвоздка в том, что апплет должен рисовать то, что может меняться в зависимости от действий пользователя, а всю бизнес-логику я все же хочу оставить на сервере. Поэтому то обмен и нужен. Только не пойму, зачем так сложно. Почему так нельзя:
Java
1
2
3
4
5
6
//в апплете
URL newURL = new URL (getCodeBase(),'путь/имя сервлета');
URLConnection urlConn = newURL.openConnection();
PrintWriter out = new PrintWriter(urlConn.getOutputStream());
DataInputStream inp = new DataInputStream(urlConn.getInputStream());
out.println('действия пользователя');
А из inp читаем ответ и перерисовываем. Я извиняюсь, может не все точно, но суть понятна, наверно. А в сервлете в doPost() по идее должны читать полученную информацию (какой-то сложный ввод данных пока не предусмотрен, скорее просто выбор, команды), вызывать из сессион бинов методы (пересчет) и посылать в стандартный канал результаты.
А если потребуется гонять какие-то свои объекты, то по идее достаточно их сериализуемыми сделать и тоже все должно получаться. Я таких вещей не пробовал, скорей всего не все так просто - объясните, где загвоздка.
0
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
24.05.2009, 19:14 10
конечно, можно и так. а теперь представьте, что за хаос будет с кодом, когда объем интеракций с сервером начнет возрастать. усе у кучу, чтобы потом невозможно было код поддерживать вообще?

может совет Даниссимо и кажется сначала сложноватым, но на самом деле ничего сложного нет. и гораздо лучше будет иметь работать именно с ЛОГИЧЕСКИМИ запросами, а не с физическими. если наследовать страшновато, то этим может заниматься Proxy/Business Delegate, который и будет инкапсулировать весь сетевой код.

0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
24.05.2009, 19:51  [ТС] 11
ОК, mr_dronski, я из вашего ответа еще меньше понял, но охотно верю, что вам с Danissimo виднее. Может потратие еще немно времени, объясните подробнее, что к чему - как домохозяйке
- что делает и зачем нужен метод getType()
- что за наследники - чьи, зачем, что из себя представляют
- этот код продолжение идеи или ты уже на другой вариант переключился
- где находится и что делает класс HTTPClient (по сути, методы то я все понял)
Да, mr_dronski, мне ничего не страшно, просто я во всем, что мне нужно хочу разобраться, именно поэтому всякие навороты не люблю использовать, я и пишу все практически в блокноте с компилятором.
Это не в обиду, а так - если уж сильно надоел, звиняйте.
За отзывы спасибо, жду еще.
0
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
24.05.2009, 21:06 12
это скорее были различные решения одной проблемы. ок, прикинем. раз ориентируемся на EJB, то будем применять решения, свойственные этой технологии. Бизнес делегат нужон будет по-любому, а то смотришь, а клиент уже хочет универсальной переносимости, и апплет его не везде устраивает. вот он-то и будет общаться с АппСервером.

чем здесь занимаются сервлеты? основная их задача будет - конвертить ХТТП запросы в логические запросы по нужному домену. я с графами дело не имел, поэтому из пальца высасывать не буду. у Даниссимо было пару примеров в эту сторону.

цепочка примерно так выглядит (для веб приложения и для апплета):

view --> servlet --> delegate --> ejb
applet --> delegate --> ejb

если с умом все спроектировать и продумать все лэйеры эксепшнов, то делегат будет ОДИН для всех видов клиентов.

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

решать только тебе, поскольку лучше, чем ты, проблему тут никто не знает. а мы уже поможем по мере возможностей
0
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
24.05.2009, 21:53  [ТС] 13
Я тут в поисках на интересную статью наткнулся - мужик идею: ему хотелось простенькие картинки по запросу клиента генерить - типа график акций, счетчик посещений - в общей создается image, рисуется в нем чего нужно, потом кодируется в JPEG (!!!-самый узкий момент), а потом это дело посылается сервлетом через обычный HTTP на страницу. Если пожертвовать некоторой долью интерактивности (вернее ее визуальной частью), то мне такой вариант подойдет. Одна беда - я пока не нашел, где описано хоть как нибудь как image в JPEG кодировать, хотя в спецификации есть пакет из 4-х классов на эту тему. Ну есть какие мысли по этому поводу?
0
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
25.05.2009, 00:46 14
а ты уже решил, как ты будешь генерить картинки?

может, имеет смысл тогда уже пользовать готовые АПИ, а в них есть и утилиты для конвертации в нужный формат и для сериализации в байт-массив для пересылки по ХТТП.

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

в любом случае - 650х480 рисуется без каких-либо тормозов и летит по сети, летит...
0
mishgun
25.05.2009, 07:55 15
Вот типа решил встрять...
Динамически можно рисовать картинки и сервлетом и не надо упираться в апплет.Если надо могу скинуть пример кода ну а если нет ну на нет и суда нет)))
Другое дело если типа клиент сидит перед компом чешет репу а ему на экран всякие графики кажде 5 секунд рисуются тогда конечно аплет-сервлет
mishgun
25.05.2009, 07:57 16
Хотя по моему методами джаваскрипт можно каждые 5 секунд типа апдейтать запросы к сервлету и тогда аппилет нэ нужэн.Это я чиста в думки впал))
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
25.05.2009, 09:11  [ТС] 17
Да, я когда про картинки писал, то и имел в ввиду, что можно от апплета отказаться, а генерить их сервлетом и посылать уже страничку обычную и все. Если уж очень захочется добавить выбор прямо из картинки чего-то можно со скриптами поизвращаться для отслеживания мыши - самое главное апплет не нужен.
Если есть, как рисовать картинки в какой-нибудь общепринятый формат - скиньте, буду благодарен. Только есть ли такие штуки в стандартном наборе, а не в дополнительных пакетах - не хотелось бы уходить по закоулочкам.
serg-2000@mail.ru
0
mishgun
28.05.2009, 06:55 18
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import javax.servlet.*;
import java.io.*:
import java.awt.*;
import java.awt.image*;
import com.sun.image.codec.jpeg.*;
 
public class SomeClass extends GenericServlet{
 
public void service(ServletRequest req, ServletResponse res) throws
 IOException{
 
BufferedImage im = new BufferedImage(300,400,BufferedImage.TYPE_INT_RGB);
Graphics 2D gr = (Graphics2D) im.getGraphics();
gr.setColor(Color.blue);
gr.fill3DRect(0,0,600,40,true);
 
gr.setFont(new Font('Arial', Font.BOLD,30);
gr.setColor(Color.red);
gr.drawString('Whass up my nigga?');
 
graphics.setColor(Color.white);
gr.drawString('Whass up my nigga?');
 
res.setContentType('image/jpeg');
 
JPEGImageEncoder encoder = JPEGImageEncoder.createJPEGImageEncoder(res.getOutputStream());
encoder.encode(im);
}
}
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
28.05.2009, 16:01  [ТС] 19
mishgun, спасибо. Именно с этого и начну пробовать. Сейчас уже ушел в другую сторону - пока написал бины, буду бизнес-логику писать, но когда дойду уже конкретно до этой проблемы - попробую и напишу как прошло. По-моему все-таки картинки на лету генерить лучше будет, чем с апплетом связываться.

Эй,что с сервером?
0
28.05.2009, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2009, 16:01
Помогаю со студенческими работами здесь

Что первичнее: бины или бд
Может глупый вопрос, но я еще новичок: -сначала пишешь базу, а потом по ней уже бины и как кстати...

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

Тест на Тип мышления
http://nazva.net/logic_test9/ вот мой результат : Тип мышления Подходит...

Освоение C для правильного мышления
Всем привет. Я являюсь Front-End разработчиком, однако не ограничиваю себя только этим. На мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru