Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > работа с TomCat, Hibernate, JavaDB


Автор: Swatch 16.1.2008, 15:06
Добрый день.

Помогите, пожалуйста. Надо сделать следующее клиент-серверное приложение: сервер - Tomcat5.5.9, нужна БД  JAvaDB, работа с которой должна вестись через хибернейт. клиент - отображает данные из БД и при изменении их, заносит обратно.

знаю, как создать БД с помощью хибернейт, интерфейс клиента нарисовала... но как положить базу на сервер, как настроить коннект клиента к серверу, как передавать данные из БД клиенту просто не представляю!!!!  smile 

Подскажите, умные люди, где и что можно почитать, пожалуйста!!!

Работаю с клиент-серверными приложениями впервые, так что моя просьба может показаться глупой, но я просто не представляю, с чего начать!!!  smile 

Автор: v2v 16.1.2008, 23:27
клиент веб броузер? тогда jsp + servlet.
если нет (клиент ты пишешь сама как консольное или гуи приложение), то существует два варианта:
1. 
через urlconnection делаешь запрос к сервлету, который живёт на сервере 
сервлет лезет в базу данных , выбирает то, что его "спросили" 
формирует из этого например хмл структуру и передаёт её клиенту
клиент изменяет данные, и опять обращается к сервлету, но теперь в качестве параметра передаёт новую хмл структуру
сервлет проверяет её на правильность, и если всё рулит, то пихает её в базу.
2. веб сервисы.

Автор: powerOn 16.1.2008, 23:47
Вот неплохая книга по Hibernate: http://dev2dev.bea.com.cn/bbs/servlet/D2DServlet/download/126-34474-202400-2852/HibernateInAction.pdf. язык, естественно - английский. Для начала должно хватить.

Автор: Swatch 17.1.2008, 08:20
клиент - гуи приложение. Судя по заданию, то подходит первый вариант, который с сервлетами. Прочитала про сервлеты, общий смысл поняла, только пока не знаю, как сделать так, чтобы:

1. клиент обратился к сервлету через urlconnection и попросил данные из базы??
2. сервлет полез в БД и понял, какие данные брать?
3. сервлет полученные данные преобразовал в хмл структуру и передал клиенту и чтобы клиент корректно отобразил данные...
4. клиент при изменении данных формировал хмл структуру???

Пожалуйста, если есть какие-то примеры, поделитесь... пишу в netbeans 6.0, глянула примеры с сервлетами там, если честно - ничего не поняла... что, зачем и где лежит??? куда положить папку со своей БД? 

Вообще, раньше, когда работала с БД через хибернейт, то писала примерно следующий классик для каждой таблицы:
Код

public class author implements IEntity {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public void copyTo(Object dest) {
        author obj = (author) dest;
        obj.setId(this.getId());
        obj.setName(this.getName());
    }

    public String toString() {
        return getName();
    }



И такой классик, чтоб можно было со списками работать:
Код

public class authors_list implements IList {

    private List _list;

    /**
     * Creates a new instance of countries_list
     */
    public authors_list() {
    }

    public Criteria createCriteria(Session session) {
        Criteria c = session.createCriteria(author.class);
        return c;
    }

    public void setList(List result) {
        _list = result;
    }

    public List getList() {
        return _list;
    }

    public void copyTo(Object dest) {
    }

}


Сейчас такие же классики получится использовать??? и если да, то как???

Автор: v2v 17.1.2008, 09:19
Запрос типо:
Цитата

localhost:8080/ServletOnServer?WhatData=DataFromTable2&ShowAll=No&SelectOrUpdate=Update

На клиенте будет выглядеть вроде:
Код

    try {
        // Construct data
        String data = URLEncoder.encode("WhatData", "UTF-8") + "=" + URLEncoder.encode("Data1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
         // and so on
        // Send data
        URL url = new URL("http://hostname:80/ServletOnServer");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }


теперь сервлет:
Код

    //по сути нас интересует только эта функция
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        String d=req.getAttribute("WhatData");
        String ShAll=req.getAttribute("ShowAll");
        String SoU=req.getAttribute("SelectOrUpdate");       
        List dataBean=null;
        if (d!=null && SoU!=null){
          if (SoU.equals("Select")){
            if (d.equals("dataFromTable1")){ // берём из табл 1
                dataBean = getData(1);
            }
            if (d.equals("DataFromTable2")){ // берём из табл 2
                   dataBean=(getData(2);
            }   else
              if (SoU.equals("Update")){
            if (d.equals("dataFromTable1")){ // берём из табл 1
                dataBean = setData(1,dataBean);
            }
            if (d.equals("DataFromTable2")){ // берём из табл 2
                   dataBean=(getData(2,dataBean);
            }

        }
        }
    }

вот как то так оно может выглядить smile

Добавлено через 3 минуты и 39 секунд
следующей прослойкой после сервлета до базы данных и будет хибернэйт..... в него ты будешь передаввать чёткие указания что взять или положить.

а вобще если у тебя есть (IT) начальство, спроси как будет лучше. smile

Автор: Swatch 17.1.2008, 09:46
Спасибо огромное... стало гораздо понятнее... осталось только сообразить, как преобразовывать данные в хмл структуру.... smile

Автор: v2v 17.1.2008, 09:53
Код

String xml dataToXml(List data){
xml="<data>";
for (int i=0; i<data.size(); i++){
xml+="<title>"+data.get(i).getTitle()+"</title>";
xml+="<age>"+data.get(i).getAge()+"</age>";
}
xml+="</data>";
}

это если по простому.

Добавлено через 1 минуту и 44 секунды
хотя есть какие то специализированные ммеханизмы.

Автор: batigoal 17.1.2008, 10:29
Нет-нет, собирать XML построчно - это не вариант. Полно библиотек и даже технологий для этого (JAXB, например).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)