我有两个类,Person和Company,来自另一个类Contact.它们在两个表(Person和Company)中以多态形式表示.简化的类看起来像这样:
public abstract class Contact {
Integer id;
public abstract String getDisplayName();
}
public class Person extends Contact {
String firstName;
String lastName;
public String getDisplayName() {
return firstName + " " + lastName;
}
}
public class Company extends Contact {
String name;
public String getDisplayName() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要查询查找包含某个字符串的displayName的所有联系人.我不能使用displayName进行查询,因为它不是任何一个表的一部分.有关如何进行此查询的任何想法?
目前我正在编写基于Vaadin的Web应用程序.我对学习周期以及UI的设计方式非常满意.
一般来说,Vaadin的优点是:
缺点是:
我对社区的问题是:
什么Web框架最符合以下要求:
合理的方法组合也适合.请提供"Hello World"应用程序的链接,该链接基于您建议的框架实现.我正在考虑Apache Wicket/Echo2/Tapestry/Click/GWT,但是如果没有玩几个月就很难做出选择(希望没有让人失望).
我面临以下问题.当Jackson序列化程序传递一个用于序列化的包装原语时,该原语按原样序列化,例如:
objectMapper = new ObjectMapper();
StringWriter w = new StringWriter();
objectMapper.writeValue(w, Integer.valueOf(10));
System.out.println(w.toString());
Run Code Online (Sandbox Code Playgroud)
产生10输出.但是,10它不是一个有效的JSON(根据jsonlint),应该用方括号([10]因此它将是一个单元素数组)或大括号({value:10}因此它将是一个具有虚拟属性的对象)包装.该问题影响的数字,java.lang.String,java.util.Date,...
我的问题是:如何让杰克逊进行包装?Jackson不应该总是生成有效的JSON吗?
我已经SerializationConfig.Feature.WRAP_ROOT_VALUE启用了杰克逊的行为分析:它不能像我预期的那样工作.现在,基元被序列化为有效的JSON({"Integer":10}),但"正常"的Java bean也被包装,这是不希望的({"MyBean":{"field":value, ...}}而不是{"field":value, ...}).
如果有人可以建议如何定制杰克逊,也许可以使用自定义序列化器.难点在于有必要区分根原语包装器(需要包装)和bean原始属性(不需要包装).
为了使故事完整:Jackson序列化程序被用作Spring MVC的消息转换器,我怀疑编写一个钩子来拦截原语序列化(它不会调用Jackson但只会"[" + String.toString(obj) + "]"在必要时返回)相当容易.所以我更喜欢调优杰克逊的解决方案.
我有dunno.spec以下结构的文件:
Name: dunno
Vesion: 1.0
...
BuildArch: x86_64
%description
...
%package common
Summary: Shared files
BuildArch: noarch
Run Code Online (Sandbox Code Playgroud)
我想在运行后rpmbuild -ba dunno.spec我应该得到两个二进制包:
dunno-1.0.x86_64.rpmdunno-common-1.0.noarch.rpm但我得到:
dunno-1.0.x86_64.rpmdunno-common-1.0.x86_64.rpm如果我BuildArch: x86_64从规范中删除该行,那么我得到
dunno-1.0.noarch.rpmdunno-common-1.0.noarch.rpm如何解决?
RPM v4.4.2.3.
问题涉及特定站点:NS.nl 上的门票订单。在该页面上有用于输入电子邮件的文本输入字段,该字段禁用了 Ctrl-V(粘贴)。
问题:什么 Greasemonkey 脚本可以在字段上启用粘贴?
我研究了各种解决方案,即:
并来到以下脚本(不幸的是)不适用于给定站点(使用 FF v40、Greasemonkey v3.4 进行测试):
// Taken from http://userscripts-mirror.org/scripts/review/40760
unsafeWindow.disable_paste = function() { return true; };
// jQuery is already available on the page:
var $j = jQuery.noConflict();
// Site generates the form on-the-fly, so we schedule the necessary modifications for later:
setTimeout(function() {
$j(document).off('copy paste', '[data-regex=email], [data-regex=emailRepeat]');
$j(document).off('keyup keydown keypress cut copy paste');
// Taken from /sf/ask/1978668261/
$j('*').each(function(){
$j(this).unbind('paste');
});
}, 2000);
Run Code Online (Sandbox Code Playgroud)
使用延迟执行(via setTimeout())是因为站点动态构建表单。“有问题”元素显示在以下屏幕截图中:
也许,我做错了什么,但我找不到以下情况的好方法。
我想对一个在下面使用Spring Batch来执行作业的服务进行单元测试。作业通过AsyncTaskExecutor在单独的线程中预先配置来执行。在我的单元测试中,我想:
显然,以上所有内容都应该在一个事务中执行,但不幸的是,事务不会传播到新线程(我理解这背后的基本原理)。
我想到的想法:
Isolation.READ_UNCOMMITTED在作业配置中使用。但这需要两种不同的配置用于测试和生产。我遇到了以下问题:当URLConnection通过代理使用时,内容长度始终设置为-1.
首先,我检查了代理确实返回Content-Length(lynx并且wget也通过代理工作;没有其他方法从本地网络上网):
$ lynx -source -head ftp://ftp.wipo.int/pub/published_pct_sequences/publication/2003/1218/WO03_104476/WO2003-104476-001.zip
HTTP/1.1 200 OK
Last-Modified: Mon, 09 Jul 2007 17:02:37 GMT
Content-Type: application/x-zip-compressed
Content-Length: 30745
Connection: close
Date: Thu, 02 Feb 2012 17:18:52 GMT
$ wget -S -X HEAD ftp://ftp.wipo.int/pub/published_pct_sequences/publication/2003/1218/WO03_104476/WO2003-104476-001.zip
--2012-04-03 19:36:54-- ftp://ftp.wipo.int/pub/published_pct_sequences/publication/2003/1218/WO03_104476/WO2003-104476-001.zip
Resolving proxy... 10.10.0.12
Connecting to proxy|10.10.0.12|:8080... connected.
Proxy request sent, awaiting response...
HTTP/1.1 200 OK
Last-Modified: Mon, 09 Jul 2007 17:02:37 GMT
Content-Type: application/x-zip-compressed
Content-Length: 30745
Connection: close
Age: 0
Date: …Run Code Online (Sandbox Code Playgroud) 我面临着以下列格式匹配输入的挑战:
正则表达式应该与序列的给定key = value部分匹配,并且不应该为长输入中断(例如,值为10000个字符).
首先我来到这个解决方案:
/(\w+)=(\d+|"(?:""|[^"])+"(?!"))
Run Code Online (Sandbox Code Playgroud)
并且它执行得不错,但是在Java6中,对于长输入(例如,cashes regexplanet),StackOverflowError失败了.我尝试改进它以便更快地运行:
/(\w+)=(\d+|"(?:""|[^"]+)+"(?!"))
Run Code Online (Sandbox Code Playgroud)
但是如果输入不匹配,它会在回溯中进入无限循环,试图匹配它.
然后我来到这个正则表达式:
/(\w+)=(\d+|".+?(?<!")(?:"")*"(?!"))
Run Code Online (Sandbox Code Playgroud)
表现较慢,但它似乎解决了这个任务.
任何人都可以建议更好/更快的正则表达式?
样本输入:
/mol_type="protein" /transl_table=11 /note="[CDS] (""multi
line)" nn /organism="""Some"" Sequence" nn /organism="Some ""Sequence"""
/translation="MHPSSSRIPHIAVVGVSAIFPGSLDAHGFWRDILSGTDLITDVPSTHWLVE
DYYDPDPSAPDKTYAKRGAFLKDVPFDPLEWGVPPSIVPATDTTQLLALIVAKRVLEDAAQGQFE
SMSRERMSVILGVTSAQELLASMVSRIQRPVWAKALRDLGYPEDEVKRACDKIAGNYVPWQESSF
PGLLGNVVAGRIANRLDLGGTNCVTDAACASSLSAMSMAINELALGQSDLVIAGGCDTMNDAFMY
MCFSKTPALSKSGDCRPFSDKADGTLLGEGIAMVALKRLDDAERDGDRVYAVIRGIGSSSDGRSK
SVYAPVPEGQAKALRRTYAAAGYGPETVELMEAHGTGTKAGDAAEFEGLRAMFDESGREDRQWCA
LGSVKSQIGHTKAAAGAAGLFKAIMALHHKVLPPTIKVDKPNPKLDIEKTAFYLNTQARPWIRPG
DHPRRASVSSFGFGGSNFHVALEEYTGPAPKAWRVRALPAELFLLSADTPAALADRARALAKEAE
VPEILRFLARESVLSFDASRPARLGLCATDEADLRKKLEQVAAHLEARPEQALSAPLVHCASGEA
PGRVAFLFPGQGSQYVGMGADALMTFDPARAAWDAAAGVAIADAPLHEVVFPRPVFSDEDRAAQE
ARLRETRWAQPAIGATSLAHLALLAALGVRAEAFAGHSFGEITALHAAGALSAADLLRVARRRGE
LRTLGQVVDHLRASLPAAGPAASASPAAAASVPKASTAAVPAVASVAAPGAAEVERVVMAVVAET
TGYPAEMLGLQMELESDLGIDSIKRVEILSAVRDRTPGLSEVDASALAQLRTLGQVVDHLRASLP
AASAGPAVAAPAAKAPAVAAPTGVSGATPGAAEVERVVMAVVAETTGYPAEMLGLQMELESDLGI
DSIKRVEILSAVRDRTPGLAEVDASALAQLRTLGQVVDHLRASLGPAAVTAGAAPAEPAEEPAST
PLGRWTLVEEPAPAAGLAMPGLFDAGTLVITGHDAIGPALVAALAARGIAAEYAPAVPRGARGAV
FLGGLRELATADAALAVHREAFLAAQAIAAKPALFVTVQDTGGDFGLAGSDRAWVGGLPGLVKTA
ALEWPEASCRAIDLERAGRSDGELAEAIASELLSGGVELEIGLRADGRRTTPRSVRQDAQPGPLP
LGPSDVVVASGGARGVTAATLIALARASHARFALLGRTALEDEPAACRGADGEAALKAALVKAAT
SAGQRVTPAEIGRSVAKILANREVRATLDAIRAAGGEALYVPVDVNDARAVAAALDGVRGALGPV
TAIVHGAGVLADKLVAEKTVEQFERVFSTKVDGLRALLGATAGDPLKAIVLFSSIAARGGNKGQC
DYAMANEVLNKVAAAEAARRPGCRVKSLGWGPWQGGMVNAALEAHFAQLGVPLIPLAAGAKMLLD
ELCDASGDRGARGQGGAPPGAVELVLGAEPKALAAQGHGGRVALAVRADRATHPYLGDHAINGVP
VVPVVIALEWFARAARACRPDLVVTELRDVRVLRGIKLAAYESGGEVFRVDCREVSNGHGAVLAA
ELRGPQGALHYAATIQMQQPEGRVAPKGPAAPELGPWPAGGELYDGRTLFHGRDFQVIRRLDGVS
RDGIAGTVVGLREAGWVAQPWKTDPAALDGGLQLATLWTQHVLGGAALPMSVGALHTFAEGPSDG
PLRAVVRGQIVARDRTKADIAFVDDRGSLVAELRDVQYVLRPDTARGQA"
/note="primer of Streptococcus pneumoniae
Run Code Online (Sandbox Code Playgroud)
预期输出(来自regexhero.net):

我想使用Infinispan作为图像二进制数据(Java类型byte[])的缓存.我假设Infinispan默认策略是LIFO或类似的策略,更喜欢保留最近使用/添加的缓存实体.
在我的loadtest场景中,我在一轮中进行四次调用以检索给定的实体.假设第一个调用永远不会到达缓存(因为每一轮都请求一个唯一的实体),但是后面三个总是命中缓存.所以预期的配置文件如下所示:
#1: MISS-HIT-HIT-HIT
#2: MISS-HIT-HIT-HIT
...
Run Code Online (Sandbox Code Playgroud)
当我使用COUNT具有一定数量实体的驱逐类型配置Infinispan时,它可以正常工作:
<local-cache name="imagesCache" statistics="true">
<!-- lifespan="30 min" max-idle="30 min" interval="1 min" -->
<expiration lifespan="1800000" max-idle="1800000" interval="60000" />
<memory>
<binary eviction="COUNT" size="500" />
</memory>
</local-cache>
Run Code Online (Sandbox Code Playgroud)
基于我在loadtest中捕获的数字的缓存命中率: (2952-738)/2952 = 0.75
当我更改要保留在内存中的实体数量(<binary eviction="COUNT" size="100" />)时,命中率不会改变(如预期的那样).
在运行期间,我测量了负载测试之前和之后的堆大小(在几次GC调用之后进行的测量),结果是500个实体占用大约114.895.000 - 62.445.000 = 52.450.000字节=每个实体大约100KB:

之后,我重新启动了应用程序,只对缓存配置进行了这么小的改动:
<memory>
<binary eviction="MEMORY" size="1000000" />
</memory>
Run Code Online (Sandbox Code Playgroud)
我希望Infinispan的性能具有相同的配置文件,但事实证明,一旦给定的内存量完全分配,新添加的实体不会驱逐旧实体但会立即被驱逐.这意味着大约在添加100个实体之后,所有四个缓存结果缓存未命中的请求.可以看出比率现在是0.58而不是0.75:

缓存命中率: (2952-738-504)/2952 = 0.579
如果我增加内存,确实命中率接近0.75但是我希望命中率与内存大小无关(假设内存可以适合至少几个实体).
一旦我将钝化配置为文件,基于内存的驱逐策略就会按预期开始工作:
<local-cache name="imagesCache" statistics="true">
<expiration lifespan="1800000" max-idle="1800000" interval="60000" />
<persistence passivation="true">
<file-store …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 iText 7.1.1 将 TIFF 图像转换为多页 PDF 文件。感谢那些让我开始阅读这篇文章使用 iText 从 TIFF 图像创建 PDF 的人。但是,它是 iText 5.5.x,我很难在 iText 7 中复制它。
我确实找到了TiffImageData.getNumberOfPages(raf)替换int pages = TiffImage.getNumberOfPages(rafa)。
但是,我无法TiffImage.getTiffImage(rafa, i)在 iText7 中进行替换。我需要使用new Image(ImageDataFactory.createTiff(...)). 感谢任何建议。
iText 5.5.x 代码
import java.io.FileOutputStream;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.io.FileChannelRandomAccessSource;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.RandomAccessFileOrArray;
import com.itextpdf.text.pdf.codec.TiffImage;
public class Test1 {
public static void main(String[] args) throws Exception {
RandomAccessFile aFile = new RandomAccessFile("/myfolder/origin.tif", "r"); …Run Code Online (Sandbox Code Playgroud) java ×6
browser ×1
caching ×1
clipboard ×1
copy-paste ×1
echo2 ×1
evict ×1
greasemonkey ×1
gwt ×1
hibernate ×1
hql ×1
http-proxy ×1
infinispan ×1
itext7 ×1
jackson ×1
java-6 ×1
javascript ×1
json ×1
multipage ×1
polymorphism ×1
propagation ×1
proxy ×1
regex ×1
rpm ×1
rpmbuild ×1
spring ×1
tiff ×1
transactions ×1
vaadin ×1
wicket ×1