Java Google App Engine и Google Cloud SQL работают на локальном сервере разработчика - PullRequest
18 голосов
/ 21 января 2012

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

Я создал проект веб-приложения, используя 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)

У меня есть classpath, ссылающийся на 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, поэтому я уверен, что это не проблема.

Ответы [ 5 ]

36 голосов
/ 28 февраля 2012

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

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

9 голосов
/ 19 мая 2012

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

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

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

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

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

C: \ Software \ eclipse \ plugins \ com.google.appengine.eclipse.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 работает, и вы готовы к работе.

Мне потребовалось больше времени, чтобы выяснить, чем следовало бы. Iдумаю, что ключ от Google Docs, если вы не понимаете / не используете эту информацию, вы попытаетесь использовать строку mysql jdbc и столкнетесь с ошибками разрешения сокета, потому что GAE не может перейти на порт 3306, если вы не сделаетекак я описываю:

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

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

2 голосов
/ 23 января 2012

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

com.google.appengine.api.rdbms.AppEngineDriver

Затем в eclipse вы можете настроить подключение к вашей локальной базе данных mysql, как в примере см. Также пример как это настроено

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

1 голос
/ 25 февраля 2013

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

Было бы неплохо, если бы было больше информации о проблемах со страницей GPE. Было бы неплохо, чтобы у Google было больше информации.

0 голосов
/ 11 сентября 2013

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

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

но в guestbook.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.- Я настроил проект, как описано здесь Создание нового веб-приложения с поддержкой SQL Cloud

4.- Я настроил свой экземпляр Google SQL, как описано здесь Настройка доступа

5.- Наконец, я развернул проект, как описано здесь Загрузка приложения

Я могу запустить его локально, а также хорошо работает.

Ну, я надеюсь, это поможет, спасибо!

...