今天调试一些Web服务客户端代码时(在Java中,使用jax-ws),我遇到了令人兴奋的97个参数的Web服务方法!
我必须创建一个调用此方法的测试用例,我注意到了几件事:
所以这让我思考,您认为方法的最大参数数量是多少?如果您可以更改此Web服务签名,您认为如何改进它?
更新:我对此问题表示赏心悦目.我不是在寻找黑客或变通办法.我正在寻找以角度组件访问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: …
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".
任何的想法?
这似乎不起作用:
<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".
我有一个直接使用log4j的大型Web项目,以及许多第三方库和各种日志库.
我正在考虑将我们自己的代码库迁移到slf4j api,但我不确定这些好处是否足够强大且值得付出努力.目前我知道以下好处:
还有其他好处吗?有什么我不知道的缺点吗?
根据谷歌和其他一些消息来源(例如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的通用替代方案?
我在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连接.
我在java中使用LdapContext来查询LDAP服务器(我认为服务器是Sun服务器版本5.2).我对常规查询使用LdapContext.search(String name,String filter,SearchControls cons)方法,但我不知道如何运行等同于sql的"select count(*)"的查询.任何的想法?性能很重要,所以我不想只运行常规查询并计算结果.
以下代码尝试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) 我对spring的事务管理有以下奇怪的情况:
我有方法A,它调用方法B,它调用方法C,每个方法都在不同的类中.方法B和C都包含事务.两者都使用PROPAGATION_REQUIRED,因此当spring创建两个逻辑事务时,db中有一个物理事务.
现在,在方法CI中抛出一个RuntimeException.这将内部逻辑事务设置为rollbackOnly和物理事务.在方法B中,我知道UnexpectedRollbackException的可能性,所以我不进行正常提交.我从C中捕获异常,然后抛出另一个RuntimeException.
我希望外部RuntimeException将导致回滚到外部事务,但实际行为是这样的:
我找到了一个解决方法,即在抛出异常之前将外部事务主动设置为回滚
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异常或类似的东西
我有一个问题,使用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的已知限制吗?有办法解决吗?
(问题也贴在这里)
我熟悉这种查询:
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运算符.