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

Поиск:

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


Гносеолог
**


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

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



А покажи код, чего и как делаешь. Есть подозрение, что нужно правильно объявить scope контекста персистенции. Попробуй такое объявление фабрики:

Код

@PersistenceUnit(unitName="Infinite") EntityManagerFactory emf;


И вообще, почитай вот это вот: Design Choices in a Web-only Application Using Java Persistence.


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


Опытный
**


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

Репутация: 4
Всего: 27



Цитата(diablero @ 4.7.2007,  22:18)
to fixxer 
Ты говорил, что можешь запостить книжку Java Persistence with Hibernate.
Нужно, если есть возможность.


Лови

По поводу выбора БД, могу еще предложить FireBird. Простая, бесплатная база данный. Имеет, в отличие от мускуля, мощный диалект SQL, причем довольно чистый, избавленный от болезней роста многих "больших" баз. Практически полностью соответствует стандарту SQL-92 (не уверен по поводу SQL-99)  Довольно шустрая и может работать с большими объемами.

http://ru.wikipedia.org/wiki/Firebird
http://www.firebirdsql.org/


Это сообщение отредактировал(а) fixxer - 5.7.2007, 09:59


--------------------
user posted image
PM MAIL ICQ   Вверх
diablero
Дата 5.7.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

public class Infinite {
    private static Infinite instance = new Infinite();
    private static EntityManager entityManager;

    ....
    public void  init(String homeDir) {
    ....
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Infinite");
    entityManager = emf.createEntityManager();
    ...
    }
    public static EntityManager getEntityManager() {
        return entityManager;
    }

Код

class Test {
    public static void main(String args[]) {
        String homeDir = (args.length > 0) ? args[0] : System.getProperty("user.dir");
        Infinite infinite = Infinite.getInstance();
        infinite.init(homeDir);

        try {
            XStream xstream = new XStream(new DomDriver());
            ArrayList<User> data = (ArrayList) xstream.fromXML(new FileInputStream("conf/user.xml"));
            User user = data.get(4);


            EntityManager em = Infinite.getEntityManager();
            em.getTransaction().begin();
            try
            {
                em.merge(user);
                em.getTransaction().commit();
            }
            catch (Exception e)
            {
                e.printStackTrace();
                em.getTransaction().rollback();
            }
            finally {
                em.close();
            }

        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }
}



Код

@PersistenceUnit(unitName="Infinite") EntityManagerFactory emf;

Такое объявление ничиго не изменило


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


Опытный
**


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

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



Что-то с запросами у меня вообще загвостка. Погуглил и только больше запутался. 
Если бы кто-нибудь объяснил по русски, доступно. Было бы здорово


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


Гносеолог
**


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

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



fixxer, спасибо за отличную книжку! Плюс без разговоров smile

Сейчас читаю 9-ю главу (там же, кстати, освещается работа через JPA) - это как раз про контекст персистенции и состояния жизненного цикла персистируемых объектов. Там в числе прочего говорится, что изначально энтити, созданные по new (или как в нашем случае сгенерированные XStream), неизвестны механизму персистенции. Операция merge() как раз и вводит энтитю в соответствующий контекст. Так что я так понимаю, для сохранения объекта в базе после merge() еще нужно выполнить persist().

У тебя в базу что-нибудь попадает?

А что именно не выходит с запросами? Выкладывай, будем разбираться. А то сам понимаешь: лето, пора отпусков - все ясновидящие на курортах smile



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


Опытный
**


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

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



Цитата(Stampede @  5.7.2007,  22:07 Найти цитируемый пост)
У тебя в базу что-нибудь попадает?

Да, все работает. Загнал в базу всех User и Post.

Я сейчас хотел потренироваться с запросами.  Повыбирать User и Post. 
И пока не додумал, как получить всех User или Post.

Времени уже нет разбираться, я сегодня уеду по работе до воскресенья, в лутшем случае. Доступ в интернет будет, правда только к форуму, через телефон. 

Цитата(Stampede @  5.7.2007,  22:07 Найти цитируемый пост)
fixxer, спасибо за отличную книжку!

завтра я ее скачаю, буду разбираться



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


Опытный
**


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

Репутация: 4
Всего: 27



Цитата(Stampede @ 5.7.2007,  22:07)
Сейчас читаю 9-ю главу (там же, кстати, освещается работа через JPA) - это как раз про контекст персистенции и состояния жизненного цикла персистируемых объектов. Там в числе прочего говорится, что изначально энтити, созданные по new (или как в нашем случае сгенерированные XStream), неизвестны механизму персистенции. Операция merge() как раз и вводит энтитю в соответствующий контекст. Так что я так понимаю, для сохранения объекта в базе после merge() еще нужно выполнить persist().

Подозреваю, что для введения нового объекта достаточно persist(). А merge() это для введения detached объекта (вышедшего из контекста сессии) в контекст другой сессии. Но не уверен, пусть знающие поправят.


--------------------
user posted image
PM MAIL ICQ   Вверх
diablero
Дата 8.7.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне нужна помощь, потому что я уже зарылся, и клавиатуре остался один удар до кончиныsmile
Если простые запросы работают, как:
Код

User user = em.find(User.class, 105);
...
Query query = em.createNativeQuery("select * from user", User.class);
query.getResultList();

А вот с запросами с параметрами проблема.

Это сообщение отредактировал(а) diablero - 8.7.2007, 17:26


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


Опытный
**


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

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



Все, разобрался. smile



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


Опытный
**


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

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



Готово.
Код

package ru.selfexpression;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;


@Entity
@Table(name = "user")
@NamedQueries({
@NamedQuery(
        name="loginUser",
        query="select u from User u where u.name =:name and u.password =:password"),
@NamedQuery(
        name="getAllUsers",
        query="select u from User u")
})

public class User implements Serializable {
    @Id
    @Column(name = "user_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "user_name", nullable = false)
    private String name;
    @Column(name = "user_password", nullable = false)
    private String password;
    @Column(name = "user_group", nullable = false)
    private String group;
    @Column(name = "user_avatar")
    private String avatar;
    @Column(name = "user_birthday")
    private Date birthday;
    @Column(name = "user_gender")
    private String gender;
    @Column(name = "user_city")
    private String city;
    @Column(name = "user_country")
    private String country;
    @Column(name = "user_signature")
    private String signature;
    @Column(name = "user_mail")
    private String mail;
    @Column(name = "user_icq")
    private String icq;
    @Column(name = "user_posts")
    private int posts;
    @Column(name = "user_dateRegistration", nullable = false)
    private Date dateRegistration;

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

    public User() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = 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 setAvatar(String filePath) {
        this.avatar = filePath;
    }

    public String getAvatar() {
        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 javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.PersistenceUnit;
import java.util.ArrayList;


public class UserManager implements Manager{
    @PersistenceUnit(unitName="Infinite") private EntityManager entityManager;

    public void init(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
    public User login(String name, String password) throws Exception {
        User user;
        try {
            entityManager.getTransaction().begin();
            Query query = entityManager.createNamedQuery("loginUser");
            query.setParameter("name", name);
            query.setParameter("password", password);
            user = (User) query.getSingleResult();
        } catch(NoResultException err) {
            user = null;
            throw new Exception("Invalid user name or password");
        } finally {
            entityManager.getTransaction().commit();
        }
        return user;
    }
    public User getUser(int id) {               
        User user;
        try{
            entityManager.getTransaction().begin();
            user = entityManager.find(User.class, id);
        } catch (NoResultException err) {
            user = null;
        } finally {
            entityManager.getTransaction().commit();
        }
        return  user;
    }
    public ArrayList<User> getUsers() {
        ArrayList<User> data;
        try {
            entityManager.getTransaction().begin();
            Query query = entityManager.createNamedQuery("getAllUsers");
            data = (ArrayList<User>) query.getResultList();
        } catch(Exception err) {
            data = null;
        } finally {
            entityManager.getTransaction().commit();
        }
        return data;
    }
    public void destroy() {
        entityManager.clear();
    }
}



Это сообщение отредактировал(а) diablero - 9.7.2007, 22:07


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


Опытный
**


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

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



И Post.
Код

@javax.persistence.Entity
@Table(name="post")

public class Post implements Serializable {
    @javax.persistence.Id
    @Column(name="post_id")
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
    private int id;
    @Column(name="post_status")
    private int status;
    @Column(name="post_userId")
    private int userId;
    @Column(name="post_section")
    private int section;
    @Column(name="post_date")
    private Date date;
    @Column(name="post_title")
    private String title;
    @Column(name="post_text")
    private String text;
    @Column(name="post_viewings")
    private int viewings;
    @Column(name="post_rating")
    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;
    }
}

Код

public class PostManager implements Manager{
    @PersistenceUnit(unitName="Infinite") private EntityManager entityManager;

    public void init(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
    public Post getPost(int id) {
        Post post;
        try{
            entityManager.getTransaction().begin();
            post = entityManager.find(Post.class, id);
        } catch (NoResultException err) {
            post = null;
        } finally {
            entityManager.getTransaction().commit();
        }
        return  post;
    }
    public void destroy() {
        entityManager.clear();
    }
}

Что делаем дальше?


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


Гносеолог
**


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

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



Все-таки маленько не так. Помнишь, я писал:

Цитата(Stampede @  4.7.2007,  10:42 Найти цитируемый пост)
Все действия по созданию/управлению транзакциями кодируем вне менеджеров. Пока что будем делать это прямо в тесте:


Это важно. Понимаешь, так, как сделал сейчас ты, получается, что каждый метод менеджера выполняется в отдельной транзакции. Как же мы тогда обеспечим целостность всей совокупности обращений, например, в рамках обработки одного запроса?

И еще пара замечаний.
  • В блоке finally ты делаешь коммит. Это как бы семантически не совсем верно. Коммит лучше поставить последним стейтментом в блоке try, а по исключению (в catch) делать роллбак.

    Конечно, если бы был некий универсальный метод закрытия, типа как Connection.close() в JDBC, то мы бы его поместили в finally. Но блин недодумали маленько эксперты. Так что придется быть очень аккуратными в оформлении транзакционного кода, а не то у нас будут накапливаться незакрытые соединения.
  • Ты передаешь экземпляр entityManager через параметр метода init(). Зачем, когда мы можем получить его напрямую из Infinite?

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

В общем, рано пока двигаться дальше.

[оффтоп]Товарищи модеры, вы не в курсе, куда делся мой аватар?[/оффтоп]


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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(Stampede @  10.7.2007,  21:22 Найти цитируемый пост)
куда делся мой аватар?

сбой базы, история тут
PM MAIL   Вверх
diablero
Дата 11.7.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

В UserManager и PostManager убираем  работу с моками, при инициализации получаем (от Infinite) и сохраняем локально экземпляр EntityManager. Методы getPost(int id), getUser(int id), getUsers() и login(String name, String password) переписываем для работы с базой.

Поэтому и передаю экземпляр entityManager через параметр метода init().

Цитата(Stampede @  10.7.2007,  21:22 Найти цитируемый пост)
Пока что будем делать это прямо в тесте

ОК, персистенцию потестил, прямо в Test'е. Всю работу с базой в менеджерах убрал.

Цитата(Stampede @  10.7.2007,  21:22 Найти цитируемый пост)
 Как же мы тогда обеспечим целостность всей совокупности обращений, например, в рамках обработки одного запроса?

Какую организацию мы будем использовать для решения этой задачи?


Это сообщение отредактировал(а) diablero - 11.7.2007, 18:44


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


Гносеолог
**


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

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



Цитата(diablero @  11.7.2007,  09:35 Найти цитируемый пост)
Поэтому и передаю экземпляр entityManager через параметр метода init().


У нас же есть специальный метод, Infinite.getEntityManager() - вот им и нужно пользоваться. Тут идея вот в чем. Мы неспроста завели интерфейс Manager. Это такая удобная конструкция, про которую известно, что ее можно создать, инициализировать, и в конце работы прихлопнуть.

А ты введением в сигнатуру метода Manager.init() параметра EntityManager ломаешь эту конструкцию. Во-первых, JPA - это всего лишь одна из технологий персистенции, хоть и весьма перспективная. Но это конкретная технология и конкретный API, а ты ее зашиваешь в такую абстрактную вещь как Manager.

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

В общем, надеюсь, это достаточно понятно.

Цитата(diablero @  11.7.2007,  09:35 Найти цитируемый пост)
ОК, персистенцию потестил, прямо в Test'е. Всю работу с базой в менеджерах убрал.


Там не работу с базой надо убрать, а работу с транзакциями! Чтобы в менеджере осталось только вот это:

Код

public Post getPost (int id) {
    return entityManager.find(Post.class, id);
}


Ты это и имел в виду?

Цитата(diablero @  11.7.2007,  09:35 Найти цитируемый пост)
Цитата(Stampede @  10.7.2007,  21:22 Найти цитируемый пост)
 Как же мы тогда обеспечим целостность всей совокупности обращений, например, в рамках обработки одного запроса?

Какую организацию мы будем использовать для решения этой задачи?


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

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

Код

public abstract class DataTest {
    protected abstract void doTest();

// ...

    public void run() {
        EntityManager em = Infinite.getEntityManager();
        EntityTransaction tx = null;
        try {
            tx = em.getTransaction
            tx.begin();
            doTest();
            tx.commit();
        } catch (Exception e) {
            try {
                tx.rollback();
            } catch (Exception e1 {
                logger.error("Rollback failed: " + e1.getMessage());
            }
            logger.printStackTrace(e);
        }
    }
}


Туда же, кстати, можно перенести и метод main() и все действия по инициализацию проги. В результате написание тестов сведется всего-навсего к определению метода doTest(), без лишней мутоты.

Собственно, в JUnit примерно так и организовано: ты наследуюшь от TestCase, и все методы, что имеют имя вида testXXX, выполняются за тебя автоматически.

Короче, переделай с учетом замечаний и покажи. Возможно, на этом и проведем третью жЫрную черту. После этого сразу приступим к долгожданному вебу smile

ЗЫ. 2 Maksym: ага, понятно, спасибо.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1011 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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