小编jab*_*lab的帖子

基于Go插件的系统的惯用法

我有一个Go项目我想开源,但有些元素不适合OSS,例如公司特定的逻辑等.

我构思了以下方法:

  • interfaces在核心存储库中定义.
  • 然后,插件可以是独立的存储库,它们type实现interface在核心中定义的s.这允许插件容纳在完全独立的模块中,因此具有自己的CI作业等.
  • 插件通过符号链接编译成最终的二进制文件.

这将导致目录结构如下所示:

|- $GOPATH
  |- src
    |- github.com
      |- jabclab
        |- core-system
          |- plugins <-----|
      |- xxx               | 
        |- plugin-a ------>| ln -s
      |- yyy               |  
        |- plugin-b ------>|
Run Code Online (Sandbox Code Playgroud)

使用以下示例工作流程:

$ go get git@github.com:jabclab/core-system.git
$ go get git@github.com:xxx/plugin-a.git
$ go get git@github.com:yyy/plugin-b.git
$ cd $GOPATH/src/github.com
$ ln -s ./xxx/plugin-a/*.go ./jabclab/core-system/plugins
$ ln -s ./yyy/plugin-b/*.go ./jabclab/core-system/plugins
$ cd jabclab/core-system
$ go build
Run Code Online (Sandbox Code Playgroud)

我不确定的一个问题是如何使插件中定义的类型在运行时在核心中可用.我宁愿不使用,reflect但现在想不出更好的方法.如果我在一个回购中执行代码,我会使用类似的东西:

package plugins

type Plugin interface {
  Exec(chan<- …
Run Code Online (Sandbox Code Playgroud)

go

10
推荐指数
1
解决办法
820
查看次数

如何在Postgres中调试ShareLock

我在Postgres服务器日志中看到了以下几种情况:

LOG:  process x still waiting for ShareLock on transaction y after 1000.109 ms 
DETAIL:  Process holding the lock: z. Wait queue: x.
CONTEXT:  while inserting index tuple (a,b) in relation "my_test_table"
    SQL function "my_test_function" statement 1 
...
LOG:  process x acquired ShareLock on transaction y after 1013.664 ms
CONTEXT:  while inserting index tuple (a,b) in relation "my_test_table"
Run Code Online (Sandbox Code Playgroud)

我正在运行Postgres 9.5.3.另外我在Heroku上运行所以我无法访问细粒度的超级用户调试工具.

我想知道如何最好地调试这样的问题给定这些约束和事实上每个单独的锁是相对短暂的(通常1000-2000ms).

我尝试过的事情:

  • 监控pg_locks(并加入pg_class上下文).
  • 调查pageinspect.
  • 手动和本地复制本地pgbench都有超级用户权限.到目前为止,我无法在本地复制该问题(我怀疑由于数据集要小得多,但我无法确定).

值得一提的是,CPU利用率出现高(的平均负载> 1),当我看到这些问题,所以它可能有什么不对上述本身和我看到它的系统资源不足是可用的结果.我仍然想了解如何最好地调试它,所以我可以理解究竟发生了什么.

postgresql

9
推荐指数
1
解决办法
3539
查看次数

尝试在Oracle 11.2.0.2.0(64位)中获取连接时出现java.lang.ArithmeticException

我目前正在使用Oracle中的Java存储过程,并且在尝试在Java代码中获取连接时会看到一些奇怪的行为.

我的Java被打包成一个jar文件,然后使用loadjava命令行实用程序部署到Oracle中.package然后在数据库中创建A ,该数据库通过调用规范将指定Java类中的每个方法映射到PL/SQL函数.

我正在使用的一些专栏是CLOBs.在Java中,我尝试将其值CLOB(在调用规范中映射为oracle.sql.CLOB)提取到String:

private static String getStringFromCLOB(CLOB clob) throws SQLException {
    long length = clob.length();
    return clob.getSubString(1, (int) length);
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我在SQL*Plus中显示以下堆栈跟踪:

java.lang.ArithmeticException: / by zero
    at oracle.jdbc.driver.T2SConnection.<init>(T2SConnection.java:107)
    at oracle.jdbc.driver.T2SDriverExtension.getConnection(T2SDriverExtension.java:31)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:481)
    at oracle.jdbc.driver.OracleDriver.defaultConnection(OracleDriver.java:505)
    at oracle.sql.DatumWithConnection.getPhysicalConnection(DatumWithConnection.java:53)
    at oracle.sql.DatumWithConnection.getInternalConnection(DatumWithConnection.java:177)
    at oracle.sql.CLOB.getDBAccess(CLOB.java:1383)
    at oracle.sql.CLOB.length(CLOB.java:197)
Run Code Online (Sandbox Code Playgroud)

在我刚刚看到这样的消息之前,我Exception用一个包装了违规方法的内容,try / catch所以我可以将完整的堆栈跟踪转储到System.out.

值得注意的是,我已经将其用于Oracle 11.2.0.1.0(32位),但它不适用于Oracle 11.2.0.2.0(64位).

我还有其他Java支持的PL/SQL function工作没有问题.只有尝试使连接失败的人才会这样做.

我已经看了一下<ORACLE_HOME>\jdbc\lib,虽然这两个发行版的名称相同,但这两个发行版似乎有所不同.目录中的jar(大小为11.2.0.1.0,显示大小为11.2.0.2.0):

  • ojdbc5.jar (1,950KB | 1,983KB)
  • ojdbc5_g.jar (3,010KB …

java oracle oracle11g java-stored-procedures

7
推荐指数
2
解决办法
2615
查看次数

在JSF 1.2中通过EL调用带参数的方法

我正在使用数据表,每行我有两个按钮,一个是"编辑"和一个"删除".

如果所讨论的行符合某个条件,我需要这些按钮是只读的,即禁用.我在JSF 2中看到,可以将参数传递给方法调用.在JSF 1.2中有什么相同的东西吗?

理想情况下我想要的东西(循环变量是循环,还有另一个bean,helper,它包含我想调用的方法):

<h:commandButton value="Edit"
                   disabled="#{helper.isEditable(loop.id)}" />
Run Code Online (Sandbox Code Playgroud)

在这种情况下,向bean 添加isEditable属性并不具有语义意义,并且在bean周围创建包装器对象是不切实际的.

提前致谢.

jsf el jsf-1.2

6
推荐指数
1
解决办法
7185
查看次数

使用Javascript获取上一个日期

我希望使用javascript获得六个月之前的日期.

我使用以下方法.

var curr = date.getTime(); // i will get current date in milli seconds
var prev_six_months_date = curr - (6* 30 * 24 * 60* 60*1000);
var d = new Date();
d.setTime(prev_six_months_date);
Run Code Online (Sandbox Code Playgroud)

这是正确的方式还是更好的方式来获得过去六个月的约会.

如果这个问题得到解决,我想应用这个逻辑来获取过去2个月和过去10年等先前的日期.

如果任何身体给jquery解决方案也对我很有帮助.提前致谢.

javascript jquery

4
推荐指数
1
解决办法
1万
查看次数

定期运行Oracle查询的最佳方法

我需要知道在Oracle上定期运行查询的最佳实践是什么(我使用的是11g).

在我的特定用例中,我DUE_DATE在表中指定了一个x.我想要做的是每天00:01运行一个查询来计算某些记录的状态(OK,Warn,Critical或Overdue).特定记录的状态是从今天的日期(其中"今天"是查询运行的那天)相对于x.DUE_DATE和某些用户指定的值来计算的,这些值表示"警告"和"严重"(包含在表中y).

  • 好的 - > today < x.DUE_DATE - y.WARN
  • 警告 - > today >= x.DUE_DATE - y.WARN and today < x.DUE_DATE - y.CRITICAL
  • 关键 - > today >= x.DUE_DATE - y.CRITICAL and today <= x.DUE_DATE
  • 逾期 - > today > x.DUE_DATE

定期运行此查询的最佳方法是什么?我找到了以下选项但不确定哪个最适合我的用例:

我知道我可以根据每个用户请求动态计算状态,但由于停顿只会每天更改一次,我认为进行计算会更有效,并且每天也会缓存一次后续结果.

提前谢谢了.

oracle oracle11g

1
推荐指数
1
解决办法
1万
查看次数