Search in sources :

Example 1 with ClientMessage

use of org.apache.cayenne.remote.ClientMessage in project cayenne by apache.

the class LocalConnection method doSendMessage.

/**
 * Dispatches a message to an internal handler.
 */
@Override
protected Object doSendMessage(ClientMessage message) throws CayenneRuntimeException {
    ClientMessage processedMessage;
    try {
        switch(serializationPolicy) {
            case HESSIAN_SERIALIZATION:
                processedMessage = (ClientMessage) HessianUtil.cloneViaClientServerSerialization(message, channel.getEntityResolver());
                break;
            case JAVA_SERIALIZATION:
                processedMessage = Util.cloneViaSerialization(message);
                break;
            default:
                processedMessage = message;
        }
    } catch (Exception ex) {
        throw new CayenneRuntimeException("Error serializing message", ex);
    }
    Serializable result = (Serializable) DispatchHelper.dispatch(channel, processedMessage);
    try {
        switch(serializationPolicy) {
            case HESSIAN_SERIALIZATION:
                return HessianUtil.cloneViaServerClientSerialization(result, channel.getEntityResolver());
            case JAVA_SERIALIZATION:
                return Util.cloneViaSerialization(result);
            default:
                return result;
        }
    } catch (Exception ex) {
        throw new CayenneRuntimeException("Error deserializing result", ex);
    }
}
Also used : Serializable(java.io.Serializable) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException) ClientMessage(org.apache.cayenne.remote.ClientMessage) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException)

Example 2 with ClientMessage

use of org.apache.cayenne.remote.ClientMessage in project cayenne by apache.

the class CayenneContextIT method testBeforeHollowDeleteShouldChangeStateToCommited.

@Test
public void testBeforeHollowDeleteShouldChangeStateToCommited() {
    ObjectId gid = new ObjectId("MtTable1", "a", "b");
    final ClientMtTable1 inflated = new ClientMtTable1();
    inflated.setPersistenceState(PersistenceState.COMMITTED);
    inflated.setObjectId(gid);
    inflated.setGlobalAttribute1("abc");
    ClientConnection connection = mock(ClientConnection.class);
    when(connection.sendMessage((ClientMessage) any())).thenAnswer(new Answer<Object>() {

        public Object answer(InvocationOnMock invocation) {
            ClientMessage arg = (ClientMessage) invocation.getArguments()[0];
            if (arg instanceof BootstrapMessage) {
                return new EntityResolver();
            } else {
                return new GenericResponse(Arrays.asList(inflated));
            }
        }
    });
    ClientChannel channel = new ClientChannel(connection, false, new MockEventManager(), false);
    CayenneContext context = new CayenneContext(channel);
    context.setEntityResolver(serverContext.getEntityResolver().getClientEntityResolver());
    ClientMtTable1 hollow = context.localObject(inflated);
    assertEquals(PersistenceState.HOLLOW, hollow.getPersistenceState());
    // testing this...
    context.deleteObjects(hollow);
    assertSame(hollow, context.getGraphManager().getNode(gid));
    assertEquals(inflated.getGlobalAttribute1Direct(), hollow.getGlobalAttribute1Direct());
    assertEquals(PersistenceState.DELETED, hollow.getPersistenceState());
}
Also used : GenericResponse(org.apache.cayenne.util.GenericResponse) BootstrapMessage(org.apache.cayenne.remote.BootstrapMessage) ClientMessage(org.apache.cayenne.remote.ClientMessage) EntityResolver(org.apache.cayenne.map.EntityResolver) ClientChannel(org.apache.cayenne.remote.ClientChannel) ClientMtTable1(org.apache.cayenne.testdo.mt.ClientMtTable1) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ClientConnection(org.apache.cayenne.remote.ClientConnection) MockEventManager(org.apache.cayenne.event.MockEventManager) Test(org.junit.Test)

Example 3 with ClientMessage

use of org.apache.cayenne.remote.ClientMessage in project cayenne by apache.

the class CayenneContextIT method testBeforePropertyReadShouldInflateHollow.

@Test
public void testBeforePropertyReadShouldInflateHollow() {
    ObjectId gid = new ObjectId("MtTable1", "a", "b");
    final ClientMtTable1 inflated = new ClientMtTable1();
    inflated.setPersistenceState(PersistenceState.COMMITTED);
    inflated.setObjectId(gid);
    inflated.setGlobalAttribute1("abc");
    ClientConnection connection = mock(ClientConnection.class);
    when(connection.sendMessage((ClientMessage) any())).thenAnswer(new Answer<Object>() {

        public Object answer(InvocationOnMock invocation) {
            ClientMessage arg = (ClientMessage) invocation.getArguments()[0];
            if (arg instanceof BootstrapMessage) {
                return new EntityResolver();
            } else {
                return new GenericResponse(Arrays.asList(inflated));
            }
        }
    });
    ClientChannel channel = new ClientChannel(connection, false, new MockEventManager(), false);
    // check that a HOLLOW object is infalted on "beforePropertyRead"
    ClientMtTable1 hollow = new ClientMtTable1();
    hollow.setPersistenceState(PersistenceState.HOLLOW);
    hollow.setObjectId(gid);
    final boolean[] selectExecuted = new boolean[1];
    CayenneContext context = new CayenneContext(channel) {

        @Override
        public List<?> performQuery(Query query) {
            selectExecuted[0] = true;
            return super.performQuery(query);
        }
    };
    context.setEntityResolver(serverContext.getEntityResolver().getClientEntityResolver());
    context.graphManager.registerNode(hollow.getObjectId(), hollow);
    // testing this...
    context.prepareForAccess(hollow, ClientMtTable1.GLOBAL_ATTRIBUTE1_PROPERTY, false);
    assertTrue(selectExecuted[0]);
    assertSame(hollow, context.getGraphManager().getNode(gid));
    assertEquals(inflated.getGlobalAttribute1Direct(), hollow.getGlobalAttribute1Direct());
    assertEquals(PersistenceState.COMMITTED, hollow.getPersistenceState());
}
Also used : Query(org.apache.cayenne.query.Query) GenericResponse(org.apache.cayenne.util.GenericResponse) BootstrapMessage(org.apache.cayenne.remote.BootstrapMessage) ClientMessage(org.apache.cayenne.remote.ClientMessage) EntityResolver(org.apache.cayenne.map.EntityResolver) ClientChannel(org.apache.cayenne.remote.ClientChannel) ClientMtTable1(org.apache.cayenne.testdo.mt.ClientMtTable1) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ClientConnection(org.apache.cayenne.remote.ClientConnection) MockEventManager(org.apache.cayenne.event.MockEventManager) Test(org.junit.Test)

Example 4 with ClientMessage

use of org.apache.cayenne.remote.ClientMessage in project cayenne by apache.

the class ProtostuffLocalConnection method doSendMessage.

@Override
protected Object doSendMessage(ClientMessage message) throws CayenneRuntimeException {
    try {
        ClientMessage processedMessage = (ClientMessage) cloneViaSerializationService(message);
        Object result = DispatchHelper.dispatch(channel, processedMessage);
        return cloneViaSerializationService(result);
    } catch (Exception ex) {
        throw new CayenneRuntimeException("Error deserializing result", ex);
    }
}
Also used : CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException) ClientMessage(org.apache.cayenne.remote.ClientMessage) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException) IOException(java.io.IOException)

Aggregations

ClientMessage (org.apache.cayenne.remote.ClientMessage)4 CayenneRuntimeException (org.apache.cayenne.CayenneRuntimeException)2 MockEventManager (org.apache.cayenne.event.MockEventManager)2 EntityResolver (org.apache.cayenne.map.EntityResolver)2 BootstrapMessage (org.apache.cayenne.remote.BootstrapMessage)2 ClientChannel (org.apache.cayenne.remote.ClientChannel)2 ClientConnection (org.apache.cayenne.remote.ClientConnection)2 ClientMtTable1 (org.apache.cayenne.testdo.mt.ClientMtTable1)2 GenericResponse (org.apache.cayenne.util.GenericResponse)2 Test (org.junit.Test)2 InvocationOnMock (org.mockito.invocation.InvocationOnMock)2 IOException (java.io.IOException)1 Serializable (java.io.Serializable)1 Query (org.apache.cayenne.query.Query)1