我希望可以使用某种类型的扩展(尽管我认为我的希望是愚蠢的乐观).
/**
* <p>
* Gets the {@link ResultObject} given the identifier. The following
* fields are not available for some users and will contain a null value:
* </p>
*
* <ul>
* <li>{@code resultObject.comment}</li>
* <li>{@code resultObject.anotherObject.actionById}</li>
* <li>{@code resultObject.anotherObject.actionByName}</li>
* </ul>
*
* <p>
* The {@code daysInPurgatory} value will be {@code -1} when not
* applicable
* </p>
*
* @param requestUser
* the user initiating the request
* @param identifier
* the id of the …Run Code Online (Sandbox Code Playgroud) 我目前是唯一使用Eclipse Mylyn集成的开发人员(我是实验性的).我配置了两个存储库--Bugzilla,项目用于内部错误跟踪和本地存储库.我使用Local repo来组织我正在为迭代工作的故事.
我想做的是让Local repo可以共享,以便其他开发人员可以使用它.如果开发人员喜欢它,我们可以采用Mylyn作为项目标准.你会推荐哪种存储库?要求是"免费"(如"演讲"和"啤酒")和"令人敬畏"(如"The Rapture").它需要部署在Windows服务器上并与其他服务共享资源(因此资源不会太多).配置简单也很好,因为我只是在我自己的时间探索这个.也许是一个单独的Bugzilla实例?
谢谢!LES
显而易见的事情是:
预期结果:
- 目录和子目录中的所有Java代码都已格式化(使用项目特定的格式设置)
实际结果:
- 没有格式化java.
在我们处理它的同时,我们如何在Eclipse中进行批量清理操作?
在编辑器中,我右键单击>源>清理,但我一次只能执行一个文件.
使用实体的version属性进行乐观锁定工作正常并且易于实现:
<version property="VERSION" type="int" column="EX_VERSION" />
Run Code Online (Sandbox Code Playgroud)
该实体具有以下类型的属性:
private int VERSION;
public int getVERSION() { return VERSION; }
public void setVERSION(int VERSION) { this.VERSION = VERSION; }
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在,服务方法返回上面实体的数据传输对象(DTO),视图以HTML格式显示.对于更新页面,VERSION属性存储在HTML隐藏字段中并随表单一起提交.
目的是使用version属性来确保如果显示的信息附带旧版本,则用户的更新将失败.
控制器通过调用包含更新信息(包括版本属性)的DTO的服务方法来响应用户更新请求,并且服务方法依次使用数据访问对象(DAO)来持久化更改:
public void update(SimpleDTO dto) {
SimplyEntity entity = getSimpleDao().load(dto.getId());
copyProperties(dto, entity); // all properties, including VERSION copied to entity
getSimpleDao().update(entity);
}
Run Code Online (Sandbox Code Playgroud)
问题是Hibernate不遵守copyProperties(...)复制到实体中的版本属性.我在下面的论坛中找到了原因:https://forum.hibernate.org/viewtopic.php?f = 1&t = 955893&p = 2418068
简而言之,当调用load()时,Hibernate会在会话缓存中缓存version属性,并且随后更改为它的值无关紧要.我同意这是正确的行为,但我已经被老板指示通过HTML表单属性传递版本(如果有更好的模式,我很乐意听到它).
我现在正在探索的一个解决方案是在更新发生之前使用hibernateTemplate.evict(simpleEntity)设置版本之后将实体从会话中逐出.我希望这有效,但它看起来效率不高.
我想请Hibernate检查实例本身的version属性,而不是仅查看会话缓存.
提前谢谢你的答案!
- LES
执行摘要:当线程中抛出断言错误时,单元测试不会消失.这是有道理的,因为不应该允许一个线程崩溃另一个线程.问题是我如何1)在第一个辅助线程崩溃时使整个测试失败,或者2)循环并确定每个线程完成后的状态(参见下面的代码).执行后者的一种方法是通过具有每线程状态变量,例如"boolean [] status"并且具有"status [i] == false"意味着线程失败(这可以被扩展以捕获更多信息).但是,这不是我想要的:我希望它在抛出断言错误时就像任何其他单元测试一样失败.这甚至可能吗?这是可取的吗?
我感到无聊,我决定在我的单元测试中产生一堆线程,然后让它们调用一个服务方法,只是为了它.代码看起来大致如下:
Thread[] threads = new Thread[MAX_THREADS];
for( int i = 0; i < threads.length; i++ ) {
threads[i] = new Thread( new Runnable() {
private final int ID = threadIdSequenceNumber++;
public void run() {
try {
resultRefs[ID] = runTest( Integer.toString( ID ) ); // returns an object
}
catch( Throwable t ) {
// this code is EVIL - it catches even
// Errors - don't copy it - more on this below …Run Code Online (Sandbox Code Playgroud) 在家里,这很完美.我现在在另一台计算机上(使用cygwin)并且hg push不会提示输入用户名/密码:
user@localhost /cygdrive/d/repos/upthescala/viewprotect
$ hg push https://viewprotect.googlecode.com/hg/
pushing to https://viewprotect.googlecode.com/hg/
searching for changes
abort: http authorization required
Run Code Online (Sandbox Code Playgroud)
这是我的〜/ .hgrc的内容:
[http_proxy]
host=someproxy:8080
[ui]
username = My Name <myemail>
Run Code Online (Sandbox Code Playgroud)
提前感谢任何建议!
注意:这似乎是一个cygwin问题.当我从Windows提示符(cmd.exe)尝试时,它按预期工作:
D:\repos\upthescala\viewprotect>hg push https://viewprotect.googlecode.com/hg/
pushing to https://viewprotect.googlecode.com/hg/
searching for changes
http authorization required
realm: Google Code Mercurial Repository
user: myemailaddress
password: *********
remote: Success.
Run Code Online (Sandbox Code Playgroud)
- LES
我有一个需要解析属性占位符的XML文件(urlrewrite.xml).我启用了Maven过滤来实现这一目标.这适用于组装的WAR文件.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
Run Code Online (Sandbox Code Playgroud)
问题是尝试使用maven-jetty-plugin(Maven Jetty插件)在开发模式下运行应用程序,如maven jetty:run.
有问题的文件urlrewrite.xml位于src/main/resources目录中,因此应该(并且确实)最终在/ WEB-INF/classes(或maven jetty:run的目标/类)中.
URLRewriteFilter配置指定配置文件的位置,如下所示:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/classes/urlrewrite.xml</param-value>
</init-param>
</filter>
Run Code Online (Sandbox Code Playgroud)
这将在部署时工作.但是,使用jetty maven插件,URLRewrite将因NullPointerException而死亡,因为它使用了context.getResourceAsString("/ WEB-INF/classes/urlrewrite.xml")来加载配置文件.Jetty为此返回null,因为从工作区运行应用程序时,它将/ WEB-INF/classes/...解析为src/main/webapp/WEB-INF/.... 该文件不存在,因为WAR尚未组装.它应该从target/classes/urlrewrite.xml中提取资源.
如果这对你来说是模糊的,那么你可能无法回答这个问题,因为我怀疑你需要成为Jetty大师来找出一个解决方法(提示:这是一个挑战!).
有没有人知道这方面的方法?我也尝试过以下变通方法:
总之,maven-jetty-plugin需要将文件置于src/main/resources/webapp/insert路径和文件名下,以便可用于maven jetty:run命令...
谢谢你的帮助......
真诚的,劳埃德力
我目前的代码目录结构如下:
src
|-- main
| `-- java
| `-- com
| `-- upthescala
| `-- tags
| `-- ViewProtectTag.java
|-- test
|-- pom.xml
|-- .project
|-- .classpath
`-- .hgignore
Run Code Online (Sandbox Code Playgroud)
我想为我的JSP标记包含一个tld文件,我不知道在哪里打包它.我最初的想法是添加一个src/main/resources目录并放入META-INF/viewprotect.tld其中.
从不太酷的问题类别......
"队列式的东西"我的意思是支持以下操作:
可选操作类似于:
如果可以以分布式方式对队列执行以下操作(多个客户端与队列交互),那将是理想的:
queue = ...
queue.append( a )
queue.append( b )
queue.append( c )
print queue
"a b c"
queue.promote( b.id )
print queue
"b a c"
queue.demote( a.id )
"b c a"
x = queue.take()
print x
"b"
print queue
"c a"
Run Code Online (Sandbox Code Playgroud)
是否有任何特别适合此用例的数据存储?即使多个用户同时修改队列,队列也应始终处于一致状态.
如果不是为了促进/降级/移动要求,那就不会有太大的问题.
编辑:如果有Java和/或Python库来完成上述任务的加分点.
解决方案应该非常好地扩展
考虑"对实例字段的延迟初始化进行双重检查":
// Item 71 in Effective Java copied from this interview with Bloch. private volatile FieldType field; FieldType getField() { FieldType result = field; if (result == null) { // First check (no locking) synchronized(this) { result = field; if (result == null) // Second check (with locking) field = result = computeFieldValue(); } } return result; }
我希望能够以安全的方式重置字段(强制它再次从数据库加载,在我的情况下).我假设我们可以通过重置方法来做到这一点:
void reset() {
field = null;
}
这是重置场地的标准方法吗?安全吗?任何陷阱?我问,因为布洛赫发出了关于双重检查懒惰加载的以下警告:"成语非常快,但也很复杂和细腻,所以不要试图以任何方式修改它.只需复制和粘贴 - 通常这不是一个好主意,但在这里是合适的."
在此先感谢喜马拉雅山脉的Playa.