litesoft
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package org.litesoft.GWT.server;
import java.util.*;
import org.litesoft.GWT.client.rpc.*;
import org.litesoft.bo.views.*;
import org.litesoft.bo.views.caching.*;
import org.litesoft.bo.views.communication.*;
import org.litesoft.bo.views.server.*;
import org.litesoft.core.*;
import org.litesoft.exceptions.*;
public abstract class AbstractVoServerApp extends AbstractServerApp implements VoService // don't forget this!
{
private ServerVoDataProviderMap mDPmap;
protected AbstractVoServerApp( VoCacheManager pCacheManager, ServerVoDataProviderMapFactory pFactory )
{
ServletSessionHelper.initialize( pCacheManager );
ServerContext.getMasterServerStore().set( ServerVoDataProviderMap.class, mDPmap = pFactory.createServerVoDataProviderMap() );
}
public final SCpayload process( CSpayload pPayload )
{
ContextID zContextID = ServletSessionHelper.callInit( getThreadLocalRequest().getSession( true ) );
try
{
AbstractCSrequestVOtype zRequest = (AbstractCSrequestVOtype) pPayload.getCSrequest();
if ( zRequest == null )
{
return new SCpayload( new VOSCresponseError( "" ), getTemporalTriggers() ); // Simple Poll
}
String zViewObjectRegisteredName = zRequest.getForViewObjectRegisteredName();
ServerVoDataProvider<IViewObject> zDataProvider = mDPmap.get( zViewObjectRegisteredName );
if ( zDataProvider == null )
{
throw new IllegalStateException( "No DataProvider for '" + zViewObjectRegisteredName + "'" );
}
SCresult zResult = zRequest.process( mDPmap, zDataProvider );
CacheID zCacheID = pPayload.getResponseCacheID();
if ( zCacheID != null )
{
if ( zResult.getReadObjectClassName() != null )
{
ServletSessionHelper.getCacheManager().addType( zContextID, zCacheID, zResult.getReadObjectClassName() );
}
else if ( zResult.getReadObjectURL() != null )
{
ServletSessionHelper.getCacheManager().addInstance( zContextID, zCacheID, zResult.getReadObjectURL() );
}
}
List<ObjectURL> zChangedObjectURLs = zResult.getChangedObjectURLs();
CacheID[] zCacheIDs = ServletSessionHelper.getCacheManager().invalidate( zContextID, zChangedObjectURLs );
return new SCpayload( zResult.getSCresponse(), getTemporalTriggers(), zCacheIDs );
}
catch ( SessionExpiredException e )
{
return new SCpayload( new SecuritySCresponse( true, e.getMessage() ), getTemporalTriggers() );
}
catch ( SecurityException e )
{
return new SCpayload( new SecuritySCresponse( false, e.getMessage() ), getTemporalTriggers() );
}
catch ( RuntimeException e )
{
if ( e instanceof DisplayableException )
{
DisplayableException zDisplayable = (DisplayableException) e;
return new SCpayload( new VOSCresponseError( resolve( zDisplayable.getToResolveIdentifier(), zDisplayable.getParams() ) ), getTemporalTriggers() );
}
getLogger().warn().log( e );
throw e;
}
finally
{
ServletSessionHelper.callFini();
}
}
protected synchronized TemporalTrigger[] getTemporalTriggers()
{
if ( mTemporalTriggerAccessors.isEmpty() )
{
return null;
}
TemporalTrigger[] rv = new TemporalTrigger[mTemporalTriggerAccessors.size()];
for ( int i = 0; i < mTemporalTriggerAccessors.size(); i++ )
{
rv[i] = mTemporalTriggerAccessors.get( i ).getTrigger();
}
return rv;
}
private List<TemporalTriggerAccessor> mTemporalTriggerAccessors = new ArrayList<TemporalTriggerAccessor>();
public synchronized void add( TemporalTriggerAccessor pTemporalTriggerAccessor )
{
if ( pTemporalTriggerAccessor != null )
{
mTemporalTriggerAccessors.add( pTemporalTriggerAccessor );
}
}
abstract protected String resolve( String pIdentifier, String[] pParams );
}
|
Revision |
Author |
Commited |
Message |
2
|
GeorgeS
|
Sun 07 Feb, 2010 12:50:58 +0000 |
|