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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
Stampede
Дата 25.6.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



v2v, я не позиционирую себя как опытного JEE разработчика в том понимании, которое вы вкладываете в это слово. Поэтому ваши вопросы - это не ко мне. Попробуйте создать отдельную тему, или посмотрите вот этот только что открытый топик: Малый джентельменский набор знаний, начинающего девелопера корпоративного ПО.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 26.6.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



User
Код

package ru.selfexpression;

import javax.swing.*;
import java.util.Date;

public class User {
    private int id;
    private String name;
    private byte []password;
    private String group;
    private Icon avatars;
    private Date birthday;
    private String gender;
    private String city;
    private String country;
    private String signature;
    private String mail;
    private String icq;
    private int posts;
    private Date dateRegistration;

    public static final int GENDER_MALE = 0;
    public static final int GENDER_FEMALE = 1;

    public User() {

    }
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setPassword(byte password[]) {
        this.password = password;
    }
    public byte[] getPassword() {
        return password;
    }
    public void setGroup(String group) {
        this.group = group;
    }
    public String getGroup() {
        return group;
    }
    public void setAvatars(Icon avatars) {
        this.avatars = avatars;
    }
    public Icon getAvatars() {
        return avatars;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setGender(int gender) {
        if(gender == GENDER_MALE) {
            this.gender = "male";
        }
        if(gender == GENDER_FEMALE) {
            this.gender = "female";
        }
    }
    public String getGender() {
        return gender;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCity() {
        return city;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public String getCountry() {
        return country;
    }
    public void setSignature(String signature) {
        this.signature = signature;
    }
    public String getSignature() {
        return signature;
    }
    public void setMail(String mail) {
        this.mail = mail;
    }
    public String getMail() {
        return mail;
    }
    public void setICQ(String icq) {
        this.icq = icq;
    }
    public String getICQ() {
        return icq;
    }
    public void setPosts(int posts) {
        this.posts = posts;
    }
    public int getPosts() {
        return posts;
    }
    public void setDateRegistration(Date dateRegistration) {
        this.dateRegistration = dateRegistration;
    }
    public Date getDateRegistration() {
        return dateRegistration;
    }
}

Post
Код

package ru.selfexpression;

import java.util.Date;

public class Post {
    private int id;
    private int status;
    private String user;
    private int section;
    private Date date;
    private String title;
    private String text;
    private int viewings;
    private float rating;

    public static final int AUTHORIZED = 0;
    public static final int NOT_AUTHORIZED = 1;

    public Post() {

    }
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public int getStatus() {
        return status;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getUser() {
        return user;
    }
    public void setSection(int section) {
        this.section = section;
    }
    public int getSection() {
        return section;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public Date getDate() {
        return date;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getTitle() {
        return title;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getText() {
        return text;
    }
    public void setViewings(int viewings) {
        this.viewings = viewings;
    }
    public int getViewings() {
        return viewings;
    }
    public void setRating(float rating) {
        this.rating = rating;
    }
    public float getRating() {
        return rating;
    }
}


Добавлено через 1 минуту и 43 секунды
Stampede мы будем с локализацией заморачиваться?


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 26.6.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Так, препарируем. Замечания такие:

1. Зачем хранить пароль в виде байтов? Гораздо удобнее в виде строки - hex или base64.

2. Аватар собираешься прямо в базе хранить, блобом? Подумай, удобно ли? В прниципе это возможно, но поддерживать будет трудно (вставлять/обновлять/просматривать). Я бы все-таки предложил хранить в файловой системе. Тогда поле avatars (кстати, почему во множественном числе) будет строкой, содержащей путь к файлу картинки.

3. По поводу пола. У тебя вот такая конструкция:

Код

    public void setGender(int gender) {
        if(gender == GENDER_MALE) {
            this.gender = "male";
        }
        if(gender == GENDER_FEMALE) {
            this.gender = "female";
        }
    }
 


Есть ли в этом смысл? Практически единственное место, где у тебя будет создаваться объект типа User - это при обработке соответствующей веб-формы. Пол там будет скоее всего задаваться радиокнопкой. Ну и зачем нам связываться с преобразованием строки в число, а потом обратно, если мы можем везде работать со строкой? Я бы сделал так:

Код

    public static final String GENDER_MALE = "male";
    public static final String GENDER_FEMALE = "female";

    public void setGender(String gender) {
        this.gender = gender;
    }


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

4. В классе Post ссылка на автора поста идет по имени юзера. Правильнее было бы по ID. Это как бы азбука проектирования реляционных баз данных.

В остальном вроде нормально. Да, вот еще. В классе Post я заметил у тебя переменную int section, а ты такую сущность не описывал. Так что отредактируй классы с учетом замечаний и приведи список свойств для Section.

После этого займемся непосредственным созданием интересующих нас объектов.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 26.6.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



section это тематические разделы сайта.  Например, с++ java asm ...
Как и если она нам понадобиться мы ее опишем или уберем.

Код

package ru.selfexpression;

import java.util.Date;

public class User {
    private int id;
    private String name;
    private String password;
    private String group;
    private String avatar;
    private Date birthday;
    private String gender;
    private String city;
    private String country;
    private String signature;
    private String mail;
    private String icq;
    private int posts;
    private Date dateRegistration;

    public static final String GENDER_MALE = "male";
    public static final String GENDER_FEMALE = "female";

    public User() {

    }
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }
    public void setGroup(String group) {
        this.group = group;
    }
    public String getGroup() {
        return group;
    }
    public void setAvatarFilePath(String filePath) {
        this.avatar = filePath;
    }
    public String getAvatarFilePath() {
        return avatar;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getGender() {
        return gender;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCity() {
        return city;
    }
    public void setCountry(String country) {
        this.country = country;
    }
    public String getCountry() {
        return country;
    }
    public void setSignature(String signature) {
        this.signature = signature;
    }
    public String getSignature() {
        return signature;
    }
    public void setMail(String mail) {
        this.mail = mail;
    }
    public String getMail() {
        return mail;
    }
    public void setICQ(String icq) {
        this.icq = icq;
    }
    public String getICQ() {
        return icq;
    }
    public void setPosts(int posts) {
        this.posts = posts;
    }
    public int getPosts() {
        return posts;
    }
    public void setDateRegistration(Date dateRegistration) {
        this.dateRegistration = dateRegistration;
    }
    public Date getDateRegistration() {
        return dateRegistration;
    }
}


Код

package ru.selfexpression;

import java.util.Date;

public class Post {
    private int id;
    private int status;
    private int userId;
    private int section;
    private Date date;
    private String title;
    private String text;
    private int viewings;
    private float rating;

    public static final int AUTHORIZED = 0;
    public static final int NOT_AUTHORIZED = 1;

    public Post() {

    }
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public int getStatus() {
        return status;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public int getUserId() {
        return userId;
    }
    public void setSection(int section) {
        this.section = section;
    }
    public int getSection() {
        return section;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public Date getDate() {
        return date;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getTitle() {
        return title;
    }
    public void setText(String text) {
        this.text = text;
    }
    public String getText() {
        return text;
    }
    public void setViewings(int viewings) {
        this.viewings = viewings;
    }
    public int getViewings() {
        return viewings;
    }
    public void setRating(float rating) {
        this.rating = rating;
    }
    public float getRating() {
        return rating;
    }
}



Это сообщение отредактировал(а) diablero - 26.6.2007, 20:14


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
batigoal
Дата 26.6.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

Репутация: 16
Всего: 151



Код

    public static final String GENDER_MALE = "male";
    public static final String GENDER_FEMALE = "female";

А почему не enum? Вроде у нас Джава не четвертая...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 26.6.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Ага, годидзе.

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

При таком подходе вектор зависимости компонентов проги неизбежно отклоняется в сторону датабазной логики. При еще менее удачной архитектуре, когда начинают плясать от вебного слоя, этот вектор тяготеет также в сторону Servlet API, что в сочетании дает совершенно невообразимую мешанину, в которой практически невозможно разобраться.

Поэтому крайне важно смотреть на базу данных лишь как на один из возможных способов персистенции, и соответственно экранировать реализацию низкоуровневого доступа к базе неким более общим интерфейсом, который знать ничего не знает о таких вещах как Statement, ResultSet и SQLException.

Но вернемся к исходному вопросу. Как же все-таки создавать объекты для тестирования? Выход состоит в использовании т. н. mock objects - болванок, имитирующих реальные сущности (mock == имитация). Для их генерации существует несколько подходов:
  • Вручную через форму ввода

    Учитывая, что у нас никакой формы ввода, равно как и ее обработчика, пока нет и скоро еще не предвидится, этот способ нам не подходит. Кроме того, этот способ не обеспечивает воспроизводимость результата. Однако на более поздних этапах, когда у нас уже будет каркас для работы с формами, этот способ может пригодиться.

  • Вручную программно

    То есть пишем тестовый класс, в котором создаем, например, объект типа User, и сеттерами заполняем его поля некими константами. Потом копируем код и редактируем в нем константы, и так до посинения. Понятно, что это путь в никуда.

  • Вручную через файл-описатель

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

  • Посредством динамических моков

    Есть специальные библиотеки, типа jMock, EasyMock и пр., которые создают моки на лету, используя рефлексию. Вещь, конечно, хорошая, но с ними есть одна трудность: они не понимают семантики прикладных данных. А нам надо, чтобы объекты получались более-менее похожими на реальными. Чтоб если текст - то связный, если имя - то не просто набор букв, если дата - то в определенном диапазоне, 

  • Посредством самодельного генератора моков

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

To batigoal:
Цитата(batigoal @  26.6.2007,  11:45 Найти цитируемый пост)
А почему не enum? Вроде у нас Джава не четвертая.


Ну, для поля gender с двумя возможными значениями это был бы все-таки overkill. Тем более что ведение enum не решало бы вопрос о преобразовании из строкового значения в enum'ное.


Это сообщение отредактировал(а) Stampede - 26.6.2007, 23:04


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 26.6.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Не знал как это называется, но всегда для тестов использовал сгенириный файлик.smile
Так что я склоняюсь к файлу описателю.
Т.е. моя задача в какую-нибудь структуру нагенерить кучу User и Post.

Это сообщение отредактировал(а) diablero - 26.6.2007, 23:25


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 27.6.2007, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(diablero @  26.6.2007,  14:24 Найти цитируемый пост)
Т.е. моя задача в какую-нибудь структуру нагенерить кучу User и Post.


Типа того. Тут можно еще сделать финт ушами и реализовать это дело малой кровью. Фокус заключается в том, чтобы задействовать один из имеющихся средств сериализации Java объектов в какой-нибудь текстовый формат. Для этого подойдет например класс XMLEncoder, или библиотека Burlap (вот тут рассказывается, как в две строчки за- и рассериализовать объект: http://www.caucho.com/resin-3.0/protocols/burlap.xtp), или XStream (вот пример сериализации в строку: http://xstream.codehaus.org/tutorial.html), или дюбой другой (погугли по java xml serialization). Я бы от себя порекомендовал XStream - очень простой, четкий и внятный.

Сделать надо вот что. Пишешь новый тестовый класс, скажем TestUser, и в нем (можно прямо в main()) создаешь экземпляр User, заполняешь поля значениями, и печатаешь его XML представление. Да, предварительно засовываешь объект в какую-нибудь коллекцию, чтобы потом загружать сразу пачкой. Примерно вот так:

Код

User user = new User();
user.setId(123);
user.setName("joe");
// ...
ArrayList list = new ArrayList();
list.add(user);

XStream xstream = new XStream();
String xml = xstream.toXml(list);

System.out.println(xml);


После этого копируешь вывод в буфер, заносишь в файл, скажем, conf/users.xml, и, творчески применяя излюбленный метод китайских программистов под названием copy-paste, создаешь столько юзеров, сколько тебе надо.

Фсе! Телемаркет! smile

Как потом прочитать - объяснять, я думаю, не надо.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 27.6.2007, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Я сделал проще. Взял сворй старый генератор csv файла и создаю сколь угодно User  вида:
Код

0;user_0;password_0;group_0;avatar_0;118273399709;gender_0;city_0;country_0;signature_0;mail_0;icq_0;posts_0;118273399709
1;user_1;password_1;group_1;avatar_1;121436999718;gender_1;city_1;country_1;signature_1;mail_1;icq_1;posts_1;149908399808

Post аналогично.

И не в две, а чуть больше строчек, с помощью StringTokenizer создаю n-е количество User и Post 
Код

class Mock {

    public Vector<User> getUsers(String filePath) {
        Vector<User> data = new Vector<User>();
        ...
        return data;
    }
    public Vector<Post> getPosts(String filePath) {
        Vector<Post> data = new Vector<Post>();
        ...
        return data;
    }
}



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 28.6.2007, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Рад, что тебе понравился XStream. Поехали дальше.

Давай теперь напишем два класса-менеджера, которые реализуют простенький интерфейс:

Код

public interface Manager {
    public void init();
    public void destroy();
}


Менеджерами будет заведовать класс Infinite: создавать, инициализировать и выдавать через геттеры.

В самих менеджерах надо будет при инициализации загрузить из файла моки соответственно юзеров и постов, и сохранить их в мапе по ID. Выдавать методами getUser(int id) и getPost(int id).

В классе UserManager дополнительно определи методы
  • Vector getUsers()
  • User login(String name, String password) throws Exception

Попробуй все это потестить отдельным тестовым классом.

Цитата(diablero @  26.6.2007,  16:44 Найти цитируемый пост)
Stampede у меня есть еще такой вопрос, какой подход используют, если в файле конфигурации много параметров? С точки быстродействия и оптимальности.


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


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 28.6.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



UserManager
Код

public class UserManager implements Manager{
    private HashMap <Integer, User> storage;
    private Vector<User> data;
    public void init() {
        try {
            XStream xstream = new XStream(new DomDriver());
            data = (Vector) xstream.fromXML(new FileInputStream("conf/user.xml"));
            int size = data.size();
            storage = new HashMap<Integer, User>(size);
            for(User user : data) {
                storage.put(user.getId(), user);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    public User login(String name, String password) throws Exception {
        for(User user : data) {
            if(user.getName().equals(name) && user.getPassword().equals(password)) {
                return user;
            }
        }
        throw new Exception("Invalid user name or password");
    }
    public User getUser(int id) {
        return  storage.get(id);
    }
    public Vector <User> getUsers() {
        return data;
    }
    public void destroy() {
        storage = null;
        data = null;
    }
}

PostManager
Код

public class PostManager implements Manager{
    private HashMap<Integer, Post> storage;

    public void init() {
        try {
            XStream xstream = new XStream(new DomDriver());
            Vector<Post> data = (Vector) xstream.fromXML(new FileInputStream("conf/post.xml"));
            int size = data.size();
            storage = new HashMap<Integer,Post>(size);
            for(Post post : data) {
                storage.put(post.getId(), post);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    public Post getPost(int id) {
        return  storage.get(id);
    }
    public void destroy() {
        storage = null;
    }
}

Потестил, работает.

Это сообщение отредактировал(а) diablero - 28.6.2007, 14:36


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 28.6.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Отлично!

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

После этого приступим к обсуждению персистенции.

ЗЫ. Я бы все-таки поменял Vector на ArrayList. Vector и Hashtable - это тяжелаое наследие проклятого царизма, когда еще не было фреймворка Collections, а коллекции на всякий случай делались полностью потокобезопасными (естественно, в ущерб производительности).

Это сообщение отредактировал(а) Stampede - 28.6.2007, 17:49


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 28.6.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Сменить vector на arraylist я захотел после того как посмотрел соотношение производительности между ними.
А какой струтурой заменить hashmap?
Архив с библиотеками запостить не получиться. Лимит всего 120кб, а со всеми библиотеками архив будет пол мегабайта.
Как сменюсь с дежурства все сделаю.

Это сообщение отредактировал(а) diablero - 28.6.2007, 19:48


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 28.6.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(diablero @  28.6.2007,  10:41 Найти цитируемый пост)
Архив с библиотеками запостить не получиться. Лимит всего 120кб, а со всеми библиотеками архив будет пол мегабайта.


Хм, жалко... Модераторы, есть ли какая-нибудь возможность разместить полный архив? Может, дать доступ к FTP или еще-как-то. Спасибо.


Цитата(diablero @  28.6.2007,  10:41 Найти цитируемый пост)
А какой струтурой заменить hashmap


Читай внимательнее. HashMap как раз в полном порядке.

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

Основные кандидаты - голый JDBC, Hibernate, iBatis, Castor. Выбирай с учетом предыдущего опыта и/или желания освоить какую-то технологию.

ЗЫ. Я сам с ORM не работал, так что если что - придется кого-то просить в помощники. Или разбираться вместе.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 28.6.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Из перечисленного я имел дело только с jdbc. Заметил что часто требуется работадателями и много народ обсуждает hibernate. Давай будем работать с ним. Или есть аргументы в другую сторону?


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1372 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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