【问题标题】:Can we use hibernate stuff in AWS Lambda Program to connect with relevant database?我们可以在 AWS Lambda 程序中使用休眠的东西来连接相关的数据库吗?
【发布时间】:2016-03-23 11:31:02
【问题描述】:

我已经编写了一个 AWS Lambda 函数(像往常一样实现了 handleRequest,没有 db connect 的东西它可以正常工作),它实际上假设连接到一个亚马逊托管的 Oracle 数据库。

同样,我添加了 Hibernate Util 和相关配置文件以连接到数据库。这样在调用 AWS Lambda 函数时,就会将特定记录插入到数据库中。

但我收到以下错误,这里有什么我遗漏的吗?

{
  "errorMessage": "Could not initialize class com.exercise.HibernateUtil",
  "errorType": "java.lang.NoClassDefFoundError",
  "stackTrace": [
    "com.exercise.CurrentTime.handleRequest(CurrentTime.java:34)",
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:497)"
  ]
}

编辑

我发现没有添加 hibernate.cfg.xml ,后来我添加了所有必需的文件,但最后它给出了以下问题[在我的桌面上一切正常]:

我的问题是,我们是否有任何示例将基于休眠的包上传为 lambda 函数或 AWS lambda 服务意味着最小逻辑功能。

START RequestId: dcece63c-f0e8-11e5-9f50-edb8ba93d932 Version: $LATEST 
First Log :Type:Notification, requestId:dcece63c-f0e8-11e5-9f50-edb8ba93d932, function:simple-lambda-java-exercise, groupName:/aws/lambda/simple-lambda-java-exercise, logStreamName:2016/03/23/[$LATEST]6413c2ef43b14e1aad006f31ca92f260
Second Log :InputMessage :sample message
Maven + Hibernate + Oracle 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found 
java.lang.ExceptionInInitializerError: java.lang.ExceptionInInitializerError java.lang.ExceptionInInitializerError at com.exercise.HibernateUtil.buildSessionFactory(HibernateUtil.java:17) at com.exercise.HibernateUtil.<clinit>(HibernateUtil.java:8) at com.exercise.CurrentTime.handleRequest(CurrentTime.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) Caused by: org.hibernate.HibernateException: /hibernate.cfg.xml not found at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170) at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2176) at org.hibernate.cfg.Configuration.configure(Configuration.java:2157) at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) at com.exercise.HibernateUtil.buildSessionFactory(HibernateUtil.java:13) ... 6 more  
END RequestId: dcece63c-f0e8-11e5-9f50-edb8ba93d932 
REPORT RequestId: dcece63c-f0e8-11e5-9f50-edb8ba93d932  Duration: 1368.02 ms    Billed Duration: 1400 ms Memory Size: 512 MB    Max Memory Used: 43 MB   
START RequestId: e798ae13-f0e8-11e5-a603-69c02723850a Version: $LATEST 
First Log :Type:Notification, requestId:e798ae13-f0e8-11e5-a603-69c02723850a, function:simple-lambda-java-exercise, groupName:/aws/lambda/simple-lambda-java-exercise, logStreamName:2016/03/23/[$LATEST]6413c2ef43b14e1aad006f31ca92f260
Second Log :InputMessage :sample message
Maven + Hibernate + Oracle 
Could not initialize class com.exercise.HibernateUtil: java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError: Could not initialize class com.exercise.HibernateUtil at com.exercise.CurrentTime.handleRequest(CurrentTime.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)  
END RequestId: e798ae13-f0e8-11e5-a603-69c02723850a 
REPORT RequestId: e798ae13-f0e8-11e5-a603-69c02723850a  Duration: 1.26 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 43 MB   
START RequestId: e9116b9c-f0e8-11e5-bccb-4f6d3966e31d Version: $LATEST 
First Log :Type:Notification, requestId:e9116b9c-f0e8-11e5-bccb-4f6d3966e31d, function:simple-lambda-java-exercise, groupName:/aws/lambda/simple-lambda-java-exercise, logStreamName:2016/03/23/[$LATEST]6413c2ef43b14e1aad006f31ca92f260
Second Log :InputMessage :sample message
Maven + Hibernate + Oracle 
Could not initialize class com.exercise.HibernateUtil: java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError: Could not initialize class com.exercise.HibernateUtil at com.exercise.CurrentTime.handleRequest(CurrentTime.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)  
END RequestId: e9116b9c-f0e8-11e5-bccb-4f6d3966e31d 
REPORT RequestId: e9116b9c-f0e8-11e5-bccb-4f6d3966e31d  Duration: 1.25 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 43 MB   
START RequestId: 2d150ad7-f0ec-11e5-afb5-e3e30ad68aea Version: $LATEST 
First Log :Type:Notification, requestId:2d150ad7-f0ec-11e5-afb5-e3e30ad68aea, function:simple-lambda-java-exercise, groupName:/aws/lambda/simple-lambda-java-exercise, logStreamName:2016/03/23/[$LATEST]6413c2ef43b14e1aad006f31ca92f260
Second Log :InputMessage :sample message
Maven + Hibernate + Oracle 
Could not initialize class com.exercise.HibernateUtil: java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError: Could not initialize class com.exercise.HibernateUtil at com.exercise.CurrentTime.handleRequest(CurrentTime.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)  
END RequestId: 2d150ad7-f0ec-11e5-afb5-e3e30ad68aea 
REPORT RequestId: 2d150ad7-f0ec-11e5-afb5-e3e30ad68aea  Duration: 1.24 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 43 MB   

【问题讨论】:

  • 表示您部署的 Lambda 函数中未包含一个类。您没有将该类正确打包到部署中。
  • 我的错,我做了所有事情来拒绝 AWS lambda 函数,因为我是这个领域的新手,所以错过了一些安全组配置和其他一些亚马逊特定的东西,这个问题得到了解决。
  • 你解决了吗?显示您的 pom.xml 示例
  • @Dynamic ,我删除了 Hibernate 的东西,并使用普通的 JDBC 方式将 lambda 函数与 DB 连接起来。关注以下网址:mkyong.com/jdbc/connect-to-oracle-db-via-jdbc-driver-javatutorialspoint.com/jdbc/preparestatement-object-example.htm

标签: hibernate amazon-web-services aws-lambda


【解决方案1】:

您的 jar 中没有包含在运行时需要的库。您将需要包含所有依赖项的 jar。考虑使用 maven shade 插件或 maven 程序集插件并验证您的 jar 是否包含所有必需的依赖项,然后上传此 jar。它应该工作。

稍后您可以考虑将 AWS 层用于依赖​​项,这样您就不必将 jar 与依赖项捆绑在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2021-11-08
    • 1970-01-01
    • 2013-04-18
    相关资源
    最近更新 更多