今天在我们正在多台服务器上部署的应用程序中遇到了这个问题.我正在散列一些字符串以存储在共享键/值存储中.String的.hash方法根据服务器返回不同的整数.有什么想法吗?请注意,我感兴趣的原因 ; 不可能的工作.
例:
server1 $ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
server1 $ irb
irb(main):001:0> "test".hash
=> 4146582576695053125
server2 $ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
server2 $ irb
"test".hash
=> 3479379392688537032
Run Code Online (Sandbox Code Playgroud)
这些机器是EC2实例,具有相同的规格和构建.
我试图在我的控制器中定义的助手上存根方法.例如:
class ApplicationController < ActionController::Base
def current_user
@current_user ||= authenticated_user_method
end
helper_method :current_user
end
module SomeHelper
def do_something
current_user.call_a_method
end
end
Run Code Online (Sandbox Code Playgroud)
在我的Rspec中:
describe SomeHelper
it "why cant i stub a helper method?!" do
helper.stub!(:current_user).and_return(@user)
helper.respond_to?(:current_user).should be_true # Fails
helper.do_something # Fails 'no method current_user'
end
end
Run Code Online (Sandbox Code Playgroud)
在 spec/support/authentication.rb
module RspecAuthentication
def sign_in(user)
controller.stub!(:current_user).and_return(user)
controller.stub!(:authenticate!).and_return(true)
helper.stub(:current_user).and_return(user) if respond_to?(:helper)
end
end
RSpec.configure do |config|
config.include RspecAuthentication, :type => :controller
config.include RspecAuthentication, :type => :view
config.include RspecAuthentication, :type => :helper
end
Run Code Online (Sandbox Code Playgroud)
在使用GWT requestfactory时,我观察到非常糟糕的性能.例如,将我的服务层花费2秒到fullfil的请求将GWT花费20秒来序列化.我的服务正在返回~100将是EntityProxies.这些对象中的每一个都将成为4个ValueProxies和2个EntityProxies(100个根级EntityProxies,400个ValueProxies和200个额外的EntityProxies).但是,我发现在更小的数据集上,性能降低了10倍.
日志片段示例:
D 2012-10-18 22:42:39.546 ServiceLayerDecorator invoke: Inoking service layer took 2265 ms
D 2012-10-18 22:42:58.957 RequestFactoryServlet doPost: Entire request took 22870 ms
Run Code Online (Sandbox Code Playgroud)
我在ServiceLayerDecorator#invoke
方法中添加了一些分析代码,并将整个servlet包装在一个计时器中.我已经自己分析了服务,它确实在~2s内返回结果.
我正在使用GWT 2.4,但已经在GWT 2.5rc1和GWT 2.5rc2上进行了测试.我的后端是GAE,但我不认为这是在这里发挥作用.
我发现这个针对2.4的错误,这似乎是非常相关的.我已经手动应用了这个谷歌群组的补丁而没有任何运气.
我的域名模型如下:
class Trip {
protected Address origin; // becomes ValueProxy
protected Address destination; becomes ValueProxy
protected Set<TripPassenger> tripPassengers; // Set of ValueProxies
}
class TripPassenger {
protected Passenger passenger;
}
class Passenger {
protected Account account;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我正在学习决赛,并且有一些关于RMI和CORBA的问题.这些是从学习指南中获取的讨论问题,因此没有真正的应用背景.
到目前为止我所想到的是TCP将比UDP更可靠,而在RMI/CORBA中,我们需要网络可靠性.我还读到了TCP深深嵌入本机Java网络类的地方.我对此声明没有信心,因为CORBA可以用任何语言实现.
我对这个问题有点困惑,因为我到目前为止所读到的是RMI和CORBA是融合技术,RMI可以访问CORBA对象.我现在如何理解,名称服务似乎非常相似,任何差异都不值得注意.
我没想出任何东西.
我意识到我问了三个不同的问题,但它们似乎都有关系.
我试图确定在弹性搜索中索引文档的最佳方法.我有一个文档Doc,它有一些字段:
Doc
created_at
updated_at
field_a
field_b
Run Code Online (Sandbox Code Playgroud)
但Doc也会有一些特定于个人用户的字段.例如,field_x对于用户1将具有值"A",并且field_x将具有用于用户2的值"B".对于每个文档,将存在非常有限数量的用户(通常为2,最多~10).当用户搜索field_x时,他们必须搜索属于它们的值.我一直在探索ES中的嵌套类型.
Doc
created_at
updated_at
field_x: [{
user: 1
field_x: A
},{
user: 2
field_x: B
}]
Run Code Online (Sandbox Code Playgroud)
当用户1在field_x上搜索值"A"时,此文档应该会受到影响.但是,当用户1按值'B'搜索时,不应该这样.
但是,根据文档:
索引在doc中多次出现的内部对象时的一个问题是将发生"交叉对象"搜索匹配
有没有办法避免嵌套类型的这种行为或我应该探索另一种类型?
有关此类查询执行情况的其他信息非常有价值.仅仅从阅读文档开始,它就表明嵌套查询在性能方面与常规查询相比并没有太大差异.如果有人真正体验过这一点,我很乐意听到.
当我跑步时,mvn test
我收到以下异常.我已尝试升级和降低我的Xmx和Xss JVM设置,并在ulimit下突破所有限制.大约有1300个测试,最后200个测试总是因此异常而失败.自己运行这些测试允许它们通过.相同的测试在我的ubuntu盒子上传递.我在mac上运行测试时收到此异常.我很确定它是一个环境问题,但我已经调整了我所知道的每一个设置,绝对没有运气.
我使用的是mvn 2.1和Java 6.我的测试框架是junit 4.8.
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:658)
at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:197)
at com.google.appengine.tools.development.ApiProxyLocalImpl$PrivilegedApiAction.run(ApiProxyLocalImpl.java:184)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.ApiProxyLocalImpl.doAsyncCall(ApiProxyLocalImpl.java:172)
at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:138)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个ValueProxy
包含用户正在执行的搜索的一些基本信息.出于某种原因,GWT希望它是一个EntityProxy,但我不明白为什么(这个类也不是有意义的EntityProxy).
// FilterProxy extends ValueProxy
@ProxyFor(DayFilter.class)
public interface DayFilterProxy extends FilterProxy {
void setFilterValue(Date day);
Date getFilterValue();
}
public class DayFilter extends Filter {
public DayFilter() {
setOperator(FilterOperator.GREATER_THAN_OR_EQUAL);
setField("dateRequested");
}
public void setFilterValue(Date date) {
this.value = date;
}
public Date getFilterValue() {
return value;
}
}
public interface PaginationRequest<T> extends RequestContext {
Request<List<T>> paginate(int offset, int limit, String sortColumn,
boolean isSortAscending, List<FilterProxy> filters);
Request<Integer> count(List<FilterProxy> filters);
}
@Service(value=TripService.class, locator=SchedgyServiceLocator.class)
public interface TripRequest extends PaginationRequest<TripProxy> {
Request<TripProxy> save(TripProxy …
Run Code Online (Sandbox Code Playgroud) 我的GWT应用程序加载时首先要做的是通过RequestFactory从服务器请求当前登录用户.这会阻止,因为我需要用户的属性才能知道如何继续.这只需要<500毫秒,但在此期间应用程序被阻止真的让我感到很恼火.生成jsp时,我已经在服务器上安装了User,那么为什么不将序列化的User添加到jsp中并完全消除这个请求呢?
我有两个问题阻止我这样做:
我还没有找到一个做好#1的好方法.这个逻辑似乎埋没在ServiceLayerDecorator中,没有一种简单的方法可以隔离?我可能在这里错了.
第二个似乎通过ProxySerializer更容易但是当我在服务器上时如何获得requestfactory?你不能GWT.create
在服务器上打电话.
我一直在研究AutoBeans,但这并没有处理上面的#1.我的UserProxy引用了我想要维护的其他EntityProxy的集合.
在谷歌应用引擎上监控我的Java应用程序的最佳方法是什么?我意识到错误被记录下来,我可以在管理控制台中检查它们,但我想要更加积极主动.我希望在发生错误时立即得到通知.
我知道有时客户端会在请求无法连接,超时等时返回0状态代码显示HTTP请求,但我从未见过服务器将0记录为发送回客户端的内容.
我正在运行Rails 4.2,ruby 2.2.x API.前几天我正在分析我们的日志,并注意到我们的Rails API正在响应HTTP状态代码为0的非平凡数量的请求.我一直无法弄清楚原因.
在某些情况下,似乎请求永远不会进入rails应用程序.我只看到我认为由机架记录的日志消息,其中包含返回的请求路径和状态.在其他情况下,我可以看到我们从应用程序控制器记录的早期日志消息之一.
有没有人见过这样的行为?如果不开始修改rails提供的标准机架中间件,我不确定如何进一步调试.我自己无法重现这种情况; 我只在日志中偶尔看到这个.
关于我们的堆栈的更多信息:
我意识到可能无法回答这里到底发生了什么,所以我希望能找到关于如何最好地解决这个问题的建议.
我正在尝试使用Blobstore API在GAE中上传文件.我在本地运行GAE服务器时遇到以下异常(开发模式):
WARNING: /_ah/upload/ag10cmlwc2NoZWR1bGVychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YFQw
java.lang.IllegalStateException: Must call one of set*BlobStorage() first.
at com.google.appengine.api.blobstore.dev.BlobStorageFactory.getBlobStorage(BlobStorageFactory.java:24)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.init(UploadBlobServlet.java:88)
at javax.servlet.GenericServlet.init(GenericServlet.java:215)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
Run Code Online (Sandbox Code Playgroud)
我正在运行GAE 1.3.5,但是自GAE 1.3.0(Blobstore的第一个版本)以来已经尝试过所有版本.我正在使用GAE maven插件:http://code.google.com/p/maven-gae-plugin/
我的表单是用GWT 2.0.4编写的.目前,表单只是一个带有提交的文件输入字段.
我在提交表格后收到上述例外情况.我能够从Blobstore服务成功检索上传URL.
在GAE上一切正常.我已经验证在本地开发环境中没有输入任何内容(通过开发管理控制台).我正在上传一张~1Kb的CSV,但尝试了其他文件类型/大小也没有成功(相同的文件适用于GAE prod).
gwt google-app-engine blobstore maven-gae-plugin google-cloud-datastore
我正在使用GWT 2.4编辑器并请求工厂框架.我有一个模型Trip,它有一个地址'origin'和一个Address'destination'.通过UI创建Trip时,会自动创建这两个地址并将其分配给Trip.用户填写详细信息并保存.出于某种原因,我在尝试持久化到服务器时遇到"autobean冻结错误".此代码在GWT 2.3中有效,我无法切换回来.我希望它不是GWT 2.4中的错误.以下是我正在做的一些示例代码:
RequestContext request = requestFactory.request();
TripProxy trip = request.create(TripProxy.class);
trip.setOrigin(request.create(AddressProxy.class));
trip.setDestination(request.create(AddressProxy.class));
driver.edit(trip, request);
this.trip = trip;
// … on save button clicked (different method)
RequestContext request = driver.flush();
request.save(trip).with(driver.getPaths()).fire(someReceiverImpl);
Run Code Online (Sandbox Code Playgroud)
结果是:
java.lang.IllegalStateException: The AutoBean has been frozen
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.checkFrozen(AbstractAutoBean.java:195)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:270)
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
调用fire
成功完成但在requestfactory内的某处,抛出上述错误.奇怪的是,实体保存在服务器上,但不强制执行验证.当我简化模型并删除地址关联时,验证和保存工作.我的主要问题是autobean冻结错误; 验证的东西是次要的.
编辑:经过进一步的调查,我发现实体正在使服务器正常,并按预期持续存在.它返回时抛出上述异常.AddressProxy是一个ValueProxy,它看起来像RF不喜欢Trip带回这些关联.返回null'修复'问题,但这显然不会长期工作.