小编Max*_* A.的帖子

Servlet 2.5和3之间有什么区别?

我正在推出符合Servlet 2.5的J2EE代码,我想知道2.5和3之间的主要区别是什么.官方Sun文档和个人经历的指针非常受欢迎.

如果我不应该暂时关注自己3,那就这么说吧.谢谢!

java servlets java-ee

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

一个元素上的相同类型的多个注释?

我试图在一个元素上拍两个或多个相同类型的注释,在本例中是一个方法.这是我正在使用的近似代码:

public class Dupe {
    public @interface Foo {
      String bar();
    }

    @Foo(bar="one")
    @Foo(bar="two")
    public void haha() {}
}
Run Code Online (Sandbox Code Playgroud)

在编译上面的内容时,javac会抱怨重复的注释:

max@upsight:~/work/daybreak$ javac Dupe.java 
Dupe.java:5: duplicate annotation

是不是可以重复这样的注释?从小学的角度讲,由于内容不同,@Foo的两个实例不同吗?

如果无法实现上述目标,那么有哪些潜在的解决方法?

更新:我被要求描述我的用例.开始.

我正在构建一种语法加糖机制,将POJO"映射"到文档存储,例如MongoDB.我想允许索引在getter或setter上指定为注释.这是一个人为的例子:

public class Employee {
    private List<Project> projects;

    @Index(expr = "project.client_id")
    @Index(expr = "project.start_date")
    public List<Project> getProjects() { return projects; }
}
Run Code Online (Sandbox Code Playgroud)

显然,我希望能够通过Project的各种属性快速查找Employee的实例.我可以使用不同的expr()值指定@Index两次,或者采用接受的答案中指定的方法.即使Hibernate这样做并且它不被认为是黑客,我认为至少允许在单个元素上具有相同类型的多个注释仍然是有意义的.

java annotations

85
推荐指数
5
解决办法
7万
查看次数

将协议缓冲区集成到Maven2构建中

我正在现有的,相当普通的Maven 2项目中试验Protocol Buffers.目前,每次我需要更新生成的源时,都会调用shell脚本.这显然是一个麻烦,因为我希望在每次构建之前自动生成源.希望不要诉诸可耻的hackery.

所以,我的问题是双重的:

  1. 远射:是否有Maven 2的"Protocol Buffers插件"可以以自动方式实现上述目标?谷歌代码上有一个分支,其作者似乎已经开始实施这样的插件.不幸的是,它没有通过代码审查或合并到protobuf主干.因此,该插件的状态是未知的.

  2. 可能更现实:缺少一个实际的插件,我怎么可能protoc从我的Maven 2版本调用?我想我可以将现有的shell脚本连接到antrun调用或类似的东西.

个人经历非常感谢.

maven-2 protocol-buffers

42
推荐指数
4
解决办法
3万
查看次数

如何模式匹配大型Scala案例类?

考虑以下Scala案例类:

case class WideLoad(a: String, b: Int, c: Float, d: ActorRef, e: Date)
Run Code Online (Sandbox Code Playgroud)

模式匹配允许我提取一个字段并丢弃其他字段,如下所示:

someVal match {
    case WideLoad(_, _, _, d, _) => d ! SomeMessage(...)
}
Run Code Online (Sandbox Code Playgroud)

我想做什么,以及当一个案例类有大约20个奇数字段时更有意义的是,以一种不涉及输入的方式提取几个值WideLoad(_, _, _, _, _, some, _, _, _, thing, _, _, interesting).

我希望命名args可以在这里提供帮助,尽管以下语法不起作用:

someVal match {
    case WideLoad(d = dActor) => dActor ! SomeMessage(...)
    //              ^---------- does not compile
}
Run Code Online (Sandbox Code Playgroud)

这里有什么希望,还是我不知道输入很多很多_, _, _, _

编辑:我明白我能做到case wl @ WideLoad(...whatever...) => wl.d,但我仍然想知道是否有更复杂的语法能够满足我的需求,而无需引入额外的内容val.

scala pattern-matching

40
推荐指数
2
解决办法
9731
查看次数

如何采用TDD并确保遵守?

我是一名高级工程师,在另外四人的团队中工作,他们使用自行开发的内容管理应用程序来驱动美国大型专业体育网站.大约两年前我们已经开始实施这个项目并选择Java作为我们的平台,尽管我的问题不是特定于Java的.自从我们开始以来,我们的队伍中出现了一些流失.尽管重要的决定是通过共识做出的,但我们每个人在决定实施细节方面都有很大的自由度.

我们是一个相对年轻的项目,但是当没有一个开发人员知道应用程序的所有内容时,我们已经到了这一点.其主要原因是我们快速的发展速度,其中大部分都发生在我们这项运动赛季揭幕战的紧张之中; 以及我们的测试覆盖率基本上为0的事实.

我们都理解TDD的理论上的好处,并且原则上同意如果我们多年来开始并坚持使用它,这种方法将改善我们的生活和代码质量.这从未成功,现在我们负责一个未经测试的代码库,这个代码库仍然需要大量扩展,并且在生产中被积极使用并且依赖于公司结构.

面对这种情况,我只看到两种可能的解决方案:(1)追溯性地为现有代码编写测试,或者(2)尽可能多地重写应用程序,同时狂热地遵守TDD原则.我认为(1)基本上不实用,因为我们在项目中有一个地狱般的依赖图.几乎没有一个组件可以单独测试; 我们不知道所有用例; 由于业务需求或对不可预见问题的反应,用例在测试过程中可能会发生变化.由于这些原因,我们无法确定我们的测试一旦完成就会变成高质量.有可能导致团队陷入虚假的安全感,微软的错误会在没有人注意的情况下蔓延.鉴于投资回报率的前景黯淡,我或我们的团队很难证明这种管理努力的合理性.

方法(2)更具吸引力,因为我们将遵循测试优先原则,从而产生几乎100%覆盖的代码.即使最初的努力最初导致覆盖码的岛屿,这将为我们提供在项目范围覆盖范围内的重要滩头阵地,并帮助解耦和隔离各种组件.

两种情况下的缺点是,我们团队的业务生产率可能会在任何测试推动期间显着减速或完全消失.我们无法承受在业务驱动的紧缩期间这样做,尽管它之后是相对平静的,我们可以为我们的目的利用.

除了选择正确的方法((1),(2)或其他未知解决方案之外),我需要帮助回答以下问题:我的团队如何确保我们的努力不会长期浪费通过无法维护的测试和/或在业务需求滚动时未能编写新的测试?我对此提出了广泛的建议,无论是胡萝卜还是胡萝卜.

无论如何,感谢阅读有关这种自我造成的困境.

java tdd automated-tests unit-testing scala

19
推荐指数
4
解决办法
902
查看次数

Oracle上的Hibernate:将String属性映射到CLOB列

警告:请参阅下面的答案.此问题是由除10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的.问题解决了.留下这个问题的其余部分给后人.

我一直在抨击以下内容.这是从我的应用程序代码中提取的简单POJO:

@Entity
@Table(name = "PIGGIES")
public class Piggy {    
    private Long id;
    private String description;

    public Piggy() {}

    @Id
    @GeneratedValue
    @Column(name = "PIGGY_ID")
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    @Lob
    @Column(name = "PIGGY_DESCRIPTION")
    public String getDescription() { return description; }
    public void setDescription(String d) { description = d; }
}
Run Code Online (Sandbox Code Playgroud)

有一个String属性和一个CLOB列.当内容很短(例如"hello world")时,它会持续很好.使用更长的字符串,我得到以下异常:

java.sql.SQLException: operation not allowed: streams type cannot be used in batching
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
        at …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate jpa clob

12
推荐指数
2
解决办法
7万
查看次数

如何将多个传入 TCP 连接表示为 Akka 流的流?

我正在使用 Akka Streams 对网络服务器进行原型设计,该服务器将侦听端口、接受传入连接并不断从每个连接读取数据。每个连接的客户端只会发送数据,不会期望从服务器接收任何有用的信息。

从概念上讲,我认为将传入事件建模为一个单独的流是合适的,该流只是偶然地通过多个 TCP 连接传递。因此,假设我有一个case class Msg(msg: String)代表每条数据消息的 ,我想要的是将整个传入数据表示为Source[Msg, _]. 这对我的用例很有意义,因为我可以非常简单地将流和汇连接到这个源。

这是我为实现我的想法而编写的代码:

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.SourceShape
import akka.stream.scaladsl._
import akka.util.ByteString
import akka.NotUsed
import scala.concurrent.{ Await, Future }
import scala.concurrent.duration._

case class Msg(msg: String)

object tcp {
  val N = 2
  def main(argv: Array[String]) {
    implicit val system = ActorSystem()
    implicit val materializer = ActorMaterializer()
    val connections = Tcp().bind("0.0.0.0", 65432)
    val delim = Framing.delimiter(
      ByteString("\n"),
      maximumFrameLength = 256, allowTruncation = true
    )
    val …
Run Code Online (Sandbox Code Playgroud)

scala akka akka-stream

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