Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты / 21 сообщений из 21, страница 1 из 1
10.11.2014, 18:25
    #38801223
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Здравствуйте, создал сервлет, который добавляет в БД CouchBase документы (id, как у введенной переменной):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class DataBaseAddServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String url = req.getParameter("url");

        DatabaseManager dbManager = new DatabaseManager();
//        String pathInfo = req.getPathInfo().substring(1);
        String id = dbManager.AddDocument(url);
        resp.getWriter().println(id);
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();

        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }



Необходимо сделать сервлет, который бы создавал сразу, например, 100 документов, попробывал сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        DataBaseAddServlet dataBaseAddServlet = new DataBaseAddServlet();
        for (int k = 0; k < 100; k++) {
            dataBaseAddServlet.doGet(req, resp);
        }
    }
}



Не пошло)
Большая просьба помочь!
...
Рейтинг: 0 / 0
10.11.2014, 18:32
    #38801235
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True Detective,

Свяжитесь с Камиллочкой.
http://www.sql.ru/forum/1125117/legkiy-vopros-k-znatokam
Она уже, скорее всего, сделала.
...
Рейтинг: 0 / 0
10.11.2014, 18:34
    #38801237
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Blazkowicz,

У нас разные задания(
...
Рейтинг: 0 / 0
10.11.2014, 18:35
    #38801239
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveBlazkowicz,

У нас разные задания(
Всё пропало.
...
Рейтинг: 0 / 0
10.11.2014, 19:11
    #38801262
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
BlazkowiczTrue Detective,

Свяжитесь с Камиллочкой.
http://www.sql.ru/forum/1125117/legkiy-vopros-k-znatokam
Она уже, скорее всего, сделала.
Blazkowicz, я тоже кстати о Камиллочке подумал, думаете это похоже на лабораторку? :)
Ээээх, а вот в мои студенчиские годы мы сервлеты не изучали, приходилось все самому делать...

True Detective, что именно не пошло, ошибки какие-то видите?
...
Рейтинг: 0 / 0
10.11.2014, 19:14
    #38801264
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True Detective,

Почитайте про RequestDispatcher
...
Рейтинг: 0 / 0
10.11.2014, 19:55
    #38801287
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveНе пошло)
чтож. видно так и надо )
...
Рейтинг: 0 / 0
10.11.2014, 20:05
    #38801296
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveНе пошло)
Не верю. Покажи экцепшен.
...
Рейтинг: 0 / 0
10.11.2014, 20:17
    #38801303
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
mayton,

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

exception
java.lang.NullPointerException
net.spy.memcached.KeyUtil.getKeyBytes(KeyUtil.java:46)
net.spy.memcached.util.StringUtils.validateKey(StringUtils.java:123)
net.spy.memcached.MemcachedConnection.enqueueOperation(MemcachedConnection.java:1184)
net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:328)
net.spy.memcached.MemcachedClient.add(MemcachedClient.java:855)
com.couchbase.client.CouchbaseClient.add(CouchbaseClient.java:1298)
DatabaseManager.AddDocument(DatabaseManager.java:15)
DataBaseAddServlet.doGet(DataBaseAddServlet.java:17)
DatabaseIterationServlet.doGet(DatabaseIterationServlet.java:12)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
...
Рейтинг: 0 / 0
10.11.2014, 20:23
    #38801307
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
web.xml
Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>DataBaseAddServlet</servlet-name>
        <servlet-class>DataBaseAddServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DataBaseAddServlet</servlet-name>
        <url-pattern>/database/add</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>DatabaseIterationServlet</servlet-name>
        <servlet-class>DatabaseIterationServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DatabaseIterationServlet</servlet-name>
        <url-pattern>/database/iteration</url-pattern>
    </servlet-mapping>

</web-app>



ConnectionManager.java
Код: 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.
public class ConnectionManager {
    Logger logger = Logger.getLogger(getClass().getName());
    private CouchbaseClient client;

    public ConnectionManager() {
        init();
    }

    public void init() {
        try {
            logger.info("Opening base connection.");
            List<URI> hosts = Arrays.asList(new URI("http://127.0.0.1:8091/pools"));            
            String bucket = "default";          
            String password = "";          
            client = new CouchbaseClient(hosts, bucket, password);
        } catch (Exception e) {
            client = null;
            throw new IllegalStateException(e);
        }
    }
    @PreDestroy
    public void destroy() {
        logger.info("Closing base connection.");
        if (client != null) {
            client.shutdown();
            client = null;
        }
    }

    public CouchbaseClient getClient() {
        return client;
    }
}
...
Рейтинг: 0 / 0
10.11.2014, 20:24
    #38801310
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Возможно ошибка в ConnectionManager..
...
Рейтинг: 0 / 0
11.11.2014, 01:07
    #38801405
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveВозможно ошибка в ConnectionManager..

Не факт, мы вашего лога не видим... Не могу понять как ваш DatabaseManager связан с ConnectionManager? По поводу вашего сревлета, я имел ввиду предоставить контейнеру самому следить за жизненным циклом сервлета, перепишите код таким образом:

Код: java
1.
2.
3.
4.
5.
6.
7.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher rd = request.getRequestDispatcher("DataBaseAddServlet");
        rd.forward(request,response);
    }
}



Если все отработает нормально, то просто обернете мой код своим циклом.
...
Рейтинг: 0 / 0
11.11.2014, 01:20
    #38801410
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveВозможно ошибка в ConnectionManager..
а что управляет методами init и destroy?
...
Рейтинг: 0 / 0
11.11.2014, 02:03
    #38801424
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
YamahaR1,

С Вашим кодом вылезает ошибка(
Код: html
1.
2.
3.
4.
HTTP Status 404 - /database/DataBaseAddServlet
type Status report
message /database/DataBaseAddServlet
description The requested resource is not available.



ConnectionManager.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DatabaseManager {
    ConnectionManager cm;

    public DatabaseManager() {
        cm = new ConnectionManager();
    }

    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();
        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }
}



rema174,
Пример взят отсюда
Там есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор добавил вызов метода.
...
Рейтинг: 0 / 0
11.11.2014, 02:14
    #38801427
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Попробывал сделать так - создал 100 документов.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        for (int k = 0; k < 100; k++) {         
            DatabaseManager dbManager = new DatabaseManager();
            String randomId = UUID.randomUUID().toString();
            dbManager.AddDocument(randomId);         
        }
    }
}



Но тут пришлось делать рандомный id - видимо в этом проблема?
Ведь раньше вводишь руками в url код, напр. - localhost:8080/database/add?url=5 и в БД сохраняется документ с id 5 и рандомным текстом.

Но как же все-таки использовать сервлет DataBaseAddServlet?
...
Рейтинг: 0 / 0
11.11.2014, 05:08
    #38801454
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveYamahaR1,

С Вашим кодом вылезает ошибка(
Код: html
1.
2.
3.
4.
HTTP Status 404 - /database/DataBaseAddServlet
type Status report
message /database/DataBaseAddServlet
description The requested resource is not available.



ConnectionManager.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DatabaseManager {
    ConnectionManager cm;

    public DatabaseManager() {
        cm = new ConnectionManager();
    }

    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();
        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }
}



rema174,
Пример взят отсюда
Там есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор добавил вызов метода.

В параметр надо проставлять урл-мапинг, попробуйте так
Код: java
1.
RequestDispatcher rd = request.getRequestDispatcher("add")
...
Рейтинг: 0 / 0
11.11.2014, 09:49
    #38801606
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveТам есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор
добавил вызов метода.
все правильно, если у тебя голый томкат, то не должно работать. сейчас у тебя второй метод не работает тоже, да и первый тоже должен вызываться после конструктора, а не в нем. попробуй запустить на TomEE.
...
Рейтинг: 0 / 0
11.11.2014, 10:42
    #38801681
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
True DetectiveНеобходимо сделать сервлет, который бы создавал сразу, например, 100 документовСервлет не может создать "сразу сто документов". Он обязан создать столько документов, сколько запрошено клиентом.попробывал сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        DataBaseAddServlet dataBaseAddServlet = new DataBaseAddServlet();
        for (int k = 0; k < 100; k++) {
            dataBaseAddServlet.doGet(req, resp);
        }
    }
}

Не пошло)... и это - хорошо.
1. HTTP GET должен быть идемпотентным ;
2. Если вам повезло, то повторные вставки в базу одного и того же документа приведут к нарушению уникальности.
Большая просьба помочь!"Работа" - за углом.
...
Рейтинг: 0 / 0
11.11.2014, 11:34
    #38801768
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Basil A. Sidorov1. HTTP GET должен быть идемпотентным;
С куа ли? Простите мне мой французский. :)

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.

Если я правильно понимаю язык потомков англов и норманов, глагол "share" не переводится как "должен".
...
Рейтинг: 0 / 0
11.11.2014, 11:42
    #38801781
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
Сергей Арсеньев С куа ли? Простите мне мой французский. :)

А с куа бы и нет?

Сергей АрсеньевЕсли я правильно понимаю язык потомков англов и норманов, глагол "share" не переводится как "должен".
Судя по тому что ты вообще не туда смотришь, то скорее всего не очень понимаешь.
Читай абзацем выше.
RFCGET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval
Во-первых это всего лишь рекомендация. Поэтому SHOULD.
Во вторых - Да. Это не совсем "идемпотентность" но всё же, если нет явных предпосылок генерить динамический контент, то GET должен быть "идемпотентным". Запись значимых данных в базу это довольно значимое действие с точки зрения бизнес-логики, а не какая-нибудь статистика.
...
Рейтинг: 0 / 0
11.11.2014, 11:47
    #38801788
True Detective
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты
YamahaR1,

Спасибо большое, помогло!

rema174,
На 8 томкате вроде работает)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]