String name,
int threadMax)
{
InjectManager beanManager = InjectManager.getCurrent();
ActorHolder actor = (ActorHolder) beanManager.getReference(bean);
actor.setBroker(this);
String address = name;
if (address == null || "".equals(address))
address = bean.getName();
if (address == null || "".equals(address))
address = bean.getBeanClass().getSimpleName();
if (address.indexOf('@') < 0)
address = address + '@' + getAddress();
else if (address.endsWith("@"))
address = address.substring(0, address.length() - 1);
actor.setAddress(address);
ActorHolder bamActor = actor;
Mailbox mailbox;
// queue
if (threadMax > 0) {
MessageStream actorStream = bamActor.getActor();
mailbox = new MultiworkerMailbox(address, actorStream, this, threadMax);
// bamActor.setActorStream(actorStream);
}
else {
mailbox = new PassthroughMailbox(address, bamActor.getActor(), this);
}
addMailbox(mailbox);
Environment.addCloseListener(new ActorClose(mailbox));