forum.bitel.ru
http://forum.bitel.ru/

Возможность добавления пользовательских сервлетов
http://forum.bitel.ru/viewtopic.php?f=22&t=8960
Страница 1 из 1

Автор:  barguzin2 [ 16 фев 2014, 00:27 ]
Заголовок сообщения:  Возможность добавления пользовательских сервлетов

Цитата:
1663 03.02.2014 19:42:17 ДОБАВЛЕНО Kernel: Возможность добавления пользовательских сервлетов, через описания их и в конфигурации сервера


Можно поподробнее. как ?

Автор:  skn [ 16 фев 2014, 01:13 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

Код:
custom.servlet.keys=s1,s2
custom.servlet.s1.class=ru.myfirm.server.MyServlet1
custom.servlet.s1.mapping=/s1
custom.servlet.s1.filter.keys=cp1251
custom.servlet.s1.filter.cp1251.name=SetCharacterEncodingFilter
custom.servlet.s1.filter.cp1251.class=ru.bitel.server.servlet.filters.SetCharacterEncodingFilter
custom.servlet.s1.filter.cp1251.init-param.keys=encoding,ignore
custom.servlet.s1.filter.cp1251.init-param.encoding.name=encoding
custom.servlet.s1.filter.cp1251.init-param.encoding.value=Cp1251
custom.servlet.s1.filter.cp1251.init-param.ignore.name=ignore
custom.servlet.s1.filter.cp1251.init-param.ignore.value=false
custom.servlet.s2.class=ru.myfirm.server.MyServlet2
custom.servlet.s2.mapping=/s2

Автор:  barguzin2 [ 16 фев 2014, 10:09 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

custom.servlet.s1.class= дин. код ?

Автор:  skn [ 17 фев 2014, 00:14 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

barguzin2 писал(а):
custom.servlet.s1.class= дин. код ?


нет, jar-ка в каталоге с либами

Автор:  Феанор [ 17 фев 2014, 09:01 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

а область применения? раньше ж тоже можно было свои сервлеты подгрузить, в web.xml прописав..

Автор:  skn [ 17 фев 2014, 11:53 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

Феанор писал(а):
а область применения? раньше ж тоже можно было свои сервлеты подгрузить, в web.xml прописав..


тоже самое, только в конфиге.
из плюсов не нужно при обновлениях ослеживать изменения в web.xml

Автор:  Phricker [ 16 дек 2016, 17:08 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

АПну.
А не будет возможности в дин.коде оформлять?
Из плюсов © удобство, и при обновлении (между версиями, когда рекомендуется новую папку скачать) не потеряется.

Автор:  Artur [ 16 дек 2016, 17:13 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

А чем механизм CustomAPI неудобен?

Автор:  Phricker [ 16 дек 2016, 17:33 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

Artur писал(а):
А чем механизм CustomAPI неудобен?

Там же нужно валидную XML на вход подать и т.п.
А тут просто либо GET либо POST запрос пульнул - что-то сделал, назад ответил.

И честно говоря, я делал интеграцию через сustom API с 1цэ, и не скажу, что там все так просто. Убил кучу времени чтобы 1цэ это все корректно кушало.
А тут за 10 минут набросал скрипт, открыл сервлет в nginx, и отправил POST.
И все работает :)
Код:
import bitel.billing.server.CommonExecutor;
import bitel.billing.server.contract.bean.Contract;
import bitel.billing.server.contract.bean.ContractManager;
import org.apache.log4j.Logger;
import ru.bitel.bgbilling.server.util.ServerUtils;
import ru.bitel.bgbilling.server.util.Setup;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test
        extends CommonExecutor {
    static final Logger logger = Logger.getLogger( Test.class );

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        logger.info("Hello GET");
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        logger.info("Hello POST");
        PrintWriter out = response.getWriter();
        Setup setup = Setup.getSetup();
        Connection con = setup.getDBConnectionFromPool();
        ContractManager cm = new ContractManager(con);
        String phone = getParameter(request, "phone", "");
        String ipAddr = getParameter(request, "ipAddr", "");
        logger.info("phone = " + phone);
        logger.info("ipAddr = " + ipAddr);
        try {
            String query = "SELECT cid FROM contract_parameter_type_phone_item WHERE phone = ? ORDER BY cid DESC LIMIT 1 ";
            logger.info("query = " + query);
            PreparedStatement ps = con.prepareStatement(query);
            ps.setString(1, phone);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                int cid = rs.getInt("cid");
                Contract contract = cm.getContractById(cid);
                logger.info(contract.getTitle());
                out.append(contract.getTitle());
            }
            rs.close();
            ps.close();
        }
        catch (SQLException e){
            logger.error(e.getMessage(), e);
        }
        finally
        {
            ServerUtils.closeConnection(con);
        }
        out.println();
    }

    private static String getParameter(HttpServletRequest request, String name, String defaultValue) {
        String value = request.getParameter(name);
        return value != null ? value : defaultValue;
    }
}

Автор:  skn [ 16 дек 2016, 17:56 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

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

Автор:  skyb [ 19 дек 2016, 06:24 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

skn писал(а):
дин код работает через свой класс лоадер про которой томкат ни чего не знает, т.е. томкат не найдет сервлеты написанные в дин. коде. Что бы это заработало надо допиливать встроенные томкат... или например добавить какой нибудь сервлет через либы, а он уже в свою очередь будет подгружать дин. код.

искоропки такое появится?

Автор:  skn [ 19 дек 2016, 15:00 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

skyb писал(а):
skn писал(а):
дин код работает через свой класс лоадер про которой томкат ни чего не знает, т.е. томкат не найдет сервлеты написанные в дин. коде. Что бы это заработало надо допиливать встроенные томкат... или например добавить какой нибудь сервлет через либы, а он уже в свою очередь будет подгружать дин. код.

искоропки такое появится?


что именно?

Автор:  skyb [ 20 дек 2016, 06:32 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

skn писал(а):
skyb писал(а):
skn писал(а):
дин код работает через свой класс лоадер про которой томкат ни чего не знает, т.е. томкат не найдет сервлеты написанные в дин. коде. Что бы это заработало надо допиливать встроенные томкат... или например добавить какой нибудь сервлет через либы, а он уже в свою очередь будет подгружать дин. код.

искоропки такое появится?


что именно?

Возможность написания собственных сервлетов в динкоде

Автор:  Phricker [ 20 дек 2016, 19:27 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

Господа, подскажите по созданию ServerContext в своем сервлете.
Если я пишу
Код:
ServerContext context = ServerContext.get();

то context == null.

Если я пишу
Код:
ServerContext context = new ServerContext(setup, 0, -1);
...
InetServService wsServ = context.getService(InetServService.class, INET_MODULE_ID);

То работает отчасти. Я могу например работать с InetServService.

Но при этом в чем то другом я могу выловить ошибку
Код:
Local event must be generated in ServerContext!



Второй вариант правильный и мне просто следует оборачивать все в свой созданный контекст наподобии

Код:
final ServerContext context = new ServerContext( setup, ConnectionSet.newInstance( setup, false ), 0, userID );
final ThreadContext parentContext = ThreadContext.push( context );
try {
...
}
} finally {
                ThreadContext.pop(context, parentContext);
}


???

Автор:  Phricker [ 21 дек 2016, 16:55 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

ап

Автор:  Вторник [ 30 дек 2018, 13:17 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

barguzin2 писал(а):
Цитата:
1663 03.02.2014 19:42:17 ДОБАВЛЕНО Kernel: Возможность добавления пользовательских сервлетов, через описания их и в конфигурации сервера


Можно поподробнее. как ?


Сделал для вас демо-проекты на Java и Scala.

Автор:  Phricker [ 30 дек 2018, 16:42 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

https://docs.bitel.ru/pages/viewpage.ac ... =135888906
Вставлю свои 5 копеек
Динсервисы из коробки и без необходимости добавления своих файлов.
Но пример интересный да. Спасибо

Автор:  Вторник [ 30 дек 2018, 16:52 ]
Заголовок сообщения:  Re: Возможность добавления пользовательских сервлетов

Phricker писал(а):
https://docs.bitel.ru/pages/viewpage.action?pageId=135888906
Вставлю свои 5 копеек
Динсервисы из коробки и без необходимости добавления своих файлов.
Но пример интересный да. Спасибо


Динсервисы у меня здесь https://github.com/alexanderfefelov/doc ... dynservice

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/