Подтвердить что ты не робот

Ubuntu Tomcat7 java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

Я пытаюсь настроить JDBC DataSource в Tomcat 7 под Ubuntu 12.X, поэтому я добавил следующее в файл context.xml:

<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
    maxActive="5" maxIdle="2" maxWait="5000"
    driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />

Очевидно, используя правильный и проверенный идентификатор и пароль пользователя базы данных. Когда я перезапускаю Tomcat, я получаю эту ошибку:

Feb 05, 2013 1:10:01 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

Я googled и узнал, что драйвер JDBC должен быть скопирован в папку $CATALINA_HOME/lib, поэтому я скопировал postgresql-9.2-1000.jdbc4.jar в /usr/share/tomcat 7/lib, но он не сделал Помогите. Я попытался скопировать файл в другие места с теми же результатами.

Еще одна попытка состояла в том, чтобы изменить символическую ссылку tomcat-dbcp.jar в /usr/share/tomcat 7/lib из../../java/tomcat-dbcp-7.0.30.jar../../java/tomcat-dbcp.jar. Единственное изменение - я получил только одно предупреждение вместо четырех, но источник данных тоже не работает.

Версия Java:

[email protected]:~$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

Любой намек, очень приветствуемый.

Приветствия.

4b9b3361

Ответ 1

Библиотека tomcat-dbcp-7.0.30.jar из репозиториев повреждена.

Замените его:

sudo wget -O /usr/share/java/tomcat-dbcp-7.0.30.jar http://search.maven.org/remotecontent?filepath=org/apache/tomcat/tomcat-dbcp/7.0.30/tomcat-dbcp-7.0.30.jar

Ответ 2

Причиной является проблема в процессе сборки/пакета Ubuntu для Tomcat7. Если я правильно понимаю проблему, Apache строит tomcat-dbcp.jar из двоичных файлов, а Ubuntu строит пакеты только из исходного кода. Проект Ubuntu в конечном итоге нуждается в изменении имени пакета Java, которое, как правило, нарушает работу для нас, бедных пользователей. Сведения о gory можно найти в списке выпусков Ubuntu.

Решение, которое я нашел, - это имя источника данных factory, когда я определяю ресурс. В одном случае у меня есть файл META-INF/context.xml, который содержит:

<Resource name="jdbc/myDataSource"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/myDatabase"
    username="username" password="password"
    validationQuery="SELECT COUNT(*) FROM MY_TABLE"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" />

Критический элемент - это объявление "factory", которое переопределяет встроенное значение по умолчанию.

На наших производственных машинах ресурс определяется в элементе GlobalNamingResources файла server.xml. Указание factory требуется только в системах Ubuntu.

Ответ 3

У меня была такая же проблема с CentOS. Я получил это, загрузив новую копию tomcat с сайта и загрузив tomcat-dbcp.jar в свою онлайн-серверную библиотеку, перезапустите сервер:)

Ответ 4

У меня была такая же проблема на Fedora 20 с Tomcat 7.0.55. Я заменил 7.0.30 на 7.0.55 в пути к файлу и имени файла, и это сработало для меня. Не уверен, почему, но этот файл полностью отсутствовал в установке YUM для tomcat 7. Не могу использовать базу данных без нее.

Ответ 5

Это сделало.

Убедитесь, что файл tomcat-dbcp-7.0.30.jar не имеет такого размера, но может быть поврежден, и вам может потребоваться заменить его командой sudo wget выше.

-rw-r - r-- 1 корень root 235411 1 мая 2013 г. tomcat-dbcp-7.0.30.jar

lrwxrwxrwx 1 корень root 22 января 10 2013 tomcat-dbcp.jar → tomcat-dbcp-7.0.30.jar