我想知道是否有很多人用java编程断言.我认为这对于没有足够书面合同或过时合同的大型项目非常有用.特别是当你使用webservices,组件......
但我从未见过任何使用断言的项目(除了junit/testng测试......).
我注意到抛出的类是一个错误而不是异常.有人能告诉我他们为什么选择错误吗?可能是因为异常可能被意外捕获而不是记录器/重新抛出?
如果您使用组件开发应用程序,我想知道您在哪里放置断言: - 在组件方面,就在通过公共API返回数据之前? - 在组件客户端?如果在任何地方调用api,你会设置一个称为断言机制的外观模式?(然后我猜你把你的断言和外观放在一些外部项目上,你的客户端项目将依赖于这个断言项目?)
我理解如何使用断言,并在使用它们时,只是想知道是否有人根据真实的断言经验提出建议.
谢谢
我想知道是否有可能创建某种"方法调用链",所有方法都返回相同的[错误,结果].
我想要做的是:连续调用所有方法,当方法返回一个Left(错误)时,然后停止方法调用并返回在调用链中找到的第一个Left.
我尝试了一些东西,包括折叠,地图,投影......但我是Scala的新手并没有找到任何优雅的解决方案.
我试过这样的事情:
def createUserAndMandatoryCategories(user: User) : Either[Error,User] = {
User.create(user).right.map {
Logger.info("User created")
Category.create( Category.buildRootCategory(user) ).right.map {
Logger.info("Root category created")
Category.create( Category.buildInboxCategory(user) ).right.map {
Logger.info("Inbox category created")
Category.create( Category.buildPeopleCategory(user) ).right.map {
Logger.info("People category created")
Category.create( Category.buildTrashCategory(user) ).right.map {
Logger.info("Trash category created")
Logger.info("All categories successfully created created")
Right(user)
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.无论如何,我真的不喜欢它所需的缩进.此外我想将Error转换为描述问题的新String(我想我应该使用fold?)
我正在寻找像这样写的东西:
val result : Either[String,CallResult] = call1.something("error 1 description")
.call2.something("error 2 description")
.call3.something("error 3 description")
.call4.something("error 4 description")
Run Code Online (Sandbox Code Playgroud)
是不是可以用Scala做这样的事情?也许同时使用Either和Option?
一个限制也是如果第一次调用失败,则不应该进行其他调用.我不想要一个解决方案,我称之为一切,然后加入eithers.
谢谢!
IoC很不错,但是用于自动装配(@EJB,@ Autowired,@ Inject,@ SpringBean ......),您认为它不会限制IoC的目标吗?
实际上我不太了解不同框架中的自动装配系统,但似乎它主要基于类型.
当您在IService上使用@EJB时,您需要只有一个实现ServiceImpl才能使其工作.
如果我们想要许多实现怎么办?
似乎一些自动装配注释可以有参数.例如,Stripes中你可以这样做:@SpringBean("xxxService")其中xxxService是一个spring初始化bean.
在这种情况下,你可以不做"new XxxServiceImpl()"但你仍然对你想在bean中使用的服务实现添加一个硬编码引用.它不是类引用,而是实现的spring bean引用...
你觉得怎么样?我喜欢自动装配,但只是想知道自己....
我的项目是使用带有spring事务管理器的hibernate,我的数据库是postgres(可能是无关紧要的).
我正在尝试读取大的xml文件并从中构造对象(对象不大但数量很大)并将它们插入到数据库中.
如果我的某个对象违反数据库约束,则整个过程停止.如何跳过违反数据库约束的?或者将他们的id或其他内容记录到日志文件中?
问题更新:
我一直在浏览SO,发现对于批量插入,最好建议使用无状态会话,但我仍然遇到相同的问题并插入停止:
May 26, 2012 4:45:47 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERROR: duplicate key value violates unique constraint "UN_FK"
Detail: Key (fid)=(H1) already exists.
Run Code Online (Sandbox Code Playgroud)
以下是我的代码解析xml和插入db的相关部分,为简单起见,假设我正在插入电影:
//class field
@Autowired
private SessionFactory sessionFactory;
@Override
public void startDocument() throws SAXException {
session = sessionFactory.getCurrentSession();
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("FILM")) {
movie.setCategory(category);
movie.setAdded(new Date());
session.insert(movie);
}
}
Run Code Online (Sandbox Code Playgroud)
我在app-ctx中将此属性设置hibernate.jdbc.batch_size为100.为了避免这种情况,是否真的有必要在插入之前进行选择?
更新2:
如果我使用StatelessSession而不是会话,我会获得20次插入,而且处理无限期地停止,没有任何异常或任何东西.
我假设数字20是因为我正在与tomcat建立连接并且拥有maxActive="20".
赏金更新:
我真的很想看到有人提供解决方案(如果可能的话,没有防守选择).使用statelessSession或仅使用会话.
java hibernate transactions batch-processing spring-transactions
我首先问过这个关于final在Java 中使用匿名内部类的问题:
为什么我们使用带有匿名内部类的final关键字?
我实际上正在阅读马丁奥德斯基的Scala书.似乎Scala简化了很多Java代码,但对于Scala闭包,我注意到了一个显着的差异.
在Java中,我们使用匿名内部类"模拟"闭包,捕获最终变量(将被复制到堆上而不是堆栈中),在Scala中我们可以创建一个可以捕获val的闭包,但是也是一个var,因此在闭包调用中更新它!
所以我们可以使用没有final关键字的Java匿名内部类!我还没读完这本书,但是现在我没有找到关于这种语言设计选择的足够信息.
谁能告诉我,为什么马丁Odersky的,谁似乎真的照顾功能的副作用,选择关闭,以便能够同时捕捉val和var,而不是唯一的val?
Java和Scala实现的优点和缺点是什么?
谢谢
是否有任何SaaS解决方案来托管maven存储库?
我知道我可以在Nexus或Archiva或Artifactory上自己托管它,只是想知道是否有经济实惠的提供商允许以低成本托管一些依赖项而无需自己安装存储库.
我正在寻找一个在线maven存储库主机,它可以保证良好的可用性并使工件保密.
有人可以解释我如何在Intellij 12上导入你的想法项目以获得Play2支持吗?
我刚刚购买了从版本10到12的升级.它曾经与Intellij 10一起使用(仅支持scala).play idea在Intellij 12上使用和导入项目时,它似乎不起作用,即使在实际使用版本10的scala文件中也没有更多的突出显示.
看来我不是唯一一个在Intellij 12中遇到Play2支持麻烦的人,所以如果有人可以帮助它会很好:)
使用 RabbitMQ Admin (v3),我尝试创建一个队列,该队列将向默认交换发送死信消息,并在其上绑定一个错误队列的路由键“MyErrorRoutingKey”。所以在管理界面,我把“死信交换”留空了。
我只是想知道在尝试创建队列时出现以下消息是否正常:
406 PRECONDITION_FAILED - vhost '/' 中队列 'MyQueue' 的无效参数 'x-dead-letter-routing-key':routing_key_but_no_dlx_defined
似乎可以将死信消息路由到默认交换,因为在文档中进一步说明:
有可能形成死信队列的循环。例如,当队列将死信消息发送到默认交换而没有指定死信路由键时,就会发生这种情况。在这种循环中的消息(即两次到达同一队列的消息)将被丢弃。
那么我应该如何将消息路由到默认交换?与上面描述的“循环无用死信”不同,我希望能够指定路由键,以便我的消息不会丢失。
我正在尝试这样做:
trait IdentifiableModel[T] {
self: { def copy(id: ObjectId): T } =>
val id: ObjectId
}
Run Code Online (Sandbox Code Playgroud)
我发现其他一些相关的问题试图做类似的事情,但他们并没有真正回答这个问题.在我的例子中,我正在尝试复制所有共享id值的IdentifiableModel的case类子类
我以StackOverflow为例,因为显然你知道那个网站,而我真正的用例非常接近.
那么让我们想象一下简化的SO域描述:
最后一个大胆的规则是对我很重要的规则.
我对AggregateRoot的理解是它应该包含用于决定接受或拒绝命令的状态,并且它不应该查询DB来执行此操作.它保证了应用程序的一致性.它应该只监听它发出的事件以更新其状态.
现在我认为SO域有一个名为Question的聚合根.然后该问题将处理如下命令:
问题是,当触发EditQuestion时,问题AggregateRoot将如何决定是接受还是拒绝该命令?因为如果你还记得,如果你有<1000声誉,如果你试图编辑另一个用户的问题,那么该命令应该被拒绝.
对于我来说,问题AR保持所有用户声誉的列表,以便能够知道如何对该命令采取行动似乎并不合适.
问题是,当我试图建模我的域时,我有一遍又一遍的这个建模问题,而且我总是最终得到一个大胖子AggregateRoot
有人能告诉我我缺少什么并帮我解决这个问题吗?谢谢
这个问题似乎说我们不应该将授权系统放在域模型中.我同意这对于基于角色的身份验证等问题可能很实用.但是,对我来说,"用户无法编辑,除非他们有足够的声誉"实际上是一个SO业务规则,那么它怎么可能在域外?
重要提示:在回答时,请考虑您是业务专家.您知道StackOverflow是一个用户,可以自己猜出SO约束是什么.即使你对他们的看法不对,也不是什么大不了的事:只是为你错误的业务约束提出建议我很好!
这不是我第一次提出这样的问题,它总是没有答案,只是无休止的讨论.我想知道的是,如果必须构建此站点,您将如何建模StackOverflow,重点关注要编辑的最低信誉的业务规则.