小编Yon*_*oni的帖子

当一个方法有太多参数?

今天调试一些Web服务客户端代码时(在Java中,使用jax-ws),我遇到了令人兴奋的97个参数的Web服务方法!

我必须创建一个调用此方法的测试用例,我注意到了几件事:

  • 代码辅助/悬停不能很好地扩展.我正在使用Eclipse,并且该方法的工具提示与屏幕一样宽,并且跨越多行.
  • 我不得不从之前的xml捕获中复制参数值,并且几乎不可能记住"我在哪里" - 当我将光标放在逗号之后并且在键入一些值之前,我经常得到错误的数据类型 - 我输入了整数而不是字符串,反之亦然.
  • 即使在我写完所有参数之后,我仍然遇到了一些错误并且签名不匹配.不幸的是,Eclipse将整条线标记为红色,因为有错误,所以找到错误的地方需要更多的时间:(

所以这让我思考,您认为方法的最大参数数量是多少?如果您可以更改此Web服务签名,您认为如何改进它?

language-agnostic ide parameters

39
推荐指数
5
解决办法
3万
查看次数

$ postLink的角度组件/指令运行得太早

更新:我对此问题表示赏心悦目.我不是在寻找黑客或变通办法.我正在寻找以角度组件访问dom的官方方式,并解释为什么我看到的行为($ postLink运行到早期)似乎与官方文档相矛盾.
官方文件说明(这里):

$ postLink() - 在此控制器的元素及其子元素已被链接之后调用.与post-link函数类似,此钩子可用于设置DOM事件处理程序并执行直接DOM操作

原始问题:我在这里有一个问题的例子 - > http://plnkr.co/edit/rMm9FOwImFRziNG4o0sg?p=preview

我正在使用一个角度组件,我想修改后期链接功能中的dom,但它不起作用,似乎该功能运行得太早,在所有角度处理后模板实际准备好在dom之前.

在html页面中,我有这个:

<my-grid grid-id="'foo'"></my-grid>
Run Code Online (Sandbox Code Playgroud)

该组件定义为:

appModule.component('myGrid',{
    controller: gridController,
    bindings: {
        "gridId": "<",
    },
    templateUrl: 'gridTemplate'
});
Run Code Online (Sandbox Code Playgroud)

在组件模板中,我有这个:

<table id='{{$ctrl.gridId}}'>
...
Run Code Online (Sandbox Code Playgroud)

(绑定本身有效,毫无疑问.最终,在html中,表的id是'foo',如预期的那样).

在控制器中,我有这样的事情:

function gridController($scope, $compile, $attrs) {
    console.log ("grid id is: " + this.gridId); // 'foo'

    this.$postLink = function() {
        var elem = document.getElementById(this.gridId);
        // do something with elem, but elem is null
    }
}
Run Code Online (Sandbox Code Playgroud)

我在调试时看到的是,当执行$ postLink函数时,该表位于dom中,但其id属性仍然{{$ctrl.gridId}}foo,而是document.getElementById()什么也找不到.这似乎与文档形成鲜明对比.
我错过了什么?是否有不同的方法来访问组件中的dom?

更新2: …

javascript angularjs

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

solrj api用于部分文档更新

Solr 4 beta已经发布,GA版本将很快推出.部分文档更新已经存在了一段时间,如下所述:http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/

但是,我还没想出如何用solrj api做到这一点.

有谁知道solrj是否可行?或者solrj是不是没有达到这个功能的速度?

更新:正如我在邮件列表中所描述的那样(请参阅此处的回复),我发现在solrj api中,SolrInputField的值可以是一个映射 - 它不必是一个简单的标量值.如果是地图,solrj会update在字段的xml元素中添加一个附加属性.例如,这段代码:

SolrInputDocument doc = new SolrInputDocument();
Map<String, String> partialUpdate = new HashMap<String, String>();
partialUpdate.put("set", "foo");
doc.addField("id", "test_123");
doc.addField("description", partialUpdate);
Run Code Online (Sandbox Code Playgroud)

产生这个文件:

<doc boost="1.0">
    <field name="id">test_123</field>
    <field name="description" update="set">foo</field>
</doc>
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我为这个附加属性使用了"set"这个词,但它不起作用.Solr不像我预期的那样更新字段.根据此链接:http: //solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ 有效值为"set"和"add".

任何的想法?

solr solrj

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

如何在ant属性中添加换行符

这似乎不起作用:

<property name="foo" value="\n bar \n"/>
Run Code Online (Sandbox Code Playgroud)

我在电子邮件正文中使用属性值(以纯文本形式发送):

<mail ...>
  <message>some text${foo}</message>
Run Code Online (Sandbox Code Playgroud)

我在电子邮件输出中得到文字"\n".

java ant

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

AntCall和Ant任务之间有什么区别?

除了Ant任务在不同的构建文件上运行之外,AntCall任务(此处描述)和Ant任务(此处描述)之间是否存在实质性差异?

ant

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

将项目从log4j迁移到slf4j + log4j

我有一个直接使用log4j的大型Web项目,以及许多第三方库和各种日志库.

  • 我们的代码库 - 直接使用log4j.
  • Hibernate - 使用slf4j和slf4j-log4j绑定.
  • Spring - 使用commons-loggings.因此,它使用jcl-over-slf4j桥接api,slf4j本身和slf4j-log4j绑定.
  • 其他众多的库,使用commons loggings或log4j.

我正在考虑将我们自己的代码库迁移到slf4j api,但我不确定这些好处是否足够强大且值得付出努力.目前我知道以下好处:

  • 清洁api.
  • 性能改进 - 即使用参数化日志记录方法的能力.
  • 能够在将来轻松切换到回溯(目前无法进行回退).
  • 不需要额外的罐子,因为我已经拥有它们.

还有其他好处吗?有什么我不知道的缺点吗?

java logging log4j slf4j

12
推荐指数
2
解决办法
3667
查看次数

在没有Oracle依赖的Java中使用Oracle引用游标

根据谷歌和其他一些消息来源(例如http://www.enterprisedt.com/publications/oracle/result_set.html),如果我想调用一个返回引用游标的存储函数,我需要写一些像这是为了访问ResultSet:

String query = "begin ? := sp_get_stocks(?); end;";
CallableStatement stmt = conn.prepareCall(query);
// register the type of the out param - an Oracle specific type
stmt.registerOutParameter(1, OracleTypes.CURSOR);
// set the in param
stmt.setFloat(2, price);
// execute and retrieve the result set
stmt.execute();
ResultSet rs = (ResultSet)stmt.getObject(1);
Run Code Online (Sandbox Code Playgroud)

无论如何都没有在Oracle上引入编译时依赖性.是否有OracleTypes.CURSOR的通用替代方案?

java oracle

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

如何更改oracle jdbc客户端的默认nls_date_format

我在Oracle 10.2 XE上定义了全局nls_date_format,如下所示:

alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
Run Code Online (Sandbox Code Playgroud)

在Windows上连接时,客户端会使用会话特定格式覆盖它,因此我需要在每个会话开始时运行此行:

alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
Run Code Online (Sandbox Code Playgroud)

但是,我有一些我无法更改的自定义代码(jdbc代码,使用ojdbc14.jar),因此我在接收连接时无法执行此行.有没有办法为所有jdbc连接更改nls_date_format的默认值?也许在连接字符串中添加一些东西,或者我可以使用的一些环境变量?

顺便说一句,sqlplus和sqldeveloper也用自己的格式覆盖服务器的格式,但是我发现了如何更改它们的默认值,所以问题只在于jdbc连接.

oracle jdbc

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

LdapContext,怎么做select count(*)

我在java中使用LdapContext来查询LDAP服务器(我认为服务器是Sun服务器版本5.2).我对常规查询使用LdapContext.search(String name,String filter,SearchControls cons)方法,但我不知道如何运行等同于sql的"select count(*)"的查询.任何的想法?性能很重要,所以我不想只运行常规查询并计算结果.

java ldap

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

插入失败后恢复Hibernate会话状态

以下代码尝试Item使用Spring + Hibernate 将对象插入到数据库中.Item具有Integer id字段作为主键,以及name受独特约束限制的列(简化示例).
我知道项目的id为空(项目是暂时的)但是由于名称字段上的唯一约束,插入可能仍然失败.

try {
  getHibernateTemplate().save(myItem);
  getHibernateTemplate().flush(); // exception thrown here if the name is not unique
}
catch (DataIntegrityViolationException e) {
  Item itemFromDb = (Item) getHibernateTemplate()
    .find("from Item item where item.name = ?",
           myItem.getName()).get(0);
  //
  // copy some properties from myItem to itemFromDb
  //
  getHibernateTemplate.update (itemFromDb)
}
Run Code Online (Sandbox Code Playgroud)

我需要这个代码在多个项目的循环中运行,所有这些都在一个事务中,这就是为什么我试图在插入失败时发出更新的原因.

但是,在插入失败后,hibernate会话处于奇怪的状态,当我发出select语句从db获取项时,抛出原始异常.

我尝试使用session.evict()插入失败后,但无济于事.任何的想法?

这是我在选择失败后在控制台中看到的内容.Hibernate在select语句上失败,但仍然打印有关前一个insert语句的信息.

WARN  [http-8080-1] hibernate.util.JDBCExceptionReporter (JDBCExceptionReporter.java:77) - SQL Error: 2627, SQLState: 23000
ERROR [http-8080-1] hibernate.util.JDBCExceptionReporter (JDBCExceptionReporter.java:78) - Violation of …
Run Code Online (Sandbox Code Playgroud)

java hibernate

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

UnexpectedRollbackException会覆盖我自己的异常

我对spring的事务管理有以下奇怪的情况:

我有方法A,它调用方法B,它调用方法C,每个方法都在不同的类中.方法B和C都包含事务.两者都使用PROPAGATION_REQUIRED,因此当spring创建两个逻辑事务时,db中有一个物理事务.

现在,在方法CI中抛出一个RuntimeException.这将内部逻辑事务设置为rollbackOnly和物理事务.在方法B中,我知道UnexpectedRollbackException的可能性,所以我不进行正常提交.我从C中捕获异常,然后抛出另一个RuntimeException.

我希望外部RuntimeException将导致回滚到外部事务,但实际行为是这样的:

  • 外部事务似乎尝试提交,或者至少检查其状态,然后它抛出UnexpectedRollbackException,因为物理事务已经标记为rollbackOnly.
  • 抛出该异常之前,它会向日志打印另一个异常,指出"由提交异常覆盖的应用程序异常".因此,调用者A接收UnexpectedRollbackException,而不是B抛出的异常.

我找到了一个解决方法,即在抛出异常之前将外部事务主动设置为回滚

public ModelAndView methodB(HttpServletRequest req, HttpServletResponse resp) {
  try{
    other.methodC();
  } catch (RuntimeException e){
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    throw new RuntimeException ("outer exception");
  }
  return handleGetRequest(req, resp);
}
Run Code Online (Sandbox Code Playgroud)

但是,这种解决方法强烈地将代码与事务api结合在一起,我想避免这种情况.有什么建议?

ps这两个事务都是为了回滚运行时异常.我没有定义任何rollbackFor异常或类似的东西

java spring transactions

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

带有嵌入式Web服务器的PhantomJS仅使用一个CPU

我有一个问题,使用PhantomJS与Web服务器模块以多线程方式,并发请求.
我使用PhantomJS 2.0创建highstock在服务器端的Java图形,如解释在这里(和代码在这里).它运行良好,当测试几种尺寸的图形时,我得到的结果非常一致,创建图形大约需要0.4秒.

我链接的代码最初由highcharts团队发布,它也在http://export.highcharts.com/的导出服务器中使用.为了支持并发请求,它保留了一个产生的PhantomJS进程池,基本上它的模型是每个并发请求一个phantomjs实例.

我看到webserver模块最多支持10个并发请求(这里有解释),所以我想我可以利用它来保存池中较少数量的PhantomJS进程.但是,当我尝试使用更多线程时,我经历了线性减速,就像PhantomJS只使用一个CPU一样.这个减速如下所示(对于一个PhantomJS实例):

1个客户端线程,平均请求时间0.44秒.
2个客户端线程,平均请求时间0.76秒.
4个客户端线程,平均请求时间1.5秒.

这是PhantomJS的已知限制吗?有办法解决吗?

(问题也贴在这里)

javascript mongoose highcharts phantomjs

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

在SQL查询中%%%的含义?

我熟悉这种查询:

select * from tableA where foo like '%bar%'
Run Code Online (Sandbox Code Playgroud)

但今天我在一些遗留代码中遇到了三个相邻的百分号,如下所示:

select * from tableA where foo like '%%%'
Run Code Online (Sandbox Code Playgroud)

当foo是字符串类型(varchar等)时,这个查询似乎在mssql和oracle上都有效,但是当foo是数字时它会失败.

知道这是什么意思吗?

编辑:抱歉原始问题中的拼写错误,查询使用LIKE运算符.

sql

4
推荐指数
2
解决办法
8421
查看次数