Показаны сообщения с ярлыком apache. Показать все сообщения
Показаны сообщения с ярлыком apache. Показать все сообщения

среда, 16 сентября 2020 г.

Зависание сервлета

Почему-то при наличии строки
String defaultServer = new AppDatabaseConnectionObject().getDefaultServer();
в классе "DataviewerServlet" веб-страница "зависает" после 8-го обновления страницы в браузере.

Причина мне пока не понятна.
AppDatabaseConnectionObject.java:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class AppDatabaseConnectionObject {
    private Connection connection;
    private String defaultServer;

    public AppDatabaseConnectionObject(
    ) throws ClassNotFoundException, NamingException, SQLException {
        Context context = new InitialContext();
        DataSource datasource = (DataSource) context.lookup("java:/comp/env/jdbc/myapp");
        connection = datasource.getConnection();
        defaultServer = (String) context.lookup("java:/comp/env/myapp/defaultServer");
    }

    public Connection getConnection() {
        return connection;
    }

    public String getDefaultServer() {
        return defaultServer;
    }
}
DataviewerServlet.java:
import ch.qos.logback.classic.Logger;
import com.myapp.AppDatabaseConnectionObject;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DataviewerServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Connection con = new AppDatabaseConnectionObject().getConnection();
            String defaultServer = new AppDatabaseConnectionObject().getDefaultServer();
...

Исправил, заменив в классе "DataviewerServlet" эти строки:
Connection con = new AppDatabaseConnectionObject().getConnection();
String defaultServer = new AppDatabaseConnectionObject().getDefaultServer();
на эти:
AppDatabaseConnectionObject appdbcon = new AppDatabaseConnectionObject();
Connection con = appdbcon.getConnection();
String defaultServer = appdbcon.getDefaultServer();

пятница, 21 декабря 2018 г.

[решено] Ошибка запуска службы Apache Tomcat под Windows

Столкнулся с проблемой:
после установки службы Apache Tomcat запуск этой службы прерывается ошибкой
«
Не удалось запустить службу Apache Tomcat 8.5 (для Jenki) на Локальный компьютер. Подробности содержатся в журнале системных событий. Если эта служба разработана не в Майкрософт, обратитесь к разработчику службы, и сообщите специфический для этой службы код ошибки 1.
»:


Отражение ошибки в журнале событий Windows:
«
Имя журнала: System
Источник: Service Control Manager
Код события: 7024
Уровень: Ошибка
Описание:
Служба "Apache Tomcat 8.5 (для Jenki)" завершена из-за следующей внутренней ошибки:
Неверная функция.
».

Причина оказалась в том, что при использовании скрипта (_installService.bat) установки службы в среде пользователя, под которым данный скрипт выполнялся, не были заданы переменные среды "JAVA_HOME" и "JRE_HOME", что привело к тому, что одна из настроек службы (а именно поле "Java Virtual Machine" на вкладке "Java" окна свойств службы, которое открывается с помощью копии "tomcat8w.exe") заполнилось некорректным значением "bin\server\jvm.dll" вместо правильного значения "C:\PROGRA~1\JAVA\JDK1.8.0_181\jre\bin\server\jvm.dll":

пятница, 17 ноября 2017 г.

showme_webapps_url.bat

Батник открывает текстовый файл, в котором указан адрес страниц web-приложений, которые запущены текущим Tomcat (работает только локально на WEB-сервере) (положить батник нужно в корень папки Tomcat) (положить сюда:
<tomcat>/
и батник будет проверять папку
<tomcat>/webapps/
):
@echo off
setlocal EnableDelayedExpansion
set adr_begin=https://localhost:23991/
set output_file=%TEMP%\tomcat_webaddresses.txt
if exist %output_file% del %output_file%
for /F %%a in ('dir /B /A:D ..\webapps') do echo %adr_begin%%%a>> %output_file%
if exist %output_file% (start %output_file%) else (echo Папка webapps пуста && pause)

Что нужно доработать?
- Нужно реализовать автоматический анализ файла
<tomcat>/conf/server.xml
сейчас сделана "заглушка" в коде - просто вручную прописан номер порта "23991" в строке №3.
- сделать версию для Linux (когда возникнет необходимость).

среда, 15 мая 2013 г.

Load Balancer через SSL для Windows

1. Установите Apache;
2. Если требуется, чтобы подключение происходило по протоколу HTTPS (TCP 443), то в файле
<Apache>\conf.d\ssl.conf
укажите строку
Listen 443
3. <Apache>\conf\openssl.cnf копируем в <Apache>\bin
4. Создаем папку, в которой предполагается хранить ключи для SSL, например, <Apache>\conf\my-certs.
Находясь в этой папке выполняем команды:
..\bin\openssl req -config openssl.cnf -new -out my-server.csr - отвечаем на вопросы;
..\bin\openssl rsa -in privkey.pem -out my-server.key - вводим пароль, который вводили на предыдущем этапе;
..\bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 365
..\bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
5. В файле <Apache>\conf\httpd.conf расскоментировать/добавить ниже строку:
LoadModule ssl_module modules/mod_ssl.so
В блок
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

добавляем 2 строки:
SSLMutex default
SSLSessionCache none

внизу <Apache>\conf\httpd.conf добавляем блок:
<VirtualHost localhost:443>
SSLEngine On
SSLCertificateFile conf/my-certs/my-server.cert
SSLCertificateKeyFile conf/my-certs/my-server.key
JkMount /myapp-from-tomcat_webapps/* balancer
</VirtualHost>

6. Скачиваем в папку <Apache>\modules модуль mod_jk со страницы
http://tomcat.apache.org/download-connectors.cgi
7. В файле <Apache>\conf\workers.properties количество воркеров должно соответствовать количеству томкатов, между которыми требуется распределить нагрузку. Пример файла workers.properties:
workers.tomcat_home=/home/dbadmin/WEB_NEW
workers.java_home=c:/PROGRA~1/Java/jdk1.7.0_21

worker.list=balancer

worker.jvm1.port=8009
worker.jvm1.host=localhost
worker.jvm1.type=ajp13
worker.jvm1.lbfactor=1

worker.jvm2.port=8010
worker.jvm2.host=localhost
worker.jvm2.type=ajp13
worker.jvm2.lbfactor=1

worker.balancer.type=lb
worker.balancer.balance_workers=jvm1,jvm2

где jvm1 и jvm2, это значения параметра jvmRoute в файле <tomcat>\conf\server.xml каждого томката.
8. В файле <Apache>\conf\httpd.conf расскоментировать/добавить ниже строки:
LoadModule jk_module modules/mod_jk.so

# Path to workers.properties
JkWorkersFile conf/workers.properties

# Path to jk logs
JkLogFile logs/mod_jk.log

# Jk log level [debug/error/info]
JkLogLevel info

# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

#JkMount /* balancer
9. Запустить томкаты и Апач.

Tomcat Manager

"Tomcat Manager", например, позволяет видеть количество сессий к каждому вэб-приложению, подключенному к томкату.

1. Из оригинальной сборки томката (для tomcat 6.0.29 см. тут) нужно скопировать в папку <tomcat>/webapps/ следующие директории:
- host-manager;
- manager;
- ROOT.
2. В файле <tomcat>/conf/tomcat-users.xml нужно после начала блока <tomcat-users> добавить строку:
<user name="admin" password="my-password" roles="admin,manager,admin-gui,manager-gui" />

Архив