Я пытаюсь загрузить свой военный файл в Tomcat 6 и постоянно получаю эту ошибку:
20 мая 2014 г., 12:35:42 org.apache.catalina.startup.ContextConfig init SEVERE: Исключение исправления docBase для контекста [/MyService] java.util.zip.ZipException: ошибка при открытии zip-файла в java.util.zip .ZipFile.open(собственный метод)
...
20 мая 2014 г., 12:35:42 org.apache.catalina.core.StandardContext resourcesStart SEVERE: ошибка при запуске статических ресурсов java.lang.IllegalArgumentException: недействительный или нечитаемый файл WAR: ошибка при открытии zip-файла
Я нашел несколько предложений и попробовал их все, все еще в тупике.
- Переместил файл в каталог diff, а затем скопировал в веб-приложения.
- Изменены права доступа к файлам перед переходом на веб-приложения.
- Остановил Tomcat, удалил старый, добавил новый и перезапустил
- Добавлен случайный класс в войну перед повторным развертыванием
- Удалил tomcat6 (также удалив каталог tomcat6) и полностью переустановил tomcat6
Вот самое странное - я также взял старые войны (более старые версии того же приложения), которые работали на этом же сервере, и они тоже не работают (та же ошибка), даже после переустановки Tomcat. Это заставляет меня поверить, что это проблема Tomcat, однако удаление ничего не исправило. Кроме того, я создал военные файлы из этого же проекта (Eclipse) и развернул их на другом сервере tomcat6. Кроме того, когда я запускаю приложение на своем локальном хосте Eclipse/Tomcat, подключающемся к той же базе данных удаленно, все работает нормально.
Когда я действительно делаю http-запрос, приложение развертывается, однако у меня есть статический инициализатор, который не работает и вызывает исключение нулевого указателя. Я предполагаю, что это связано с
СЕРЬЕЗНО: ошибка при запуске статических ресурсов
Вот статический инициализатор, он создает пул соединений BoneCP, который тоже всегда работал, и я подтвердил, что MySQL работает нормально (репликация тоже все еще происходит — это подчиненный MySQL). Объект connectionPool имеет значение null, и я не получаю трассировку стека в своих журналах для метода openPool(), я также не вижу никаких корневых подключений к MySQL:
protected static BoneCP connectionPool = null;
static
{
openPool();
}
protected static void openPool()
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
BoneCPConfig config = new BoneCPConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
config.setUsername("root");
config.setPassword("mypassword"); //SLAVE
config.setMinConnectionsPerPartition(2);
config.setMaxConnectionsPerPartition(6);
config.setPartitionCount(7);
connectionPool = new BoneCP(config);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}