2013-11-07 2 views
4

Im new with appengine, Im, используя appengine version 1.8.7 (также случается со мной в 1.8.6) и пытается добавить maven в проект.App Engine не создает local_db.bin

Когда я настойчив сущность журнала заключается в следующем:

[INFO] nov 07, 2013 5:38:33 PM com.google.appengine.api.datastore.dev.LocalDatastoreService init 
[INFO] INFO: Local Datastore initialized: 
[INFO] Type: High Replication 
[INFO] Storage: D:\Projects\JEE\myapp\tmp\local_db.bin 
[INFO] nov 07, 2013 5:38:33 PM com.google.appengine.api.datastore.dev.LocalDatastoreService load 
[INFO] INFO: The backing store, D:\Projects\JEE\myapp\tmp\local_db.bin, does not exist. It will be created. 

Моя проблема заключается в том, что local_db.bin не создается. И, например, если я попытаюсь выполнить поиск моего периметра, появятся ошибки.

[INFO] java.lang.IllegalArgumentException: Type com.harriague.myapp.dao.entities.Travel is not a known entity type 
[INFO] at org.datanucleus.api.jpa.metamodel.MetamodelImpl.entity(MetamodelImpl.java:193) 

...

Это моя сущность класс:

package com.harriague.myapp.dao.entities; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Column; 

import com.google.appengine.api.datastore.Key; 

@Entity(name = "Travel") 
public class Travel { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Key travelId; 

    @Column(name = "name") 
    private String name; 

    public Travel() { 

    } 

    public Key getTravelId() { 
     return travelId; 
    } 

    public void setTravelId(Key travelId) { 
     this.travelId = travelId; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Вот мили pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 

    <groupId>com.harriague</groupId> 
    <artifactId>myapp</artifactId> 


    <properties> 
     <appengine.app.version>1</appengine.app.version> 
     <appengine.target.version>1.8.7</appengine.target.version> 
     <datanucleus-core.version>3.1.3</datanucleus-core.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <!-- Compile/runtime dependencies --> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-1.0-sdk</artifactId> 
      <version>${appengine.target.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-endpoints</artifactId> 
      <version>${appengine.target.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-labs</artifactId> 
      <version>${appengine.target.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.ow2.asm</groupId> 
      <artifactId>asm</artifactId> 
      <version>4.0</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- JSON --> 
     <dependency> 
      <groupId>com.googlecode.json-simple</groupId> 
      <artifactId>json-simple</artifactId> 
      <version>1.1.1</version> 
     </dependency> 

     <!-- Test Dependencies --> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-testing</artifactId> 
      <version>${appengine.target.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-stubs</artifactId> 
      <version>${appengine.target.version}</version> 
      <scope>test</scope> 
     </dependency> 

     <!-- Spring framework --> 
     <!-- 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
     </dependency> 
     --> 

     <!-- Javax persistence --> 
     <dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-core</artifactId> 
      <version>${datanucleus-core.version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.geronimo.specs</groupId> 
      <artifactId>geronimo-jpa_2.0_spec</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>datanucleus-api-jpa</artifactId> 
      <version>3.1.3</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine.orm</groupId> 
      <artifactId>datanucleus-appengine</artifactId> 
      <version>2.1.2</version> 
      <!-- Need to exclude the enhancer since it interfere with the enhancer plugin. --> 
      <exclusions> 
       <exclusion> 
       <groupId>org.datanucleus</groupId> 
       <artifactId>datanucleus-enhancer</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <version>2.5.1</version> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <archiveClasses>true</archiveClasses> 
        <webResources> 
         <!-- in order to interpolate version from pom into appengine-web.xml --> 
         <resource> 
          <directory>${basedir}/src/main/webapp/WEB-INF</directory> 
          <filtering>true</filtering> 
          <targetPath>WEB-INF</targetPath> 
         </resource> 
         <!-- 
         <resource> 
          <directory>${basedir}/src/main/resources</directory> 
         </resource> 
         --> 
        </webResources> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>com.google.appengine</groupId> 
       <artifactId>appengine-maven-plugin</artifactId> 
       <version>${appengine.target.version}</version> 
       <configuration> 
        <enableJarClasses>false</enableJarClasses> 
        <!--<jvmFlags> 
         <jvmFlag>-Ddatastore.backing_store=${basedir}\local_db.bin</jvmFlag> 
        </jvmFlags> 
        --> 
        <jvmFlags> 
         <jvmFlag>-Dappengine.generated.dir=${basedir}/tmp</jvmFlag> 
        </jvmFlags> 
        <!-- 
        <jvmFlags> 
         <jvmFlag>-Xdebug</jvmFlag> 
         <jvmFlag>-Xrunjdwp:transport=dt_socket,address=8080,server=y,suspend=y</jvmFlag> 
        </jvmFlags> 
        --> 
        <disableUpdateCheck>true</disableUpdateCheck> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.datanucleus</groupId> 
       <artifactId>maven-datanucleus-plugin</artifactId> 
       <version>3.1.1</version> 
       <configuration> 
        <api>JPA</api> 
        <fork>false</fork> 
        <persistenceUnitName>transactions-optional</persistenceUnitName> 
        <verbose>true</verbose> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>process-classes</phase> 
         <goals> 
          <goal>enhance</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Кроме того, если этот проект будет создан плагин appengine eclipse, ничего из этого не происходит, и мне работает код.

Заранее спасибо

+0

Я знаю, что это было некоторое время, но вам удалось получить это работает? –

ответ

2

Я использую App Engine на некоторое время, но в последнее время преобразовал проект для использования Maven и плагин Maven. У меня была очень похожая проблема - похоже, создание файла local_db.bin не является частью запуска.

Однако, когда я попытался прочитать из хранилища данных, в сообщении журнала указано, что, поскольку local_db.bin не найден, это будет создано (извините, у меня нет точного сообщения журнала). Я смог использовать приложение, как правило, после этого, local_db действительно был создан.

Однако я заметил, что он создает файл local_db.bin в каталоге target, а не в каталоге src, поэтому каждый раз, когда я снова начал свой сервер файл local_db.bin получает уничтожены и должен быть повторно -created. Итак, как только local_db.bin будет создан, вы можете найти его в target/your_SNAPSHOT/WEB-INF/appengine-generated и скопировать в свой src/main/webapp/WEB-INF/appengine-generated dirctory. Затем он должен быть включен в ваш каталог target, когда вы выполните сборку.

Обратите внимание, что это имеет некоторые недостатки - любые изменения данных, которые вы делаете в будущих сеансах, не сохраняются, поскольку они хранятся в файле local_db.bin, который уничтожает каждую сборку, но вы можете, по крайней мере, получить базу данных использовать. Надеюсь, я (или кто-то еще здесь) найдет лучший способ заставить это работать.

0

Попробуйте это (сработало для меня): запустите свой код, чтобы он создал файл local_db.bin. Затем, пока веб-сервер все еще работает вручную, добавьте файл local_db.bin в каталог/war/WEB-INF/appengine-generated/в проект eclipse.

3

В системе сборки Android Studio или Gradle вы можете использовать jvmFlags для перезаписи пути по умолчанию. Добавить ниже код для build.gradle

appengine { 
    jvmFlags=['-Ddatastore.backing_store=../../../local_db.bin'] 
} 
+0

не должно быть под appengine {run {jvmFlags ....}}? – OYRM

0

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

Для меня проблема заключалась в том, что сервер хотел сохранить local_db.bin внутри моего/целевого каталога - наиболее волатильного и часто удаляемого каталога в моей среде dev. Каждая отдельная сборка означала базу данных WIPED OUT.

Итак, мне нужно было сообщить серверу приложений GAE, чтобы он сохранил файл где-то еще, что вы, по-видимому, не можете сделать с сервером приложений, созданным плагином maven.

РЕШЕНИЕ

  1. Не использовать Maven плагин (AppEngine-Maven-плагин) для запуска devserver. При этом вы не можете изменить местоположение local_db.bin. Вместо этого загрузите локальный сервер dev с here. В каталоге/bin будет содержаться файл dev_appserver.sh, который вам нужен.
  2. Создайте папку, в которой вы можете содержать базу данных, например,/Users/Myself/путь/к/SDK/APPENGINE_DB

  3. Запустите сервер Dev с этой командой (очевидно, поменять местами пути с вашими собственными):

    cd /Users/Myself/path/to/sdk/appengine-java-sdk-1.9.40/bin 
    sh dev_appserver.sh --generated_dir=/Users/Myself/path/to/sdk/APPENGINE_DB /Users/Myself/Projects/myapp/target/mayapp-1.0 
    
Смежные вопросы