小编Pau*_*lor的帖子

在Java 6中实现多生产者/消费者模式的最佳方式

所以我有多个步骤阶段1 - >阶段2 - >阶段3 - >阶段4因此在某些情况下,生产者将是消费者,并且在每个阶段有多个生产者/消费者使用多个cpus.在相关的情况下,一些分组将错过步骤,即直接从阶段1到阶段4.

所以我将为每个阶段创建一个类,与前一个阶段共享一个BlockingQueue,但我也读过ExecutorService就像一个Producer/Consumer模式一样,所以我试着用最好的抽象.

然而,在我看来,使用Executor,生成器位在它们被提交给执行程序之前完成,顺序的方式不是我想要的.

有人可以澄清吗?

java concurrency consumer producer

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

需要发送UDP数据包并在Java中接收响应

我必须发送UDP数据包并从UDP服务器获取响应.我虽然UDP类似于Java中的java.net.DatagramPacket,但是DatagramPacket的文档似乎是你发送了一个数据包但没有得到任何回报,这是正确的使用方法还是我应该使用java. net.Socket

java sockets udp datagram

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

从JAXB和Jersey生成更多json,如json

我使用JAXB创建的数据模型,我可以直接生成XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0">
<artist-list offset="0" count="1">
   <artist ext:score="100" type="Group" id="4302e264-1cf0-4d1f-aca7-2a6f89e34b36">       
       <name>Farming Incident</name>
       <ipi-list>
          <ipi>1001</ipi>
       </ipi-list>
   </artist>
</artist-list>
</metadata>
Run Code Online (Sandbox Code Playgroud)

并且在Jersey的帮助下也使用Natural表示法生成JSon

"artist-list":
    {"offset":0,
     "count":1,
     "artist":[
         {"score":"100",
          "type":"Group",
          "id":"4302e264-1cf0-4d1faca7-2a6f89e34b36",
          "name":"Farming Incident",
          "ipi-list":
              {
                  "ipi":[
                       "1001"
                    ]
             }
          }]
     }
Run Code Online (Sandbox Code Playgroud)

Xml很好,json几乎没有问题,因为Json直接支持具有像ipi-list和artist-list这样的元素的数组似乎不是json,是否有可能从我的模型生成更多类似json的json?

请求附加信息 json是使用JAXB和Jersey 从这个MMD模式http://svn.musicbrainz.org/mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd生成的 ,请参阅 http://svn.musicbrainz.org/search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.javahttp://svn.musicbrainz.org/search_server/trunk /servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java

关键是我希望能够从一个模式生成Json和XML,但是显然Json看起来不对,所以我正在寻找一种方法来改进它(我真的没有任何经验我自己)

java json jaxb jersey

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

生成json时可以让MOXy将字符串转换为布尔值吗

对象模型的元素结尾为String类型

public class LifeSpan {

protected String begin;
protected String end;
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String ended;
....
Run Code Online (Sandbox Code Playgroud)

但实际上它只是一个布尔值,(我不知道XmlJavaTypeAdapter批注的意义)

当输出为XML时

<life-span><begin>1999-04</begin><ended>true</ended></life-span>
Run Code Online (Sandbox Code Playgroud)

所以定义为布尔值还是字符串都没有关系

但是JSON输出是

"life-span" : {
         "begin" : "1999-04",
         "ended" : "true"
      },
Run Code Online (Sandbox Code Playgroud)

当我需要它时

 "life-span" : {
         "begin" : "1999-04",
         "ended" : true
      },
Run Code Online (Sandbox Code Playgroud)

我无法真正更改对象模型,因此以为我可以映射到oxml.xml文件中的正确类型,并尝试了

<java-type name="LifeSpan">
            <java-attributes>
                <xml-element java-attribute="ended"  type="boolean"/>
            </java-attributes>
        </java-type>
Run Code Online (Sandbox Code Playgroud)

但它不是那样。

java json jaxb eclipselink moxy

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

OSX Mountain Lion上的Help Indexer.app在哪里?

OSX Mountain Lion上的Help Indexer.app在哪里,我需要这个来创建帮助手册.我安装了Xcode但无法在任何地方找到它,在线帮助说它应该在/ Developer/Utilities中,但我没有Developer文件夹,并且可以找到要安装的Developer应用程序.

macos osx-mountain-lion

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

从远程计算机访问时,为什么request.getRemoteAddr().equals("127.0.0.1")

我有一个在Tomcat中运行的Java servlet应用程序,出于安全原因,我只希望能够从机器本身(或者可能是我自己的PC)运行一个管理命令.因此,为了强制执行此操作,我检查了我收到的HttpServletRequest的远程地址,但它始终返回127.0.0.1,即使请求不是来自本地主机

为什么这样,我可以修复它还是有另一种方法只从服务器运行我的管理命令.

java security servlets httprequest

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

如何在 Java 1.7 中将文件路径转换为有效的文件路径

使用 Java 1.6 文件路径可以由用户输入,然后我应用各种正则表达式来删除对平台无效的字符(例如 '?' 在 Windows 上无效),并检查路径长度以确保我们最终得到一个有效的文件路径在尝试创建文件路径之前为操作系统。

但是有两个问题:

  1. 确定每个平台有效或无效的方法很痛苦。
  2. 我根据平台的默认文件系统做出假设,但当然 OSX 系统可能正在写入非 Mac 文件系统,例如 FAT32,在这种情况下,这些检查将无效。

所以我希望在 Java 7 中使用 NIO2 会有更好的方法,但还没有找到解决方案,有吗?

java filesystems nio nio2

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

你需要在Hibernate表的@id列上创建索引吗?

我是否需要为hibernate表的主键添加索引anoatation以获得不错的性能,我假设用@id标记一个字段意味着创建了一个索引

@Id
private String guid;
Run Code Online (Sandbox Code Playgroud)

但我没有注意到在生成的ddl中创建的任何内容

但是如果我添加了一个@index注释

@Id
@org.hibernate.annotations.Index(name = "IDX_GUID")
private String guid;
Run Code Online (Sandbox Code Playgroud)

然后我注意到在DDL中创建了一个索引.

所以我认为我需要为每个表执行此操作,但我的一部分认为这是非常必要的,因为hibernate肯定希望为主键创建索引作为起点?

java database indexing hibernate hbm2ddl

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

你如何在Lucene 4.1中索引和搜索数字

在我的3.6代码中,我将数字字段添加到我的索引中,如下所示:

public void addNumericField(IndexField field, Integer value) {
        addField(field, NumericUtils.intToPrefixCoded(value));
    }
Run Code Online (Sandbox Code Playgroud)

但是现在你需要传递一个BytesRef参数,并且完全不清楚你对下一个值的意图是什么,所以我改为(正在进行中)

public void addNumericField(IndexField field, Integer value) {
        FieldType ft = new FieldType();
        ft.setStored(true);
        ft.setIndexed(true);
        ft.setNumericType(FieldType.NumericType.INT);
        doc.add(new IntField(field.getName(), value, ft));
    }
Run Code Online (Sandbox Code Playgroud)

看起来更整洁

在3.6中我还添加了覆盖queryparser以使其适用于数值范围搜索,

package org.musicbrainz.search.servlet;

import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TermRangeQuery;
import org.apache.lucene.util.NumericUtils;
import org.musicbrainz.search.LuceneVersion;
import org.musicbrainz.search.index.LabelIndexField;
import org.musicbrainz.search.servlet.mmd1.LabelType;

public class LabelQueryParser extends MultiFieldQueryParser {

    public LabelQueryParser(java.lang.String[] strings, org.apache.lucene.analysis.Analyzer analyzer)
    {
        super(LuceneVersion.LUCENE_VERSION, strings, analyzer);
    }

     protected Query newTermQuery(Term term) {

        if(
                (term.field() == LabelIndexField.CODE.getName())
                ){ …
Run Code Online (Sandbox Code Playgroud)

java lucene search

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

如何使用ScriptEngine从Javascript输出到Java

通过这个简单的AppleScript,我可以列出iTunes中所有歌曲的名称

tell application "iTunes"
    set mainLibrary to library playlist 1
    repeat with nexttrack in (get every track of mainLibrary)
        try
            name of nexttrack
        end try
    end repeat
end tell
Run Code Online (Sandbox Code Playgroud)

然后我使用ScriptEngine将其作为Java 7代码运行,但是很明显如何获取脚本的结果,在这种情况下只是最后一个轨道的名称.

    StringBuilder script =new StringBuilder();
    script.append("tell application \"iTunes\"\n");
    script.append("set mainLibrary to library playlist 1\n");
    script.append("repeat with nexttrack in (get every track of mainLibrary)\n");
    script.append("try\n");
    script.append("name of nexttrack\n");
    script.append("end try\n");
    script.append("end repeat\n");
    script.append("end tell\n");
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("AppleScript");
    System.out.println(engine.eval(script.toString()));

How do can I capture the name …
Run Code Online (Sandbox Code Playgroud)

java scripting applescript scriptengine

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