Ответ 1
У меня была та же проблема.
Я решил это, отбросив mysql.jar в appengine-java-sdk-x.x.x/lib/impl.
Я изучаю решение этой проблемы всю неделю, и, несмотря на то, что были решения аналогичных проблем, нет ни одного адресата и не исправлять эту проблему напрямую.
Я создал проект веб-приложений с помощью Google App Engine и Google Cloud SQL. Запуск приложения GAE с использованием плагина Google eclipse Google и локального сервера MySQL отлично работает.
При запуске приложения из командной строки, используя: -
sudo /opt/appengine-java-sdk-1.6.1/bin/dev_appserver.sh --jvm_flag=-Drdbms.server=local --jvm_flag=-Drdbms.driver=com.mysql.jdbc.Driver --jvm_flag=-Drdbms.url=jdbc:mysql://localhost:3306/twincam?user=root --port=7070 /home/ben/workspace/Twincam/war
Я получаю следующее: -
java.lang.IllegalStateException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at com.google.appengine.api.rdbms.dev.LocalRdbmsServiceLocalDriver.registerDriver(LocalRdbmsServiceLocalDriver.java:95)
У меня есть путь к классу, ссылающийся на mysql-connector.jar, расположенный в /Twincam/war/WEB -INF/lib/mysql-connector-java-5.1.18-bin.jar, на который ссылается моя пользовательская библиотека, как показано ниже. classpath и структура каталогов: -
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/mysql-connector-java-5.1.18-bin.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-javadoc.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1-sources.jar"/>
<classpathentry kind="lib" path="war/WEB-INF/lib/gson-2.1.jar"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>
Обновление: я проверял права доступа к файлам, и все они установлены по умолчанию 664, поэтому я уверен, что это не проблема.
У меня была та же проблема.
Я решил это, отбросив mysql.jar в appengine-java-sdk-x.x.x/lib/impl.
Ответ Matt ответил мне очень много, я считаю, что это более полное объяснение.
Я могу проверить, что вы можете получить локальный экземпляр MYSQL для работы с Google App Engine, работающим в режиме разработки, чтобы не подвергать предстоящие расходы, связанные с облачным SQL-вариантом из Google, при разработке.
Во-первых, поскольку Мэтт сказал, что вы должны поместить кусок mysql-коннектора в APPENGINE_HOME/lib/impl.
Я на окнах. Я сделал это, сначала найдя, где находится мой SDK. В моем проекте в eclipse в проводнике пакетов я нажимаю правой кнопкой мыши на "App Engine SDK [App Engine - 1.6.4]", я выбираю "Свойства" из выпадающего меню, а в появившемся всплывающем окне нажмите "Настройка SDK..." ".
Это показывает местоположение моего SDK App Engine. Перейдите в эту папку в окне Проводника Windows, откройте библиотеку lib/impl и запустите в jar mysql-коннектор, скопированный из проекта GAE eclipse. Мой путь:
C:\Software\затмение\Plugins\com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37\AppEngine-ява-СДК-1.6.4\Lib\осущ
В соответствии с инструкциями здесь (https://developers.google.com/eclipse/docs/cloudsql-createapp) вы должны оставить строку подключения Java-кода, указанную в prod (jdbc: google: rdbms://.. вместо jdbc: mysql://...) НО вам нужно войти в свойства проекта Eclipse, Google, App Engine, Google Cloud SQL и в разделе "Экземпляр разработки SQL (используется локальным сервером разработки)", выберите переключатель "Использовать экземпляр MySQL". В следующий раз, когда вы запустите GAE, строка подключения в вашем Java-коде будет проигнорирована в пользу вашего локального хоста MySQL.
Убедитесь, что служба MySQL запущена, и вам хорошо идти.
Мне потребовалось больше времени, чтобы понять, чем это должно было бы быть. Я думаю, что ключ из Документов Google, если вы не понимаете/не используете эту информацию, попробуете использовать строку mysql jdbc и будете запускать ошибки разрешений сокета, поскольку GAE не может перейти на порт 3306, если вы не сделаете так, как я описываю
Вам не нужно явно подключаться к экземпляру разработки SQL в вашем коде - это выполняется автоматически при запуске приложения на сервере разработки. Экземпляр SQL разработки для подключения к компьютеру автоматически передается на сервер разработки через аргументы VM GPE во время выполнения.
(Я загрузил 4 изображения, чтобы помочь с этим объяснением, и только после того, как я закончил, он скажет мне, что вам нужно 10 очков репутации для загрузки изображений - jeesh)
AFAIK Если вы используете GAE, вы не можете использовать драйвер JDBC. Я не знаю, как он может работать в eclipse, в то время как класс Socet ограничен в GAE. Вы должны использовать внутренний драйвер GAE вместо mysql JDBC.
com.google.appengine.api.rdbms.AppEngineDriver
Затем в eclipse вы можете настроить подключение к локальному mysql db, как в example см. также этот пример, как он настроен
Компиляция в качестве чистого GWT и перенос его в Tomcat с JDBC должна работать, но не как приложение GAE.
Я только что установил Eclipse + GPE4.2 на новый компьютер с использованием GAE SDK1.7.5 на Juno Service Release 1 Build id: 20121004-1855 и был вынужден скопировать драйвер JDBC в appengine-java-sdk-xxx/lib/осущ. Первоначально я забыл об этом, и я потратил около 2 дней на отладку своего кода.
Было бы неплохо, если бы была дополнительная информация о проблемах на странице GPE. Было бы неплохо иметь возможность Google больше информации.
Хорошо, прочитав все написанные для вас ребята и прочитав еще один материал, я, наконец, могу перечислить свои данные из таблицы моего экземпляра Google Cloud Cloud с помощью GAE, я просто следую за этими крутами, и это работает!...
1.- Я последовал этому примеру: Использование Google Cloud SQL с SDK для Java App Engine
но в гостевой книге .jsp я добавил эту строку:
<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %>
Затем я изменил URL-соединение с этим, без имени пользователя в моем случае.
url = "jdbc:google:rdbms:INSTANCE_NAME/DATABASE_NAME";
Также я прокомментировал эту строку
// Class.forName("com.mysql.jdbc.GoogleDriver");
2.- Как описано выше, я скопировал mysql-connector.jar, отбросив его в appengine-java-sdk-x.x.x/lib/impl.
3.- Я сконфигурировал проект, как описано здесь Создать новое веб-приложение с поддержкой Cloud SQL
4.- Я настроил свой экземпляр Google SQL, как описано здесь Настройка доступа
5.- Наконец, я развернул проект, как описано здесь Загрузка вашего приложения
Я могу запустить его локально, а также хорошо работать.
Ну, надеюсь, это поможет, thnks!