tutorial pricing nodejs español dynamodb aws amazon-web-services amazon-dynamodb dynamo-local

amazon web services - pricing - Amazon DynamoDB Local: error, excepción o error desconocido



dynamodb tutorial español (1)

Hay al menos 2 problemas con DynamoDBLocal. Resuelva ambos, y estará ejecutando DynamoDB integrado.

Primero, el parámetro -port no funciona correctamente. Entonces Jetty no está configurado en el puerto que esperas. En su lugar, algo como el puerto 51205 (¿o aleatorio?) Se configura como el oyente Jetty como puerto predeterminado.

Aquí está mi código de cómo inicio el servidor evitando el análisis integrado de la línea de comandos, que de todos modos es mejor ... Después de iniciar el servidor de esta manera, http: // localhost: 19444 / shell funciona, así que Jetty está bien. Pero entonces puede tener otro problema con Sqlite4java (ver después del bloque de código).

NOTA: el código es Kotlin, pero Java sería muy similar. También tengo SLF4j configurado y no dejo que las clases ServerRunner interrumpan el registro, así que esta es una forma doblemente mejor de iniciar el servidor y lo que ServerRunner hace internamente.

class TestAccountManager { companion object { private val localDbPort = 19444 private lateinit var localDb: DynamoDBProxyServer private lateinit var dbClient: AmazonDynamoDBClient @BeforeClass @JvmStatic fun setup() { System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.Slf4jLog") localDb = DynamoDBProxyServer(localDbPort, LocalDynamoDBServerHandler( LocalDynamoDBRequestHandler(0, true, null, true, true), null) ) localDb.start() val auth = BasicAWSCredentials("fakeKey", "fakeSecret") dbClient = AmazonDynamoDBClient(auth) dbClient.signerRegionOverride = "us-east-1" dbClient.setEndpoint("http://localhost:$localDbPort") } @AfterClass @JvmStatic fun teardown() { localDb.stop() } } @Test fun testSomething() { dbClient.listTables().tableNames.forEach { println(it) } } }

Una vez que tenga este código, ahora se está ejecutando en el puerto esperado.

Ahora es probable que tenga el segundo error, como que Sqlite4java no encuentre su binario correcto para su plataforma. Para algunas versiones de Mac OSX generará un nombre de archivo binario que en realidad no existe. Y DynamoDBLocal oculta todo el registro de Sqlite4java por la fuerza (imposible anularlo), por lo que no lo verá.

Puede probar la biblioteca sqlite descargando una distribución , descomprimiendo y luego ejecutando:

java -jar sqlite4java-1.0.392.jar -d

E informará qué intenta cargar y cómo falló o no. Solo necesita encontrar ese JAR en su sistema desde donde Gradle, Maven o usted lo haya colocado. Mi salida con error fue:

sqlite4java 392 160212:002049.833 FINE [sqlite] Internal: loading library 160212:002049.834 FINE [sqlite] Internal: java.library.path=/Users/jminard/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 160212:002049.834 FINE [sqlite] Internal: sqlite4java.library.path=null 160212:002049.834 FINE [sqlite] Internal: cwd=/Users/jminard/DEV/Collokia/repos/collokia-web-back/. 160212:002049.834 FINE [sqlite] Internal: default path=/Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d 160212:002049.834 FINE [sqlite] Internal: forced path=null 160212:002049.834 FINE [sqlite] Internal: os.name=mac os x; os=osx 160212:002049.835 FINE [sqlite] Internal: os.arch=x86_64 160212:002049.835 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-x86_64-1.0.392.dylib 160212:002049.835 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-amd64-1.0.392.dylib 160212:002049.835 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-1.0.392.dylib 160212:002049.835 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-1.0.392.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-x86_64-d-1.0.392.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-amd64-d-1.0.392.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-d-1.0.392.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-d-1.0.392.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-x86_64.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-amd64.dylib 160212:002049.836 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx.dylib 160212:002049.837 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java.dylib 160212:002049.837 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-x86_64-d.dylib 160212:002049.837 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-amd64-d.dylib 160212:002049.837 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-osx-d.dylib 160212:002049.837 FINE [sqlite] Internal: checking /Users/jminard/.gradle/caches/modules-2/files-2.1/com.almworks.sqlite4java/sqlite4java/1.0.392/d6234e08ff4e1607ff5321da2579571f05ff778d/libsqlite4java-d.dylib 160212:002049.837 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64-1.0.392 160212:002049.838 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-1.0.392 in java.library.path 160212:002049.838 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64-1.0.392 160212:002049.839 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64-1.0.392 in java.library.path 160212:002049.839 FINE [sqlite] Internal: trying to load sqlite4java-osx-1.0.392 160212:002049.840 FINE [sqlite] Internal: cannot load sqlite4java-osx-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-1.0.392 in java.library.path 160212:002049.840 FINE [sqlite] Internal: trying to load sqlite4java-1.0.392 160212:002049.841 FINE [sqlite] Internal: cannot load sqlite4java-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-1.0.392 in java.library.path 160212:002049.841 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64-d-1.0.392 160212:002049.842 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64-d-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-d-1.0.392 in java.library.path 160212:002049.842 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64-d-1.0.392 160212:002049.842 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64-d-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64-d-1.0.392 in java.library.path 160212:002049.843 FINE [sqlite] Internal: trying to load sqlite4java-osx-d-1.0.392 160212:002049.843 FINE [sqlite] Internal: cannot load sqlite4java-osx-d-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-d-1.0.392 in java.library.path 160212:002049.843 FINE [sqlite] Internal: trying to load sqlite4java-d-1.0.392 160212:002049.844 FINE [sqlite] Internal: cannot load sqlite4java-d-1.0.392: java.lang.UnsatisfiedLinkError: no sqlite4java-d-1.0.392 in java.library.path 160212:002049.844 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64 160212:002049.845 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path 160212:002049.845 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64 160212:002049.845 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64 in java.library.path 160212:002049.845 FINE [sqlite] Internal: trying to load sqlite4java-osx 160212:002049.846 FINE [sqlite] Internal: cannot load sqlite4java-osx: java.lang.UnsatisfiedLinkError: no sqlite4java-osx in java.library.path 160212:002049.846 FINE [sqlite] Internal: trying to load sqlite4java 160212:002049.847 FINE [sqlite] Internal: cannot load sqlite4java: java.lang.UnsatisfiedLinkError: no sqlite4java in java.library.path 160212:002049.847 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64-d 160212:002049.848 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-d in java.library.path 160212:002049.848 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64-d 160212:002049.849 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64-d in java.library.path 160212:002049.849 FINE [sqlite] Internal: trying to load sqlite4java-osx-d 160212:002049.849 FINE [sqlite] Internal: cannot load sqlite4java-osx-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-d in java.library.path 160212:002049.850 FINE [sqlite] Internal: trying to load sqlite4java-d 160212:002049.850 FINE [sqlite] Internal: cannot load sqlite4java-d: java.lang.UnsatisfiedLinkError: no sqlite4java-d in java.library.path Error: cannot load SQLite java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-1.0.392 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1122) at com.almworks.sqlite4java.Internal.tryLoadFromSystemPath(Internal.java:352) at com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:124) at com.almworks.sqlite4java.SQLite.main(SQLite.java:368)

Si tiene un error sobre la carga dinámica de la biblioteca, lea estos para saber cómo resolverlo:

La única respuesta que parece funcionar de manera confiable es:

De estos hago algo así como la primera opción, y agrego las bibliotecas al proyecto y me aseguro de que la compilación agregue una -Djava.library.path=./lib/sqlite4java donde las bibliotecas dinámicas se descomprimen. Para realizar pruebas más resistentes, puede establecer java.library.path programáticamente en su código utilizando este truco (de lo contrario, se ignorará cuando se establezca en el código): http://blog.cedarsoft.com/2010/11/setting-java-library -path-programmatically /

Es malo que DynamoDBLocal oculte todos los errores de Sqlite, por lo que debe depurar para encontrar fallas silenciosas. La biblioteca está llena de cosas que ajustan los niveles de registro y dificultan la depuración, ya que rompen la capacidad de ver errores. Por ejemplo, cada vez que se abre un archivo SqlLite (clase SQLiteDBAccess ):

LocalDBUtils.setLog4jToUtilsLogging("com.almworks.sqlite4java"); LocalDBUtils.setLog4jToUtilsLogging("com.almworks.sqlite4java.Internal"); java.util.logging.Logger.getLogger("com.almworks.sqlite4java").setLevel(Level.OFF); java.util.logging.Logger.getLogger("com.almworks.sqlite4java.Internal").setLevel(Level.OFF);

Notas de cierre: Estoy buscando alternativas, esta no es la mejor construcción del planeta, mirando el código de DynamoDbLocal y las decisiones tomadas me dan muy poca confianza en ello. Alternador o Jcabi - Dynamo Mock son los siguientes en mi lista.

Tengo que probar una aplicación que depende en gran medida de DynamoDB de Amazon. Quiero que las pruebas se puedan ejecutar por separado, por lo que opté por DynamoDB Local .jar . Soy consciente de la actualización reciente, lo que nos permite ejecutar esto sin una llamada de comando externo bash. Sin embargo, cuando intento ejecutar el ejemplo que se especificó aquí , obtengo el siguiente stacktrace:

Exception in thread "main" com.amazonaws.AmazonServiceException: The request processing has failed because of an unknown error, exception or failure. (Service: AmazonDynamoDBv2; Status Code: 500; Error Code: InternalFailure; Request ID: cab7a550-aaa6-4bfe-a591-0b255481cc14) at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1275) at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:873) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:576) at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:362) at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:328) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:307) at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1805) at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1223) at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1235)

Este es el código que intento ejecutar:

public static void main( String[] args ) throws Exception { AmazonDynamoDB dynamodb = null; DynamoDBProxyServer server = null; final String[] localArgs = { "-inMemory", "-port", "13005" }; server = ServerRunner.createServerFromCommandLineArgs(localArgs); server.start(); BasicAWSCredentials auth = new BasicAWSCredentials("key", "secret"); dynamodb = new AmazonDynamoDBClient(auth); dynamodb.setEndpoint("http://127.0.0.1:13005"); // use the DynamoDB API over HTTP System.out.println(dynamodb.listTables()); // Stop the DynamoDB Local endpoint if(server != null) { server.stop(); } }

He observado que si trato de ejecutarlo completamente desde el programa Java, es cuando se lanza la excepción y el puerto especificado ya no está disponible (se produce un error que indica que se ha tomado este puerto). Pero si inicio DynamoDB Local desde un símbolo del sistema y uso el programa Java como un cliente de acceso solamente, entonces todo funciona bien. ¿Alguna sugerencia?