Hi all, Long time EOF/WebObjects user, new to Cayenne. I’m finding a lot of Cayenne is very similar to EOF. There are clearly major differences too. One of these is the ServerRuntime concept. It seems like it is fairly similar to an EOObjectStoreCoordinator at first glance, but I’m finding it is quite different.
Let me share some code to illustrate my confusion: final ServerRuntime first = new ServerRuntime("cayenne-project.xml"); final ServerRuntime second = new ServerRuntime("cayenne-project.xml"); final ServerRuntime third = new ServerRuntime("cayenne-project2.xml"); final ObjectContext oc = first.newContext(); final ObjectContext oc2 = second.newContext(oc); final ObjectContext oc3 = third.newContext(oc); final ObjectContext oc4 = third.newContext(); final ObjectContext oc5 = first.newContext(oc4); final Customer c1 = Customer.customerForLoginId(oc, "login id"); final Customer c2 = Customer.customerForLoginId(oc2, "login id"); final Customer c3 = Customer.customerForLoginId(oc3, "login id"); final Customer c4 = Customer.customerForLoginId(oc4, "login id"); final Customer c5 = Customer.customerForLoginId(oc5, "login id"); where public static Customer customerForLoginId(final ObjectContext context, final String loginId) { return SelectQuery.query(Customer.class, LOGIN_ID.eq(loginId)).selectOne(context); } cayenne-project.xml contains all my cayenne models. cayenne-project2.xml is entirely empty. Exceptions are not thrown until the last two lines fetching c4 and c5. I didn’t expect to make it past oc2. I only expected c1 to work for fetching. In the given situation, I’m obviously working on authentication. In the EOF code there is a process that logs a login attempt. In order to do that in EOF, I use a peer editing context to create, edit, and save the log object to the database. Therefore, I need a way to get a peer ObjectContext given an ObjectContext. Thus far, the best I’ve come up with is to have a public static final ServerRuntime stashed on a utility class, and use that one instance for everything… but this seems to go against all the work done with dependency injection. I tried to follow the advice found in this message, http://cayenne.markmail.org/search/?q=peer+objectcontext#query:peer%20objectcontext+page:2+mid:v77r6qhv6c4m72iy+state:results but storing the Injector in the user properties breaks serialization of the ObjectContext. Is there an easy way to get a peer OC that I am missing? Also, how do I know the OC is appropriate for something like a SelectQuery? Do I need to wrap all calls in try blocks in case some code hands in the wrong ServerRuntime’s OC? Thanks, Ramsey