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

Java Google App Engine и Google Cloud SQL, работающие на локальном dev-сервере

Я изучаю решение этой проблемы всю неделю, и, несмотря на то, что были решения аналогичных проблем, нет ни одного адресата и не исправлять эту проблему напрямую.

Я создал проект веб-приложений с помощью 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>

enter image description here

Обновление: я проверял права доступа к файлам, и все они установлены по умолчанию 664, поэтому я уверен, что это не проблема.

4b9b3361

Ответ 1

У меня была та же проблема.

Я решил это, отбросив mysql.jar в appengine-java-sdk-x.x.x/lib/impl.

Ответ 2

Ответ 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)

Ответ 3

AFAIK Если вы используете GAE, вы не можете использовать драйвер JDBC. Я не знаю, как он может работать в eclipse, в то время как класс Socet ограничен в GAE. Вы должны использовать внутренний драйвер GAE вместо mysql JDBC.

com.google.appengine.api.rdbms.AppEngineDriver

Затем в eclipse вы можете настроить подключение к локальному mysql db, как в example см. также этот пример, как он настроен

Компиляция в качестве чистого GWT и перенос его в Tomcat с JDBC должна работать, но не как приложение GAE.

Ответ 4

Я только что установил Eclipse + GPE4.2 на новый компьютер с использованием GAE SDK1.7.5 на Juno Service Release 1 Build id: 20121004-1855 и был вынужден скопировать драйвер JDBC в appengine-java-sdk-xxx/lib/осущ. Первоначально я забыл об этом, и я потратил около 2 дней на отладку своего кода.

Было бы неплохо, если бы была дополнительная информация о проблемах на странице GPE. Было бы неплохо иметь возможность Google больше информации.

Ответ 5

Хорошо, прочитав все написанные для вас ребята и прочитав еще один материал, я, наконец, могу перечислить свои данные из таблицы моего экземпляра 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!