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

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

Я создал проект веб-приложения с помощью Google App Engine и Google Cloud SQL. Запуск приложения GAE с помощью плагина 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 ссылается на мою пользовательскую библиотеку, как показано ниже .файл пути к классам и структура каталогов: -

   <?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

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

5 ответов


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

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


ответ Мэтта очень помог мне, я считаю, что это более полное объяснение.

Я могу проверить, что вы можете получить локальный экземпляр MYSQL для работы с Google App Engine, работающим в режиме разработки, чтобы не нести предстоящих расходов, связанных с опцией Cloud SQL от Google, при разработке.

во-первых, как сказал Мэтт, вы должны поместить банку mysql-connector в APPENGINE_HOME/lib/impl.

Я на windows. Я сделал это, сначала найдя где находится мой SDK. В моем проекте в eclipse в проводнике пакетов я нажимаю правой кнопкой мыши на " App Engine SDK[App Engine-1.6.4]", я выбираю свойства из выпадающего меню, и в результате всплывающего окна нажмите синий " настроить SDK..." соединение.

Это показывает местоположение моего SDK App Engine. Перейдите в эту папку в окне Проводника Windows, откройте lib / impl и поместите в mysql-connector jar, скопированный из вашего проекта GAE eclipse. Мой путь было:

C:\Software\eclipse\plugins\com.гуглить.appengine.затмение.sdkbundle_1.6.4.v201203300216r37\appengine-java-sdk-1.6.4\lib\impl

в соответствии с инструкциями здесь (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, если вы не понимаете / используете эту информацию, вы попытаетесь использовать строку JDBC mysql и запустите в ошибки разрешения сокета, потому что GAE не может перейти на порт 3306, если вы не сделаете, как я описываю:

вам не нужно явно подключаться к экземпляру SQL разработки в вашем коде - это делается для вас автоматически при запуске приложения на сервере разработки. Экземпляр SQL разработки для подключения автоматически передается на сервер разработки через аргументы виртуальной машины GPE во время выполнения.

(Я загрузил 4 картинки, чтобы помочь с этим объяснение и только после того, как я закончил, он говорит мне, что вам нужно 10 очков репутации для загрузки изображений--jeesh)


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

com.google.appengine.api.rdbms.AppEngineDriver

затем в eclipse вы можете настроить соединение с вашей локальной БД mysql, как в пример Смотрите также это пример как он настроен

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


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

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


Ну, после прочтения всего написанного для вас, ребята, и чтения другого материала я, наконец, могу перечислить свои данные из таблицы моего экземпляра Google SQL Cloud с GAE, я просто следую этим крутизнам, и это работает!...

1.- Я последовал этому примеру :[использование Google Cloud SQL с App Engine Java SDK

но в книге отзывов.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!