小编Ser*_*nov的帖子

Java中的轻量级消息传递(异步调用)

我正在寻找Java中的轻量级消息传递框架.我的任务是以SEDA的方式处理事件:我知道处理的某些阶段可以快速完成,而其他阶段则不能完成,并且希望将这些处理阶段分离.

假设我有组件A和B以及处理引擎(这个容器或其他任何东西)调用组件A,组件A又调用组件B.我不关心组件B的执行时间是否为2秒,但是我确实关心执行例如,组分A的时间低于50ms.因此,组件A向B提交消息似乎是最合理的,B将在所需的时间处理.

我知道不同的JMS实现和Apache ActiveMQ:它们对此非常重要.我搜索了一些轻量级消息(具有消息序列化和最简单的路由等真正的基本功能)无济于事.

在这个问题上你有什么值得推荐的吗?

java messaging

9
推荐指数
2
解决办法
7166
查看次数

如何获取有关EJB部署的通知(设置计时器)?

我正在部署一个EJB,它应该设置一个计时器并由它每24小时触发一次.但是我应该在哪里设置计时器?@PostConstruct没有帮助 - 这是一个会话bean,因此在创建实际实例时将调用post-construct方法(这种情况永远不会发生,因为这个bean的唯一目的是跟踪计时器).

有没有其他方法来获取有关bean部署(而不是实例化)的通知,以便在那里设置计时器?

谢谢

java ejb ejb-3.0

9
推荐指数
2
解决办法
1595
查看次数

从手写的持久层迁移到ORM

我们目前正在评估从手写持久层迁移到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.在我看到这个问题时,我们需要解决这些问题:

  • 找到一种方法来重用至少一些书面SQL来表达映射
  • 有可能发出本机SQL查询而无需手动分解其结果(即避免手动,rs.getInt(42)因为它们对模式更改非常敏感)
  • 添加非侵入式缓存层
  • 保持性能数据.

你有没有可以推荐的ORM框架?

更新要了解我们正在谈论的性能数据:

  • 后端数据库是TimesTen,内存数据库,与JVM在同一台机器上运行
  • 我们发现,改变rs.getInt("column1")以rs.getInt(42)带来我们认为重要的性能提升.

java sql database performance orm

9
推荐指数
2
解决办法
1184
查看次数

检查Haskell中函数的内部

我是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中"反汇编"函数的手段是什么?

haskell functional-programming sicp

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

使用ReactiveCocoa重试异步操作

我正在使用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)

frp ios reactive-cocoa

7
推荐指数
1
解决办法
2560
查看次数

clang中的代码覆盖率

我正在尝试为在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)

c linux code-coverage llvm clang

6
推荐指数
1
解决办法
5281
查看次数

同时使用触摸和触摸手势识别器

我正在使用两个手势识别器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无效.如果我正在添加日志以查看与委托的交互以及在我自己的识别器中,我可以看到,对于短按和长按,调用顺序是相同的 - 除了调用修饰识别器.我做错了什么?

iphone uikit uigesturerecognizer ios

4
推荐指数
1
解决办法
2100
查看次数

在SQLAlchemy中插入两个相关对象失败

我得到了(可能是微不足道的)错误,但对可能的原因完全无能为力.我想使用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的想法. …

python sql orm sqlalchemy

3
推荐指数
1
解决办法
3516
查看次数

Objective-C:从自身释放对象

我偶然发现一个有趣的情况,当物体释放出来时,我想知道在这种情况下什么是安全的.

想象一下,我们有一个类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 …

objective-c

2
推荐指数
1
解决办法
329
查看次数

NSMutableDictionary中的对象突然变为null

更新:

我添加了一个方法来检查字典中的空对象,实际上,他们找到了:

NSMutableDictionary中为空

有没有人见过这样的东西?这不是由不正确的内存管理引起的.请注意,左侧的字典对象树实际上是正确的.

结束更新

我在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)

objective-c ios automatic-ref-counting

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