1 // **********************************************************************
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
8 // **********************************************************************
10 class Server
extends Ice
.Application
12 static class ObjectFactory
implements Ice
.ObjectFactory
14 ObjectFactory(Class factoryClass
)
16 _factoryClass
= factoryClass
;
24 return (Ice
.Object
)_factoryClass
.newInstance();
26 catch(InstantiationException ex
)
28 throw new Ice
.InitializationException(ex
.toString());
30 catch(IllegalAccessException ex
)
32 throw new Ice
.InitializationException(ex
.toString());
41 private Class _factoryClass
;
44 private java
.util
.Map
<String
, String
>
45 createTypeMap(String defaultFacetType
)
47 java
.util
.Map
<String
, String
> result
= new java
.util
.HashMap
<String
, String
>();
48 result
.put("", defaultFacetType
);
57 System
.err
.println(appName() + ": too many arguments");
61 Ice
.Properties properties
= communicator().getProperties();
63 _bankEdge
= properties
.getPropertyAsInt("Bank.Edge");
68 System
.out
.println("Bank edge is " + _bankEdge
);
71 // Create an object adapter
73 Ice
.ObjectAdapter adapter
= communicator().createObjectAdapter("Casino");
78 communicator().addObjectFactory(new ObjectFactory(BankI
.class), CasinoStore
.PersistentBank
.ice_staticId());
79 communicator().addObjectFactory(new ObjectFactory(PlayerI
.class), CasinoStore
.PersistentPlayer
.ice_staticId());
80 communicator().addObjectFactory(new ObjectFactory(BetI
.class), CasinoStore
.PersistentBet
.ice_staticId());
83 // Create evictors; each type gets its own type-specific evictor
90 Freeze
.ServantInitializer bankInitializer
= new Freeze
.ServantInitializer()
93 initialize(Ice
.ObjectAdapter adapter
, Ice
.Identity identity
, String facet
, Ice
.Object servant
)
95 ((BankI
)servant
).init(_bankPrx
, _bankEvictor
, _playerEvictor
, _betEvictor
, _betResolver
, _bankEdge
);
100 Freeze
.Util
.createTransactionalEvictor(adapter
, _envName
, "bank",
101 createTypeMap(CasinoStore
.PersistentBank
.ice_staticId()),
102 bankInitializer
, null, true);
104 int size
= properties
.getPropertyAsInt("Bank.EvictorSize");
107 _bankEvictor
.setSize(size
);
110 adapter
.addServantLocator(_bankEvictor
, "bank");
116 Freeze
.ServantInitializer playerInitializer
= new Freeze
.ServantInitializer()
119 initialize(Ice
.ObjectAdapter adapter
, Ice
.Identity identity
, String facet
, Ice
.Object servant
)
121 CasinoStore
.PersistentPlayerPrx prx
=
122 CasinoStore
.PersistentPlayerPrxHelper
.uncheckedCast(adapter
.createProxy(identity
));
123 ((PlayerI
)servant
).init(prx
, _playerEvictor
, _bankPrx
);
128 Freeze
.Util
.createTransactionalEvictor(adapter
, _envName
, "player",
129 createTypeMap(CasinoStore
.PersistentPlayer
.ice_staticId()),
130 playerInitializer
, null, true);
132 size
= properties
.getPropertyAsInt("Player.EvictorSize");
135 _playerEvictor
.setSize(size
);
138 adapter
.addServantLocator(_playerEvictor
, "player");
144 Freeze
.ServantInitializer betInitializer
= new Freeze
.ServantInitializer()
147 initialize(Ice
.ObjectAdapter adapter
, Ice
.Identity identity
, String facet
, Ice
.Object servant
)
149 ((BetI
)servant
).init(_betEvictor
, _bankEdge
);
154 Freeze
.Util
.createTransactionalEvictor(adapter
, _envName
, "bet",
155 createTypeMap(CasinoStore
.PersistentBet
.ice_staticId()),
156 betInitializer
, null, true);
157 size
= properties
.getPropertyAsInt("Bet.EvictorSize");
160 _betEvictor
.setSize(size
);
163 adapter
.addServantLocator(_betEvictor
, "bet");
169 _betResolver
= new BetResolver();
174 // Retrieve / create the bank
177 Ice
.Identity bankId
= Ice
.Util
.stringToIdentity("bank/Montecito");
178 _bankPrx
= CasinoStore
.PersistentBankPrxHelper
.uncheckedCast(adapter
.createProxy(bankId
));
180 if(!_bankEvictor
.hasObject(bankId
))
183 new BankI(_bankPrx
, _bankEvictor
, _playerEvictor
, _betEvictor
, _betResolver
, _bankEdge
),
188 // reload existing bets into the bet resolver
190 _bankPrx
.reloadBets();
193 // Create players / recreate missing players using a transaction
194 // (the transaction is not really necessary here, but a good demo)
198 { "al", "bob", "charlie", "dave", "ed", "fred", "gene", "herb", "irvin", "joe", "ken", "lance" };
201 Freeze
.Connection connection
= Freeze
.Util
.createConnection(communicator(), _envName
);
202 Freeze
.Transaction tx
= connection
.beginTransaction();
204 _playerEvictor
.setCurrentTransaction(tx
);
206 for(String player
: players
)
208 Ice
.Identity ident
= new Ice
.Identity(player
, "player");
209 if(!_playerEvictor
.hasObject(ident
))
211 _playerEvictor
.add(new PlayerI(), ident
);
216 assert(_playerEvictor
.getCurrentTransaction() == null);
221 // Everything is ready, activate
225 shutdownOnInterrupt();
226 communicator().waitForShutdown();
231 _betResolver
.cancel();
236 Server(String envName
)
244 Server app
= new Server("db");
245 app
.main("demo.Freeze.casino.Server", args
, "config.server");
248 private String _envName
;
250 private CasinoStore
.PersistentBankPrx _bankPrx
;
251 private Freeze
.TransactionalEvictor _bankEvictor
;
252 private Freeze
.TransactionalEvictor _playerEvictor
;
253 private Freeze
.TransactionalEvictor _betEvictor
;
254 private BetResolver _betResolver
;
255 private int _bankEdge
;