我正在寻找Java中的轻量级消息传递框架.我的任务是以SEDA的方式处理事件:我知道处理的某些阶段可以快速完成,而其他阶段则不能完成,并且希望将这些处理阶段分离.
假设我有组件A和B以及处理引擎(这个容器或其他任何东西)调用组件A,组件A又调用组件B.我不关心组件B的执行时间是否为2秒,但是我确实关心执行例如,组分A的时间低于50ms.因此,组件A向B提交消息似乎是最合理的,B将在所需的时间处理.
我知道不同的JMS实现和Apache ActiveMQ:它们对此非常重要.我搜索了一些轻量级消息(具有消息序列化和最简单的路由等真正的基本功能)无济于事.
在这个问题上你有什么值得推荐的吗?
我正在部署一个EJB,它应该设置一个计时器并由它每24小时触发一次.但是我应该在哪里设置计时器?@PostConstruct没有帮助 - 这是一个会话bean,因此在创建实际实例时将调用post-construct方法(这种情况永远不会发生,因为这个bean的唯一目的是跟踪计时器).
有没有其他方法来获取有关bean部署(而不是实例化)的通知,以便在那里设置计时器?
谢谢
我们目前正在评估从手写持久层迁移到ORM的选项.
我们有一堆遗留持久对象(~200),它实现了这样的简单接口:
interface JDBC {
public long getId();
public void setId(long id);
public void retrieve();
public void setDataSource(DataSource ds);
}
Run Code Online (Sandbox Code Playgroud)
当retrieve()被调用时,对象通过发出手写SQL查询来提供的连接使用它在设定器接收到的ID(这通常是对查询的唯一参数)填充本身.它管理自己的语句,结果集等.某些对象具有特殊的retrive()方法,例如retrieveByName(),在这种情况下会发出不同的SQL.
查询可能非常复杂,我们经常连接几个表来填充表示与其他对象的关系的集合,有时连接查询是在特定的getter(延迟加载)中按需发出的.基本上,我们手动实现了大部分ORM的功能.
原因就是表现.我们对速度有很强的要求,早在2005年(编写此代码时)性能测试表明,主流ORM都没有像手写SQL一样快.
我们现在面临的让我们想到ORM的问题是:
我正在寻找有关什么可能是我们最好的选择的建议.据我所知,ORMs在过去5年中已经取得了进展,所以可能现在有一个提供可接受性能的ORM.在我看到这个问题时,我们需要解决这些问题:
rs.getInt(42)因为它们对模式更改非常敏感)你有没有可以推荐的ORM框架?
更新要了解我们正在谈论的性能数据:
rs.getInt("column1")以rs.getInt(42)带来我们认为重要的性能提升.我是Haskell的新手,虽然有过以前的Lisp/Scheme体验.现在我正在查看SICP的示例,并尝试在Haskell中实现它们以获得更多的实践经验.在讲座3b中,作者提出了一种象征性地计算衍生物的功能.它包含以下几行:
(define (deriv exp var)
(cond ((constant? exp var) 0)
((same-var? exp var) 1)
; ...
Run Code Online (Sandbox Code Playgroud)
在讲座中,还定义了更多功能:
(define (constant? exp var)
(and (atom? exp)
(not (eq? exp var))))
Run Code Online (Sandbox Code Playgroud)
有没有办法在Haskell中做同样的事情,即检查原子性和符号等价于其他函数?或者更一般的是,Haskell中"反汇编"函数的手段是什么?
我正在使用ReactiveCocoa信号来表示对我们系统中RESTful后端的调用.每个RESTful调用都应该接收一个令牌作为参数之一.令牌本身是从身份验证API调用接收的.
所有工作正常,我们现在介绍令牌到期,所以后端接入类可能需要如果API调用失败,HTTP代码403我想使这个操作的调用者完全透明的重新授权本身,这是我来最好起来:
- (RACSignal *)apiCallWithSession:(Session *)session base:(NSString *)base params:(NSDictionary *)params get:(BOOL)get {
NSMutableDictionary* p = [params mutableCopy];
p[@"token"] = session.token;
RACSubject *subject = [RACReplaySubject subject];
RACSignal *first = [self apiCall:base params:p get:get]; // this returns the signal representing the asynchronous HTTP operation
@weakify(self);
[first subscribeNext:^(id x) {
[subject sendNext:x]; // if it works, all is fine
} error:^(NSError *error) {
@strongify(self);
// if it doesn't work, try re-requesting a token
RACSignal *f = [[self action:@"logon" email:session.user.email password:session.user.password]
flattenMap:^RACStream *(NSDictionary *json) …Run Code Online (Sandbox Code Playgroud) 我正在尝试为在Debian Linux上使用clang编译的小型C程序生成代码覆盖文件.这就是我所做的:
neuron@debian:~/temp$ ls
main.c test.c test.h
neuron@debian:~/temp$ clang *.c
neuron@debian:~/temp$ ./a.out
0
Run Code Online (Sandbox Code Playgroud)
这完全符合预期,我可以编译和运行.现在尝试启用覆盖率.
neuron@debian:~/temp$ clang --coverage *.c
/usr/bin/ld: cannot find /usr/bin/../lib/libprofile_rt.a: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
试图包含用于链接的库.
neuron@debian:~/temp$ clang --coverage -lprofile_rt *.c
/usr/bin/ld: cannot find -lprofile_rt
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
找到图书馆:
neuron@debian:~/temp$ find / -name \*profile_rt\* 2>/dev/null
/usr/lib/llvm-3.0/lib/libprofile_rt.so
/usr/lib/llvm-3.0/lib/libprofile_rt.a
neuron@debian:~/temp$ clang --coverage -lprofile_rt -L/usr/lib/llvm-3.0/lib *.c …Run Code Online (Sandbox Code Playgroud) 我正在使用两个手势识别器UIView.一个是标准的UITapGestureRecognizer,另一个是非常简单的触摸识别器我写道:
@implementation TouchDownGestureRecognizer
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (self.state == UIGestureRecognizerStatePossible) {
self.state = UIGestureRecognizerStateRecognized;
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
self.state = UIGestureRecognizerStateFailed;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
self.state = UIGestureRecognizerStateFailed;
}
@end
Run Code Online (Sandbox Code Playgroud)
只有在我们为包含此方法的两个委托分配委托时,它们才能一起工作:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但是当我对该视图执行长按时,触摸识别器触发并触摸识别器不会.对于短的水龙头一切都很好,他们都开火了.
我实现了所有方法UIGestureRecognizerDelegate以返回YES无效.如果我正在添加日志以查看与委托的交互以及在我自己的识别器中,我可以看到,对于短按和长按,调用顺序是相同的 - 除了调用修饰识别器.我做错了什么?
我得到了(可能是微不足道的)错误,但对可能的原因完全无能为力.我想使用SQLAlchemy在DB中插入两个对象.这些对象是相关的,这里是声明.班级用户:
class User(Base):
__tablename__ = 'cp_user'
id = Column(Integer, Sequence('id_seq'), primary_key=True)
# ... more properties
Run Code Online (Sandbox Code Playgroud)
班级图片(用户可能有很多):
class Picture(Base):
__tablename__ = 'picture'
id = Column(Integer, Sequence('id_seq'), primary_key=True)
authorId = Column('author_id', Integer, ForeignKey('cp_user.id'))
author = relation(User, primaryjoin = authorId == User.id)
# ... more properties
Run Code Online (Sandbox Code Playgroud)
在我从数据库中提取正确的用户后,我正在尝试插入新图片,或者只是创建它:
s = newSession()
user = s.query(User.name).filter("...some filter here...").first()
if not(user):
user = User()
s.add(user)
s.commit()
picture = Picture()
picture.author = user
s.add(picture)
s.commit()
Run Code Online (Sandbox Code Playgroud)
这失败,但有例外: AttributeError: 'RowTuple' object has no attribute '_sa_instance_state'
我尝试将作者的赋值移动到构造函数 - 同样的错误.我无法直接分配ID - 这打破了ORM的想法. …
我偶然发现一个有趣的情况,当物体释放出来时,我想知道在这种情况下什么是安全的.
想象一下,我们有一个类Foo:
@implementation Foo
+ (Foo *) foo {
return [[[Foo alloc] init] autorelease];
}
- (void)resign {
[FooHolder holder].foo = nil;
// here's where the things happen
}
@end
Run Code Online (Sandbox Code Playgroud)
另一个类是FooHolder(具有一个属性的单例):
@interface FooHolder : NSObject {
Foo *foo;
}
@property (retain) Foo *foo;
+ (FooHolder *)holder;
@end
Run Code Online (Sandbox Code Playgroud)
在代码中的某个地方我们这样做(先调用stepOne然后调用stepTwo;自动释放池在stepOne完成后耗尽):
- (void)stepOne {
Foo *foo = [Foo foo];
[FooHolder holder].foo = foo;
}
- (void)stepTwo {
[[FooHolder holder].foo resign]
}
Run Code Online (Sandbox Code Playgroud)
如果我试图访问self的resign方法,在转让之后,随着NSZombieEnabled,我收到一个警告self …
更新:
我添加了一个方法来检查字典中的空对象,实际上,他们找到了:

有没有人见过这样的东西?这不是由不正确的内存管理引起的.请注意,左侧的字典对象树实际上是正确的.
结束更新
我在NSMutableDictionary启用ARC时添加了许多条目.添加其中一个后,添加的对象突然变为空.这是代码(我扩展它以确保我没有发疯):
NSMutableDictionary *base = [NSMutableDictionary dictionary];
id o = [GAConstant kTRUE];
id k = [GAClause parse:@"(x 1 1)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base);
o = [GAClause parse:@"(y X)"];
k = [GAClause parse:@"(x 2 X)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base);
o = [GAConstant kTRUE];
k = [GAClause parse:@"(y 3)"];
[base setObject:o forKey:k];
NSLog(@"### Added (%@ -> %@): %@", k, o, base); …Run Code Online (Sandbox Code Playgroud)