Simple coroutines/fibers implementations through bytecode instrumentation.
TODO
jfibers-maven-plugin looks for and instruments all classes with methods which have Fiber<T>
as a return type and methods body with either an instruction
INVOKEVIRTUAL com.github.rostmyr.jfibers.Fiber result (Fiber<T>/T/Future<T>)Fiber<T>
or INVOKEVIRTUAL com.github.rostmyr.jfibers.Fiber nothing ()Fiber<Void>
.
public class MyClass {
private UserService userService;
public void Fiber<String> updateUserPhone(long userId, String phone) {
User user = call(userService.getUser(userId));
user.setPhone(phone);
user = call(userService.saveUser(user));
return result(user);
}
}
public class MyClass {
private UserService userService;
public void Fiber<String> updateUserPhone(long userId, String phone) {
return new updateUserPhone_Fiber(userId, phone);
}
protected int updateUserPhone_FiberUpdate(updateUserPhone_Fiber fiber) {
switch(fiber.getState()) {
TODO
}
}
public class updateUserPhone_Fiber extends Fiber<String> {
public long userId;
public String phone;
public callMethodChain_Fiber(long userId, String phone) {
this.userId = userId;
this.phone = phone;
}
public int update() {
return TestFiberModel.this.callMethodChain_FiberUpdate(this);
}
}
}
http://ssw.jku.at/General/Staff/LS/coro/
https://github.com/vsilaev/tascalate-javaflow
https://www.youtube.com/watch?v=_Z8R9NmH0i4