首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用aws Lambda的activejdbc

使用aws Lambda的activejdbc
EN

Stack Overflow用户
提问于 2021-07-18 23:11:10
回答 1查看 44关注 0票数 0

我无法让activejdbc与aws serverless一起工作。

我添加了连接参数作为ENV变量,Base.findAll()可以工作,但我无法让模型工作,我得到以下错误

代码语言:javascript
复制
"org.javalite.activejdbc.InitException: you are trying to work with models, but no models are found. Maybe you have no models in project, or you did not instrument the models. It is expected that you have a file activejdbc_models.properties on classpath\n\tat org.javalite.activejdb

我检查了我的jar文件,它确实有一个'activejdbc_models.properties‘文件,并且工具似乎已经起作用了。

这条路是不是一条死胡同?我应该直接转向直接jdbc吗?或者我可以让actveJDBC与lambda一起工作。

Update在我的一个模型类Address上运行了javap,下面是输出

代码语言:javascript
复制
Compiled from "Address.java"
public class com.kwiqhealth.models.Address extends org.javalite.activejdbc.Model {
  public com.kwiqhealth.models.Address();
  public static org.javalite.activejdbc.MetaModel getMetaModel();
  public static org.javalite.activejdbc.MetaModel metaModel();
  public static <T extends org.javalite.activejdbc.Model> T findOrCreateIt(java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> T findOrInit(java.lang.Object...);
  public static java.util.Set<java.lang.String> attributeNames();
  public static java.util.List<org.javalite.activejdbc.associations.Association> associations();
  public static int delete(java.lang.String, java.lang.Object...);
  public static boolean exists(java.lang.Object);
  public static int deleteAll();
  public static int update(java.lang.String, java.lang.String, java.lang.Object...);
  public static int updateAll(java.lang.String, java.lang.Object...);
  protected static org.javalite.validation.NumericValidationBuilder validateNumericalityOf(java.lang.String...);
  public static org.javalite.validation.ValidationBuilder addValidator(org.javalite.validation.Validator);
  protected static void addScope(java.lang.String, java.lang.String);
  public static void removeValidator(org.javalite.validation.Validator);
  public static java.util.List<org.javalite.validation.Validator> getValidators(java.lang.Class<? extends org.javalite.activejdbc.Model>);
  protected static org.javalite.validation.ValidationBuilder validateRegexpOf(java.lang.String, java.lang.String);
  protected static org.javalite.validation.ValidationBuilder validateEmailOf(java.lang.String);
  protected static org.javalite.validation.ValidationBuilder validateRange(java.lang.String, java.lang.Number, java.lang.Number);
  protected static org.javalite.validation.ValidationBuilder validatePresenceOf(java.lang.String...);
  protected static org.javalite.validation.ValidationBuilder validateWith(org.javalite.validation.Validator);
  protected static void convertWith(org.javalite.conversion.Converter, java.lang.String...);
  protected static void dateFormat(java.lang.String, java.lang.String...);
  protected static void dateFormat(java.text.DateFormat, java.lang.String...);
  protected static void timestampFormat(java.lang.String, java.lang.String...);
  protected static void timestampFormat(java.text.DateFormat, java.lang.String...);
  protected static void blankToNull(java.lang.String...);
  protected static void zeroToNull(java.lang.String...);
  public static boolean belongsTo(java.lang.Class<? extends org.javalite.activejdbc.Model>);
  public static void callbackWith(org.javalite.activejdbc.CallbackListener...);
  public static <T extends org.javalite.activejdbc.Model> T create(java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> T createIt(java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> T findById(java.lang.Object);
  public static <T extends org.javalite.activejdbc.Model> T findByCompositeKeys(java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.LazyList<T> where(java.lang.String, java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.ScopeBuilder<T> scopes(java.lang.String...);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.ScopeBuilder<T> scope(java.lang.String);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.LazyList<T> find(java.lang.String, java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> T findFirst(java.lang.String, java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> T first(java.lang.String, java.lang.Object...);
  public static void findWith(org.javalite.activejdbc.ModelListener, java.lang.String, java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.LazyList<T> findBySQL(java.lang.String, java.lang.Object...);
  public static <T extends org.javalite.activejdbc.Model> org.javalite.activejdbc.LazyList<T> findAll();
  public static java.lang.Long count();
  public static java.lang.Long count(java.lang.String, java.lang.Object...);
  public static java.lang.String getTableName();
  public static boolean isCached();
  public static void purgeCache();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 02:52:40

好的,考虑到javap命令的输出,您的类已经被检测了。但是,您的构建仍然有一些问题,因为您似乎正在向AWS Lambda发布非指令插入的类,因此出现了您的异常。我创建了一个非常简单的测试来在Lambda中运行ActiveJDBC:

代码语言:javascript
复制
  @Override
  public String handleRequest(Map<String,String> event, Context context)  {

    context.getLogger().log("Starting to connect...");
    Base.open("org.mariadb.jdbc.Driver", "jdbc:mysql://database-1.xxxxx.us-east-2.rds.amazonaws.com/test", "admin", "xcxxxx");
    context.getLogger().log("connected!!");
//    Base.exec("create database test");
//    Base.exec("CREATE TABLE people (id  int(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(56) NOT NULL, last_name VARCHAR(56), dob DATE, graduation_date DATE, created_at DATETIME, updated_at DATETIME) ENGINE=InnoDB DEFAULT CHARSET=utf8");

    context.getLogger().log("Found records  in table: " + Base.count("people"));
    context.getLogger().log("Found records  in table (with model): " + Person.count());
    Base.close();
    context.getLogger().log("Executed and  closed");
    return "Lambda done executing..." ;
  }

当我执行Lambda时,CloudWatch提供了以下日志:

执行模型后记录的行。如您所见,JavaLite ActiveJDBC和AWS Lambda之间不存在冲突。你需要调查你的构建中的一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68430418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档