小编Pat*_*k M的帖子

Guice提供商是否应该使用@Singleton注释昂贵的成员实例?

应该吉斯提供商与被标注@Singleton?我的理由:如果Provider正在向其他Singleton类提供一个对象,并且该对象本身的创建成本相对较高,那么使用在其@Inject标记的构造函数中构造昂贵对象的Singleton Provider,将其存储为一个成员,只是在getter中返回已保存的全局变量?像这样的东西:

@Singleton
public class MyProvider extends Provider<ExpensiveObject> {
    private ExpensiveObject obj;

    @Inject
    public MyProvider() {
        /* Create the expensive object here, set it to this.obj */
    }

    @Override
    public ExpensiveObject get() {
        return obj;
    }
}
Run Code Online (Sandbox Code Playgroud)


更新

让我在这里澄清一点.这不是关于我是否应该使用@Singleton.in(Singleton.class).这必须通过创建对象的"缓存"做更多事情.

假设对象创建需要完成多个RPC,例如反序列化JSON或发出HTTP请求.这可能需要一段时间.如果我要使用这个Provider多次注入类,那么只创建一次这样的对象是不是有意义呢?

另请注意,我必须能够使用Provider,因为我需要能够注入Provider.

java singleton dependency-injection guice

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

如何使用Chef懒惰地评估任意变量

我正在编写一个Chef配方来安装我们的应用程序代码并执行它.配方需要特别关注此代码最终的目录(用于运行模板,设置日志转发等).因此,目录本身会在不同的食谱中出现在很多地方.

我试图获取/定义一个变量,所以我可以在我的资源块中使用字符串插值重新使用它.这非常简单:

home = node['etc']['passwd'][node['nodejs']['user']]['dir']
Run Code Online (Sandbox Code Playgroud)

使用示例用法,npm install同时告诉它在主目录中插入repo下载,如下所示:

execute "npm install" do
  command "npm install #{prefix}#{app} --prefix #{home}"
end
Run Code Online (Sandbox Code Playgroud)

除了定义home变量的第一个块将在编译时运行.在一个新的服务器上,我的nodejs用户帐户可能还不存在,这是一个问题,给出了一个

NoMethodError undefined method '[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

我有一些解决方法,但我想要一个特定的解决方案,使home变量只在配方执行时获取,而不是编译时.


解决方法1

动态评估ruby块内的home变量,如下所示:

ruby_block "fetch home dir" do
  block do
    home = node['etc']['passwd'][node['nodejs']['user']]['dir']
  end
end
Run Code Online (Sandbox Code Playgroud)

这似乎没有实际工作,当你尝试做类似这样的事情时,为Chef :: Resource :: Directory提供一个NoMethodError未定义方法的主页:

directory ".npm" do
  path "#{home}/.npm"
end
Run Code Online (Sandbox Code Playgroud)

我觉得我必须在这里做错事.

解决方法2

懒惰地评估每个需要它的资源的参数.所以改为:

directory ".npm" do
  path lazy "#{node['etc']['passwd'][node['nodejs']['user']]['dir']}/.npm"
end
Run Code Online (Sandbox Code Playgroud)

但是,只需要维护一行代码,将其存储在变量中并完成它就会非常棒.

解决方法3

在编译时创建用户.这当然有效,使用此处链接通知技巧,如下所示:

u = …
Run Code Online (Sandbox Code Playgroud)

ruby variables chef-infra chef-recipe

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

没有日历的日期验证插件

我们正在推出一个新的内容管理系统,并以一种允许营销部门完全控制所显示的内容,以什么顺序等方式重做我们的用户输入表单.我真的想要使用jquery ui datepicker插件,因为我们基本上可以插入在其验证规则中直接进入CMS,允许完全可定制的控制,无需任何dev输入.我已经展示了它,并展示了配置是多么容易.

我们目前的表格使用三种不同的下拉菜单,分别用于日,月和年.有些人并没有因为远离这种外观而感到沮丧.我们都见过他们,其中一个人:

<select>
    <option value="">-- Month --</option>
    <option value="1">Jan</option>
    <option value="2">Feb</option>
    <option value="3">etc.</option>
</select>
<select>
    <option value="">-- Day --</option>
    <option value="1">1</option>
    <option value="2">etc.</option>
    <option value="31">31</option>
</select>
<select>
    <option value="">-- Year --</option>
    <option value="etc.">etc.</option>                        
</select>
Run Code Online (Sandbox Code Playgroud)

毫无疑问,我可以实现这一点.我不想做的是编写和维护一个javascript库,将规则从CMS转换为js输入 - 必须有更好的方法.

我已经向他们展示了jquery ui插件中的月/年下拉选择器:http://jqueryui.com/demos/datepicker/#dropdown-month-year但他们仍然没有购买它.关于展示本月日期......利益相关者的事情.

我想知道的是,是否存在一个可配置的插件,可以在可配置性中匹配/竞争jquery UI插件,并提供3选择的形状因子.我特别要利用的mindate,maxdate(对于不同的日期范围为不同的输入类型)和altformat选项(自动翻译,我们的后端预计提交格式).对不起,如果我的挫折感即将到来......并感谢您的投入.

编辑:记得在堆栈交换上有一个单独的UI/UX区域.我很抱歉,如果这更适合那里 - 我还没有帐户.

javascript jquery jquery-ui date datepicker

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

是否有排序算法尊重最终位置限制并在O(n log n)时间内运行?

我正在寻找一种排序算法,它可以为每个元素1提供最小和最大范围.问题域是一种推荐引擎,它将一组业务规则(限制)与推荐得分(值)相结合.如果我们有推荐(例如特殊产品或交易)或我们想要出现在列表顶部附近的公告(例如"这是非常重要的,请记住验证您的电子邮件地址以参与即将到来的促销活动!")或在列表底部附近(例如"如果您喜欢这些建议,请点击此处获取更多信息......"),他们将在某些位置限制的情况下进行策划.例如,这应该始终位于顶部位置,这些位置应位于前10位或中间5位等.此策展步骤提前完成并在给定时间段内保持固定,并且出于商业原因必须保持非常灵活.

请不要质疑业务目的,UI或输入验证.我只是想在我给出的约束中实现算法.请将此视为学术问题.我将努力提供严格的问题陈述,非常欢迎对问题的所有其他方面的反馈.


因此,如果我们对chars 进行排序,我们的数据将具有结构

struct {
  char value;
  Integer minPosition;
  Integer maxPosition;
}
Run Code Online (Sandbox Code Playgroud)

Where minPositionmaxPosition可能为null(不受限制).如果在所有位置限制为空的算法上调用它,或者所有minPositions都为0或更小并且所有maxPositions都等于或大于列表的大小,则输出将按char升序排列.

该算法只会重新安排两个元素,如果minPositionmaxPosition这两个元素不会被他们的新位置被侵犯.基于插入的算法将项目提升到列表顶部并重新排序其余部分具有明显的问题,即每次迭代后必须重新验证每个后续元素; 在我的脑海中,排除了这些算法具有O(n 3)复杂度,但如果没有考虑相反的证据,我将不排除这些算法.

在输出列表中,当且仅当位置约束集指示它时,某些元素的值才会出现故障.这些输出仍然有效.

  • 一个有效的邮件列表上的所有元素都在不与他们发生冲突的约束位置的任何名单.
  • 一个最佳的名单是不能重新排序以不违反一个或多个位置约束更符合自然秩序的列表.无效列表永远不是最佳的.我没有一个严格的定义,我可以说明在一个或另一个订单之间"更紧密地匹配".但是,我认为让直觉引导你,或者选择类似于距离度量的东西是相当容易的.

    如果多个输入具有相同的值,则可能存在多个最佳排序.你可以提出一个论点,上面的段落因此是不正确的,因为任何一个都可以重新排序到另一个而不违反约束,因此两者都不是最佳的.但是,任何严格的距离函数都会将这些列表视为相同,与自然顺序的距离相同,因此允许重新排序相同的元素(因为它是无操作).

    我会将这些输出称为正确的排序顺序,它遵循位置约束,但是几位评论员指出我们并没有真正返回一个排序列表,所以让我们坚持使用'Optimal'.

例如,以下是输入列表(<char>(<minPosition>:<maxPosition>)其中,Z(1:1)表示Z必须位于列表的前面,并M(-:-)指示M可能位于最终列表中的任何位置和自然顺序(仅按值排序)是A...M...Z)和他们的最佳订单.

Input order
A(1:1) D(-:-) C(-:-) E(-:-) B(-:-)
Optimal order
A      B      C      D      E …
Run Code Online (Sandbox Code Playgroud)

sorting algorithm big-o

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

有没有办法知道在Jersey @__Param fromString处理程序中正在解析哪个参数?

我正在使用的API决定接受UUID作为Base32编码的字符串,而不是UUID.fromString()期望的标准十六进制,破折号分隔格式.这意味着我不能简单地写@QueryParam UUID myUuid为方法参数,因为转换会失败.

我正在解决这个问题,通过使用不同的fromString转换器编写自定义对象以与Jersey @QueryString@FormParam注释一起使用.我希望能够访问fromString方法中的转换上下文,以便我可以提供更好的错误消息.现在,我所能做的就是以下几点:

public static Base32UUID fromString(String uuidString) {
    final UUID uuid = UUIDUtils.fromBase32(uuidString, false);
    if (null == uuid) {
        throw new InvalidParametersException(ImmutableList.of("Invalid uuid: " + uuidString));
    }
    return new Base32UUID(uuid);
}
Run Code Online (Sandbox Code Playgroud)

我希望能够公开哪个参数具有无效的UUID,因此我记录的异常和返回的用户错误非常清楚.理想情况下,我的转换方法会有一个额外的参数用于细节,如下所示:

public static Base32UUID fromString(
    String uuidString,
    String parameterName // New parameter?
) {
    final UUID uuid = UUIDUtils.fromBase32(uuidString, false);
    if (null == uuid) {
        throw new InvalidParametersException(ImmutableList.of("Invalid uuid: " + uuidString
            + …
Run Code Online (Sandbox Code Playgroud)

java error-handling annotations jax-rs jersey

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

ERR_HTTP_HEADERS_SENT:将标头发送到客户端后无法设置标头

当与Passport.js,Express和Mongoose一起使用时,我在NodeJS中遇到这个奇怪的问题。基本上,即使我发送的标题不止一个,我也会收到一条错误消息:“在将标题发送到客户端后无法设置标题”。

我读过其他文章,也尝试过,但没有一个起作用。

我已经解决了github问题,但似乎找不到解决方案。我遇到这样的问题,当我发送多个响应头时会触发此错误,但事实是我没有发送多个头。好像很奇怪

这是我的堆栈跟踪:

(节点:9236)DeprecationWarning:不建议使用当前的URL字符串解析器,并将在以后的版本中将其删除。要使用新的解析器,请将选项{useNewUrlParser:true}传递给MongoClient.connect。

服务器运行在端口5000
MongoDB的关联错误
[ERR_HTTP_HEADERS_SENT]:无法设置头后,他们被发送到客户端
  在validateHeader(_http_outgoing.js:503:11)
   在ServerResponse.setHeader(_http_outgoing.js:510:3)
   在ServerResponse.header (/Users/lourdesroashan/code/github/devlog/node_modules/express/lib/response.js:767:10)
   在ServerResponse.json(/ Users / lourdesroashan / code / github / devlog / node_modules / express / lib / response。 js:264:10
   )
   位于<anonymous> 上的Profile.findOne.then.profile(/Users/lourdesroashan/code/github/devlog/routes/api/profile.js:27:30)

这是我的服务器代码:

router.get("/userprofile", passport.authenticate('jwt', { session: false }), (req, res) => {

  Profile.findOne({ user: req.user.id }).then(profile => {
    if (!profile) {
      return res.status(404).json({ error: "No Profile Found" });
    }
    else {
      res.json(profile);
    }
  }).catch(err => {
    console.log(err);
  })
});
Run Code Online (Sandbox Code Playgroud)

我知道错误的含义,但是据我所知,我认为我没有发送多个标头,甚至通过console.log检查是否仅运行了一个块。

提前非常感谢您!:)

完整代码位于:https …

mongoose node.js express express-jwt passport.js

10
推荐指数
6
解决办法
3万
查看次数

Spring Unit测试JPA存储库

我是Spring框架的新手.我需要为JPA存储库编写单元测试.我正在尝试简单的存储库saveAndFlush()方法.但我的存储库中没有任何东西存 这是我的源代码:

TestContext.class

@Configuration 
@PropertySource("classpath:log4j.properties") 
public class TestContext {

    @Bean
    public RoleService roleService() {
        return Mockito.mock(RoleService.class);
    }

    @Bean
    public RightService RightService() {
        return Mockito.mock(RightService.class);
    }

    @Bean
    public RoleRepository RoleRepository() {
        return Mockito.mock(RoleRepository.class); 
    }
}
Run Code Online (Sandbox Code Playgroud)

RoleServiceTest.class

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class})
@WebAppConfiguration
public class RoleServiceTest {

    @Autowired
    private RoleRepository roleRepository;

    @Test
    public void TestServices() throws Exception {
        RoleDetails first = new RoleDetails();
        first.setId("1");
        first.setDescription("First Description");
        first.setName("First");
        roleRepository.saveAndFlush(new RoleEntity(first));
        roleRepository.save(new RoleEntity(first));
        List<RoleEntity> roles = new ArrayList<RoleEntity>();
        roles = roleRepository.findAll();
        System.out.println(roles);
        assertEquals(1, …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing jpa spring-mvc

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

在Guava Cache对象上启用统计信息会有什么性能损失?

显然,正确的答案是"基准测试并找出答案",但本着互联网的精神,我希望有人能为我完成这项工作.

我非常喜欢Guava用于Web服务的缓存库.然而,他们的文档在这一点上相当模糊.

recordStats
public CacheBuilder<K,V> recordStats()
启用CacheStats缓存操作期间的累积.如果不这样Cache.stats(),所有统计数据都将返回零.请注意,记录统计信息需要对每个操作执行簿记,因此会对高速缓存操作造成性能损失.

从:
12.0(之前,统计数据收集是自动的)

来自JavaDocs CacheBuilder.recordStats().

我很好奇性能惩罚的严重程度是否由任何人记录,基准或停球.我认为它应该是非常小的,每次操作的纳秒数量级.缓存操作本身已经同步 - 读取不会锁定或阻塞,但写入会获取锁定 - 因此不需要额外的锁定或并发来修改统计信息.这应该限制为每个缓存访问的一些额外的增量操作.

它的另一面可能Cache.stats()是被称为惩罚.我计划通过Codahale MetricsRegistry和Graphite服务器将统计信息暴露给持久记录.净效应是定期检索统计数据,因此如果检索有任何阻塞行为,那可能会很糟糕.

java performance caching guava

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

在HttpClient 4.0中设置HttpParams对象

我正在创建新的HttpClient,通过在其构造函数中传递ThreadSafeClientConnManager和HttpParams,但它总是抛出错误的请求错误.为了弄清楚出了什么问题我调试了它但都是徒劳的.为我提供一些解决方案这是我的代码块

sc.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
sc.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));

HttpParams basicParams = new BasicHttpParams();
ThreadSafeClientConnManager connmgr = new ThreadSafeClientConnManager(basicParams, sc);
ConnManagerParams.setMaxConnectionsPerRoute(
    basicParams,
    // if we have more than 5 concurrent leads, good problem to have
    new ConnPerRoute() {
        public int getMaxForRoute(HttpRoute httproute) {
        return 5;
    }
}); 

g_client = new DefaultHttpClient(connmgr, basicParams);

// It's a lead, be forgiving with timeout
g_client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
g_client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
ConnManagerParams.setTimeout(basicParams, 2000);
Run Code Online (Sandbox Code Playgroud)

当我g_client.execute(postMethod);在我的代码中调用时,显示400状态代码表示我的请求出错.如果我在DefaultHttpClient构造函数中传递null

g_client = new DefaultHttpClient(connmgr, null);
Run Code Online (Sandbox Code Playgroud)

客户端正在成功执行,但由于我需要基本的param集,所以它不正确maxconnectionperroute.我在这里粘贴了令人怀疑的代码.请看看并帮助我.我被困在这里.

我使用的是HttpClient 4.0版本.

java apache-httpclient-4.x

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

调试Elastic Beanstalk Docker运行失败?

我是EB和AWS的新手,我的docker图像构建正常,但无法在Elastic Beanstalk上运行.我怀疑他们没有正确连接到数据库,但是,当我从命令行运行"eb logs"时,我没有得到任何有用的东西.以下是错误:

{
  "status": "FAILURE",
  "api_version": "1.0",
  "results": [
    {
      "status": "FAILURE",
      "msg": "(TRUNCATED)...rrun.aws.json: No such file or directory
        73927c49adff622a1a229d9369bdd80674d96d20f3eb99a9cdea786f4411a368
        Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Wed May 20 17:15:02 UTC 2015:.
        Check snapshot logs for details.
        Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh failed.
        For more detail, check /var/log/eb-activity.log using console or EB CLI",
      "returncode": 1,
      "events": [
        {
          "msg": "Successfully pulled node:0.12.2-slim",
          "severity": "TRACE",
          "timestamp": 1432142064
        },
        {
          "msg": "Successfully built aws_beanstalk/staging-app",
          "severity": "TRACE",
          "timestamp": 1432142094
        }, …
Run Code Online (Sandbox Code Playgroud)

docker amazon-elastic-beanstalk

6
推荐指数
2
解决办法
1153
查看次数