a calling b here is very bad because most likely the @Lock(LockType.WRITE) is ignored since transaction and (just by inference) also concurrency attributes are only applied in a client view mode.
i.e the attributes are only applied when the business method is being invoked from some injected or looked up reference of the bean.
Here post and a will not throw exceptions because the container will allow multiple threads to access the methods
and b called through a is really run in READ mode as well. (i.e b is not considered a business method when called through method a).
To get an exception, set the @AccessTimeout value to zero for method b, make method b do some longish task and call method b twice (one call after another) from a client view of the bean or two different clients of the bean. The second call should get the javax.ejb.ConcurrentAccessException.