rhoconnect 3.0.0.beta1 → 3.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/CHANGELOG +16 -2
  2. data/Gemfile +14 -5
  3. data/Gemfile.lock +13 -23
  4. data/Rakefile +86 -0
  5. data/bench/bench_runner.rb +5 -4
  6. data/bench/benchapp/Gemfile +17 -8
  7. data/bench/blobapp/Gemfile +13 -14
  8. data/doc/adapters-crm.txt +226 -0
  9. data/doc/adapters-intro.txt +18 -0
  10. data/doc/client.txt +29 -2
  11. data/doc/heroku-addon.txt +54 -0
  12. data/doc/install.txt +1 -2
  13. data/doc/migration.txt +18 -6
  14. data/doc/net-plugin.txt +276 -0
  15. data/doc/plugin-intro.txt +6 -0
  16. data/doc/push.txt +1 -1
  17. data/doc/rails-plugin.txt +116 -0
  18. data/doc/rest-api.txt +2 -2
  19. data/doc/settings.txt +59 -0
  20. data/doc/tutorial.txt +8 -5
  21. data/generators/rhoconnect.rb +30 -0
  22. data/generators/templates/application/Gemfile +16 -7
  23. data/generators/templates/application/gitignore +4 -0
  24. data/install.sh +74 -106
  25. data/installer/deb-scripts/LICENSE +75 -0
  26. data/installer/deb-scripts/install.sh +300 -0
  27. data/installer/deb-scripts/scripts/rho_connect_install_constants.rb +32 -0
  28. data/installer/deb-scripts/scripts/rho_connect_install_installers.rb +103 -0
  29. data/installer/deb-scripts/scripts/rho_connect_install_utilities.rb +110 -0
  30. data/installer/deb-scripts/scripts/rhoinstaller.rb +55 -0
  31. data/installer/deb-scripts/utils/README +67 -0
  32. data/installer/deb-scripts/utils/create_texts.rb +76 -0
  33. data/installer/deb-scripts/utils/redis_init_script +124 -0
  34. data/installer/deb-scripts/utils/redis_log_rotate +8 -0
  35. data/installer/unix-like/install.sh +361 -0
  36. data/installer/unix-like/post-install.sh +8 -0
  37. data/installer/unix-like/pre-install.sh +8 -0
  38. data/installer/unix-like/rho_connect_install_constants.rb +9 -14
  39. data/installer/unix-like/rho_connect_install_debian.rb +7 -5
  40. data/installer/unix-like/rho_connect_install_dnd.rb +6 -6
  41. data/installer/unix-like/rho_connect_install_get_params.rb +1 -1
  42. data/installer/unix-like/rho_connect_install_installers.rb +39 -38
  43. data/installer/unix-like/rho_connect_install_utilities.rb +9 -10
  44. data/installer/unix-like/rho_connect_install_yum.rb +6 -5
  45. data/installer/unix-like/rhoinstaller.rb +8 -3
  46. data/installer/utils/create_texts.rb +313 -85
  47. data/installer/windows/rhosync.nsi +5 -5
  48. data/lib/rhoconnect/api/application/clientcreate.rb +1 -1
  49. data/lib/rhoconnect/api/application/clientregister.rb +1 -1
  50. data/lib/rhoconnect/api/application/clientreset.rb +1 -1
  51. data/lib/rhoconnect/client.rb +0 -1
  52. data/lib/rhoconnect/client_sync.rb +1 -0
  53. data/lib/rhoconnect/console/app/routes/home.rb +1 -1
  54. data/lib/rhoconnect/console/app/routes/user.rb +8 -3
  55. data/lib/rhoconnect/console/app/views/adapter.erb +2 -2
  56. data/lib/rhoconnect/console/app/views/ping.erb +14 -2
  57. data/lib/rhoconnect/console/app/views/users.erb +8 -1
  58. data/lib/rhoconnect/jobs/ping_job.rb +11 -3
  59. data/lib/rhoconnect/model.rb +2 -2
  60. data/lib/rhoconnect/read_state.rb +2 -0
  61. data/lib/rhoconnect/server.rb +4 -3
  62. data/lib/rhoconnect/source.rb +33 -6
  63. data/lib/rhoconnect/source_adapter.rb +5 -9
  64. data/lib/rhoconnect/source_sync.rb +11 -5
  65. data/lib/rhoconnect/store.rb +7 -4
  66. data/lib/rhoconnect/tasks.rb +3 -3
  67. data/lib/rhoconnect/version.rb +1 -1
  68. data/lib/rhoconnect.rb +22 -8
  69. data/rhoconnect.gemspec +4 -22
  70. data/spec/api/application/rhoconnect_api_spec.rb +54 -8
  71. data/spec/api/source/get_source_params_spec.rb +2 -1
  72. data/spec/api/source/list_sources_spec.rb +3 -3
  73. data/spec/app_spec.rb +8 -1
  74. data/spec/apps/rhotestapp/settings/settings.yml +10 -5
  75. data/spec/apps/rhotestapp/sources/other_adapter.rb +7 -0
  76. data/spec/client_sync_spec.rb +5 -8
  77. data/spec/dynamic_adapter_spec.rb +8 -8
  78. data/spec/generator/generator_spec.rb +4 -2
  79. data/spec/jobs/ping_job_spec.rb +53 -0
  80. data/spec/model_spec.rb +2 -2
  81. data/spec/rhosync_spec.rb +1 -1
  82. data/spec/server/server_spec.rb +3 -14
  83. data/spec/source_sync_spec.rb +84 -2
  84. data/spec/support/shared_examples.rb +2 -2
  85. data/tasks/redis.rake +2 -2
  86. metadata +30 -41
  87. data/spec/api/rhosync_api_spec.rb.orig +0 -606
@@ -46,6 +46,11 @@ module Rhoconnect
46
46
  template.destination = "#{name}/config.ru"
47
47
  end
48
48
 
49
+ template :gitignore do |template|
50
+ template.source = 'gitignore'
51
+ template.destination = "#{name}/.gitignore"
52
+ end
53
+
49
54
  template :settings do |template|
50
55
  template.source = 'settings/settings.yml'
51
56
  template.destination = "#{name}/settings/settings.yml"
@@ -75,6 +80,26 @@ module Rhoconnect
75
80
  template.source = 'spec/spec_helper.rb'
76
81
  template.destination = "#{name}/spec/spec_helper.rb"
77
82
  end
83
+
84
+ empty_directory :public do |dir|
85
+ dir.destination = File.join("#{name}", 'public')
86
+ end
87
+
88
+ def after_run
89
+ install_gems_note = <<_BUNDLE_INSTALL_
90
+
91
+ To ensure that all the dependencies in your generated rhoconnect application
92
+ are available execute these commands:
93
+ cd #{name}; bundle install
94
+
95
+ If you're setting up the application in a production environment run the following:
96
+ cd #{name}; bundle install --without=test development
97
+
98
+ _BUNDLE_INSTALL_
99
+
100
+ puts install_gems_note
101
+ end
102
+
78
103
  end
79
104
 
80
105
  class SourceGenerator < BaseGenerator
@@ -105,6 +130,11 @@ module Rhoconnect
105
130
  envs[env] = settings[env]
106
131
  end
107
132
  file.write envs.to_yaml[3..-1]
133
+ # write all other settings
134
+ [:development, :test, :production, :sources].each do |key|
135
+ settings.delete(key)
136
+ end
137
+ file.write settings.to_yaml[3..-1] unless settings.empty?
108
138
  end
109
139
  end
110
140
 
@@ -2,16 +2,25 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'rhoconnect', '<%=gem_version%>'
4
4
 
5
- gem 'warbler', "~> 1.3.0", :platforms => :jruby
5
+ # Helps with some of the limitations of green threads, not needed in ruby 1.9.x
6
+ gem 'SystemTimer', '~> 1.2.3', :platforms => :ruby_18
7
+
8
+ platforms :jruby do
9
+ gem 'jdbc-sqlite3', ">= 3.7.2"
10
+ gem 'dbi', ">= 0.4.5"
11
+ gem 'dbd-jdbc', ">= 0.1.4"
12
+ gem 'jruby-openssl', ">= 0.7.4"
13
+ gem 'warbler'
14
+ end
15
+
16
+ gem 'sqlite3', ">= 1.3.3", :platforms => [:ruby, :mswin, :mingw]
17
+
18
+ # For jruby trinidad JRuby web server is used
19
+ gem 'trinidad', :platforms => :jruby
6
20
 
7
21
  group :development do
8
22
  # By default to run application thin web server is used
9
- gem 'thin', :platforms => :ruby
10
-
11
- # For jruby trinidad JRuby web server is used
12
- gem 'trinidad', :platforms => :jruby
13
- # Alternative for jruby
14
- # gem 'jetty-rackup', :platforms => :jruby
23
+ gem 'thin', :platforms => [:ruby, :mswin, :mingw]
15
24
  end
16
25
 
17
26
  group :test do
@@ -0,0 +1,4 @@
1
+ coverage
2
+ log
3
+
4
+ *.rdb
data/install.sh CHANGED
@@ -13,10 +13,8 @@ installTime=$timeInitial
13
13
 
14
14
  # CONSTANTS
15
15
 
16
+ RHOCONNECT_VERSION="3.0.0.beta3"
16
17
  DEPS=(gcc tar make wget)
17
- # This array is a list of all software that needs to be installed for
18
- # the process to be successful
19
- INSTALL_ARRAY=(ruby rubygems redis sqlite passenger rhoconnect)
20
18
 
21
19
  # FUNCTIONS
22
20
 
@@ -37,7 +35,7 @@ Usage: install.sh [options]\n
37
35
  -r, --ruby-version VERSION Specify version of ruby to install. Default is Ruby Enterprise.\n
38
36
  -s, --silent Perform installation with minimal output.\n
39
37
  --skip-ruby Use system ruby instead of ruby installed through this installer.\n
40
- -w, --web-server SERVER Specify that you are using web server SERVER. Default is Apache2.\n
38
+ -w, --web-server SERVER Specify that you are using web server SERVER. Default is Nginx.\n
41
39
  -h, --help Display this screen.\n
42
40
  "
43
41
  # End script after printing help message
@@ -49,64 +47,60 @@ checkDeps ()
49
47
  missingDeps=""
50
48
  for ((i=0; i<${#DEPS[@]}; i++))
51
49
  do
52
- dep=`which ${DEPS[$i]}`
50
+ dep=`which ${DEPS[$i]} 2> /dev/null`
53
51
  if [[ $dep == "" ]]; then
54
52
  missingDeps="${missingDeps}${DEPS[$i]}\n"
55
53
  fi
56
54
  done
57
55
 
58
56
  if [[ $missingDeps != "" ]]; then
59
- echoLog "Dependencies Missing:" | tee -a $log
57
+ echoLog "Dependencies Missing: " | tee -a $log
60
58
  echoLog "${missingDeps}" | tee -a $log
61
59
  echoLog "These must be installed before setup can continue..." | tee -a $log
62
60
  exit
63
61
  fi
64
62
  } #end checkDeps
65
63
 
66
- updatePkgMgr ()
64
+ determinePkgMgr ()
67
65
  {
68
- pmutd="pkgMgrUTD"
69
- if ! [ -e $pmutd ]; then
70
- if [[ `which apt-get` != "" ]]; then
71
- pkgMgr="apt-get -y"
72
- dist='debian'
73
- $pkgMgr update
74
- $pkgMgr --version >> $pmutd
75
- elif [[ `which yum` != "" ]]; then
76
- pkgMgr="yum -y"
77
- dist='yum'
78
- $pkgMgr update
79
- $pkgMgr version >> $pmutd
80
- else
81
- echoLog "No supported package manager." | tee -a $log
82
- echoLog "Please install apt-get or yum to continue..." | tee -a $log
83
- exit
84
- fi
66
+ if [[ `which apt-get 2> /dev/null` != "" ]]; then
67
+ pkgMgr="apt-get -y"
68
+ dist='debian'
69
+ elif [[ `which yum 2> /dev/null` != "" ]]; then
70
+ pkgMgr="yum -y"
71
+ dist='yum'
72
+ else
73
+ echoLog "No supported package manager." | tee -a $log
74
+ echoLog "Please install apt-get or yum to continue..." | tee -a $log
75
+ exit
85
76
  fi
86
- } #end updatePkgMgr
77
+ } #end determinePkgMgr
87
78
 
88
79
  parseOpts ()
89
80
  {
90
- for i; do
91
- i="${i,,}"
81
+ for i in "$*"; do
82
+ i=$(echo $i | tr '[:upper:]' '[:lower:]')
92
83
  opts="${opts}${i} "
93
84
  # looking for getVal flag to grab next value.
94
85
  case $getVal in
95
86
  "p" )
96
- prefix=$getVal
87
+ prefix=$i
97
88
  ;;
98
89
  "w" )
99
- webServer=$getVal
90
+ webServer=$i
100
91
  ;;
101
92
  "r" )
102
- rubyVersion=$getVal
93
+ rubyVersion=$i
94
+ ;;
95
+ "v" )
96
+ rhoconnectVersion=$i
103
97
  ;;
104
98
  * )
105
99
  ;;
106
100
  esac
107
101
 
108
102
  # Check options passed in and assign flags where applicable
109
- case ${i} in
103
+ case $i in
110
104
  --web-server | -w )
111
105
  getVal="w"
112
106
  ;;
@@ -120,17 +114,23 @@ parseOpts ()
120
114
  ;;
121
115
  --silent | -s )
122
116
  ;;
123
- --no-redis )
117
+ --skip-redis )
124
118
  redis=false
125
119
  ;;
126
120
  --skip-ruby )
121
+ ruby=false
122
+ ;;
123
+ -v )
124
+ getVal="v"
127
125
  ;;
128
126
  --help | -h )
129
127
  showHelp
130
128
  ;;
131
129
  * )
132
- echoLog "${i} is not a valid option" | tee -a $log
133
- exit
130
+ #if [ "${i}" ]; then
131
+ # echoLog "${i} is not a valid option" | tee -a $log
132
+ # exit
133
+ #fi
134
134
  ;;
135
135
  esac
136
136
  done
@@ -138,11 +138,6 @@ parseOpts ()
138
138
 
139
139
  cleanPrefix ()
140
140
  {
141
- # put a / on the end if not there already
142
- if [[ $prefix != *\/ ]]; then
143
- prefix=$prefix"/"
144
- fi
145
-
146
141
  # make sure there are no double /'s in the prefix path
147
142
  prefix=${prefix/\/\/+/"/"}
148
143
 
@@ -161,33 +156,25 @@ setPrefixDependantPaths ()
161
156
  {
162
157
  # if rubyBinDir not specified
163
158
  if [$rubyBinDir == ""]; then
164
- rubyBinDir="${prefix}ruby/bin"
159
+ rubyBinDir="${prefix}/ruby/bin"
165
160
  fi
166
161
 
167
162
  # If logs directory does not exist, create it
168
- if ! [[ -d "${prefix}logs/" ]]; then
169
- mkdir "${prefix}logs/"
163
+ if ! [[ -d "${prefix}/logs/" ]]; then
164
+ mkdir "${prefix}/logs/"
170
165
  fi
171
166
 
172
167
  # Make path to log file absolute and create directory if not already existent
173
- log="${prefix}logs/${log}"
174
- installchecklist=$prefix"installchecklist"
168
+ log="${prefix}/logs/${log}"
175
169
  touch $log
176
- touch $installchecklist
177
170
 
178
171
  # Add the log file path to the info file
179
- echoLog $log >> info.dat
172
+ `echo $log >> info.dat`
180
173
  cat info.dat
181
174
 
182
- # Move pmutd into installation directory
183
- if ! [ -e $prefix$pmutd ]; then
184
- mv $pmutd $prefix$pmutd
185
- pmutd=$prefix$pmutd
186
- fi
187
-
188
175
  # Move info.dat into installation directory if not already there
189
- if ! [ -e "${prefix}info.dat" ]; then
190
- mv info.dat "${prefix}info.dat"
176
+ if ! [ -e "${prefix}/info.dat" ]; then
177
+ mv info.dat "${prefix}/info.dat"
191
178
  fi
192
179
  } #end setPrefixDependantPaths
193
180
 
@@ -195,12 +182,12 @@ setDefaults ()
195
182
  {
196
183
  # if $prefix not specified set to /opt/rhoconnect
197
184
  if [$prefix == ""]; then
198
- prefix="/opt/rhoconnect/"
185
+ prefix="/opt/rhoconnect"
199
186
  fi
200
187
 
201
- # if $webServer not specified set to apache2
188
+ # if $webServer not specified set to nginx
202
189
  if [$webServer == ""]; then
203
- webServer="apache2"
190
+ webServer="nginx"
204
191
  fi
205
192
  } #end setDefaults
206
193
 
@@ -237,22 +224,22 @@ installRuby ()
237
224
  if [[ ! -d "${prefix}${rubyDir}" ]]; then
238
225
  echoLog "Loading ruby tarball ..." | tee -a $log
239
226
  echoLog "wget -P ${prefix} ${rubyURL}" | tee -a $log
240
- wget -P ${prefix} ${rubyURL}
241
- echoLog "tar -xzf ${prefix}${rubyTar} -C ${prefix}" | tee -a $log
242
- tar -xzf ${prefix}${rubyTar} -C ${prefix}
227
+ wget -P ${prefix} ${rubyURL}
228
+ echoLog "tar -xzf ${prefix}/${rubyTar} -C ${prefix}" | tee -a $log
229
+ tar -xzf ${prefix}/${rubyTar} -C ${prefix}
243
230
  fi
244
231
  echoLog "Installing ruby. This may take some time..." | tee -a $log
245
232
 
246
233
  case $rubyVersion in
247
234
  rubyee)
248
- logAndPrint "${prefix}${rubyDir}/installer --dont-install-useful-gems --no-dev-docs --auto ${prefix}"
235
+ logAndPrint "${prefix}/${rubyDir}/installer --dont-install-useful-gems --no-dev-docs --auto ${prefix}"
249
236
  ;;
250
237
  ruby187)
251
- logAndPrint "${prefix}${rubyDir}/configure --prefix=\"${prefix}\""
238
+ logAndPrint "${prefix}/${rubyDir}/configure --prefix=\"${prefix}\""
252
239
  logAndPrint "make && make install"
253
240
  ;;
254
241
  ruby192)
255
- logAndPrint "${prefix}${rubyDir}/configure --prefix=\"${prefix}\""
242
+ logAndPrint "${prefix}/${rubyDir}/configure --prefix=\"${prefix}\""
256
243
  logAndPrint "make && make install"
257
244
  ;;
258
245
  *)
@@ -265,8 +252,6 @@ installRuby ()
265
252
  echoLog "Some dependencies not installed..." | tee -a $log
266
253
  echoLog "Please install them and then re-run the installation script." | tee -a $log
267
254
  exit
268
- else
269
- echoLog "ruby" >> ${prefix}installchecklist
270
255
  fi
271
256
 
272
257
  rm tempout
@@ -307,39 +292,26 @@ getTime ()
307
292
  echoLog "\nInstallation completed in ${timeHour}${timeMin}${timeSec}."
308
293
  } #end getTime
309
294
 
310
- checkInstalledSoftware ()
311
- {
312
- installedSoftware=""
313
- while read line
314
- do
315
- for (( i=0; i < ${#INSTALL_ARRAY[@]}; i++ ))
316
- do
317
- if [ $line == ${INSTALL_ARRAY[$i]} ]; then
318
- installedSoftware=$(( $installedSoftware + 1 ))
319
- fi
320
- done
321
- done < $installchecklist
322
-
323
- if ! [[ $installedSoftware -ge ${#INSTALL_ARRAY[@]} ]]; then
324
- echoLog "Not all software installed"
325
- else
326
- echoLog "All software installed"
327
- fi
328
-
329
- rm $installchecklist
330
- } #end checkInstalledSoftware
331
-
332
295
  # SCRIPT
296
+
297
+ # Get starting directory
298
+ startDir=`pwd`
299
+
300
+ if [[ $startDir =~ "rhoconnect-${RHOCONNECT_VERSION}" ]]; then
301
+ INSTALL_DIR="/tmp/installdir/rhoconnect-${RHOCONNECT_VERSION}"
302
+ else
303
+ INSTALL_DIR="./installer"
304
+ fi
305
+
333
306
  # define log file name
334
307
  DATEFILE=`date +%Y%m%d%H%M%S`
335
308
  log=rhoconnect_$(date +$DATEFILE).log
336
- installchecklist="installchecklist"
337
309
 
338
310
  # Make sure basic system dependencies are installed
339
311
  checkDeps
340
312
 
341
- # update the system's package manager
342
- updatePkgMgr
313
+ # Determine which package management the system uses (Debian short-circuted)
314
+ determinePkgMgr
343
315
 
344
316
  # define option variables
345
317
  opts=""
@@ -350,7 +322,7 @@ rubyVersion=""
350
322
  rubyBinDir=""
351
323
 
352
324
  # parse command-line options
353
- parseOpts
325
+ parseOpts "$*"
354
326
 
355
327
  # Set default Values
356
328
  setDefaults
@@ -373,36 +345,32 @@ cleanPrefix
373
345
  setPrefixDependantPaths
374
346
 
375
347
  # Install ruby if not already installed
376
- if ! [ -e "${prefix}bin/ruby" ]; then
348
+ if ! [ -e "${prefix}/bin/ruby" ]; then
377
349
  installRuby
378
350
  else
379
351
  echoLog "Ruby already installed" | tee -a $log
380
- echoLog "ruby" >> ${prefix}installchecklist
381
352
  fi
382
353
 
383
354
  # Construct the string with which to call the ruby installation script.
384
- callruby="sudo ${prefix}bin/ruby ./installer/unix-like/rhoinstaller.rb ${opts}"
355
+ callruby="sudo ${prefix}/bin/ruby ${INSTALL_DIR}/unix-like/rhoinstaller.rb ${opts}"
385
356
  # Call the ruby script
386
357
  $callruby
387
358
 
388
- checkInstalledSoftware
389
-
390
359
  if [[ $installedSoftware -eq ${#INSTALL_ARRAY[@]} ]]; then
391
- rm "${prefix}info.dat"
392
- rm $pmutd
360
+ rm "${prefix}/info.dat"
393
361
  if [ -e $prefix$rubyTar ]; then
394
- mv $prefix$rubyTar $prefix"downloads/"$rubyTar
362
+ mv $prefix/$rubyTar $prefix"/downloads/"$rubyTar
395
363
  fi
396
364
  if [ -e $prefix$rubyDir ]; then
397
- mv $prefix$rubyDir $prefix"downloads/"$rubyDir
365
+ mv $prefix$rubyDir $prefix"/downloads/"$rubyDir
398
366
  fi
399
- if [ ! -e $prefix"post-install" ]; then
400
- mkdir $prefix"post-install"
367
+ if [ ! -e $prefix"/post-install" ]; then
368
+ mkdir $prefix"/post-install"
401
369
  fi
402
370
 
403
- opts=$opts" -d $dist"
371
+ opts=" -d $dist"
404
372
 
405
- sudo ${prefix}bin/ruby installer/utils/create_texts.rb ${opts}
406
- timeFinal=`date +%H%M%S`
407
- getTime $timeFinal
373
+ sudo ${prefix}/bin/ruby ${INSTALL_DIR}/utils/create_texts.rb ${opts}
374
+ # timeFinal=`date +%H%M%S`
375
+ # getTime $timeFinal
408
376
  fi
@@ -0,0 +1,75 @@
1
+ An online copy of the following license is available here: http://rhomobile.com/products/rhosync/license/
2
+
3
+ This RhoSync Commercial License Agreement is a legal agreement between Rhomobile Inc. ("Rhomobile"), and Licensee (either an individual or a legal entity, hereafter referred to as "Licensee") for the Licensed Software (as defined below). The Licensed Software is not open source software and this is not an open source license.
4
+
5
+ 1. DEFINITIONS
6
+ Affiliate of a Party shall mean an entity (i) which is directly or indirectly controlling such Party; (ii) which is under the same direct or indirect ownership or control as such Party; or (iii) which is directly or indirectly owned or controlled by such Party.
7
+
8
+ Licensee Application shall mean an application (a) developed using a license under Rhomobile's Rhodes framework and (b) which runs on a Mobile Device and synchronizes through the Licensed Software running on a server.
9
+
10
+ Licensed Software shall mean the RhoSync computer software, online or electronic documentation, associated media and printed materials, including the source code, example programs and the documentation delivered by Rhomobile to Licensee in conjunction with this Agreement.
11
+
12
+ Support shall mean standard developer support that is provided by Rhomobile to assist eligible Designated Users in using the Licensed Software in accordance with its established standard support procedures.
13
+
14
+ Updates shall mean a release or version of the Licensed Software containing enhancements, new features, bug fixes, error corrections and other changes that are generally made available to users of the Licensed Software that have contracted for maintenance and support.
15
+
16
+ Device shall mean a specific physical mobile device that interacts with the Licensed Software
17
+
18
+ 2. OWNERSHIP
19
+ The Licensed Software is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The Licensed Software is licensed, not sold.
20
+
21
+ Rhomobile shall own all right, title and interest including the intellectual property rights in and to the information on bug fixes or error corrections relating to the Licensed Software that are submitted by Licensee to Rhomobile as well as any intellectual property rights to the correction of any errors, if any. To the extent any rights do not automatically vest in Rhomobile, Licensee assigns, and shall ensure that all of its Affiliates, agents, subcontractors and employees assign, all such rights to Rhomobile.
22
+
23
+ 3. VALIDITY OF THE AGREEMENT
24
+ By installing, copying, or otherwise using the Licensed Software, Licensee agrees to be bound by the terms of this Agreement. If Licensee does not agree to the terms of this Agreement, Licensee may not install, copy, or otherwise use the Licensed Software. In addition, by installing, copying, or otherwise using any Updates or other components of the Licensed Software that Licensee receives separately as part of the Licensed Software, Licensee agrees to be bound by any additional license terms that accompany such Updates, if any. If Licensee does not agree to the additional license terms that accompany such Updates, Licensee may not install, copy, or otherwise use such Updates. Upon Licensee's acceptance of the terms and conditions of this Agreement and payment of the licensee fee, Rhomobile grants Licensee the right to use the Licensed Software in the manner provided below.
25
+
26
+ 4. LICENSE GRANT
27
+
28
+ 4.1 Grant
29
+ Subject to the terms and conditions of this Agreement, Rhomobile grants to Licensee a non-exclusive, non-transferable, non-sublicensable license to install and use the Licensed Software as contemplated in the applicable documentation and the applicable invoice for the Licensed Software. Licensee is not granted any rights or licenses in the Licensed Software other than those rights expressly granted in this Agreement. Unless otherwise provided in an invoice from Rhomobile or Rhomobile authorized third party sublicensor, Licensee may only install and use the Licensed Software on a single computer ("Server"). If Licensee is explicitly granted a multiple Server license by Rhomobile, or Rhomobile authorized third party sublicensor in an invoice, Licensee may install and use the Licensed Software on not more than the number of Servers listed in the applicable invoice. All uses of the Licensed Software must be in accordance with the documentation provided for the Licensed Software. The Licensed Software is licensed only to Licensee and may not be transferred to any other person or entity without Rhomobile's prior written authorization. Any authorized transferee of the Licensed Software shall be bound in writing by the terms and conditions of this Agreement. In no event may Licensee transfer, assign, rent, lease, sell, or otherwise dispose of the Licensed Software on a temporary or permanent basis except as expressly provided herein. The license granted herein will automatically terminate in the event of any violation of this Agreement by Licensee.
30
+
31
+ 4.2 Capacity Restrictions
32
+ The Licensed Software shall only be used to support the number of Devices and the number of Licensee Applications set forth in the applicable invoice and paid for. To replace a Device with a new Device for purposes of determining how many Devices are being supported at any one time, the replaced Device must be removed from the RhoSync directory. Increases in the number of Devices and/or the number of Licensee Applications being supported by the Licenses Software must be purchased in advance.
33
+
34
+ 5 LIMITED WARRANTY AND WARRANTY DISCLAIMER
35
+ Rhomobile warrants to Licensee for a period of ninety (90) days from the date of Licensee's receipt of the Licensed Software (the "Warranty Period") that the Licensed Software as delivered will conform substantially to Rhomobile's then-current published functional specifications set forth in the documentation for the Licensed Software when installed and operated as contemplated in such documentation. In the event of any nonconformity, Rhomobile (or its designee) may, in its sole discretion, either (i) remedy the nonconformity within a reasonable period after notice and verification thereof or (ii) refund the amount Licensee paid for the Software and terminate this Agreement and the license granted herein; provided, however, that Licensee must return the original and all copies of the Licensed Software to Rhomobile or its authorized representative before Licensee will be entitled to receive any such refund. THIS SECTION 5 STATES LICENSEE'S SOLE REMEDY FOR A BREACH OF THE LIMITED WARRANTY OF THE LICENSED SOFTWARE.
36
+
37
+ EXCEPT AS SET FORTH IN SECTION 6, THE LICENSED SOFTWARE IS PROVIDED BY RHOMOBILE AND ITS LICENSORS "AS IS" WITHOUT ANY WARRANTY OF ANY KIND INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. NEITHER RHOMOBILE NOR ITS LICENSORS WARRANT THAT THE LICENSED SOFTWARE IS ERROR-FREE OR THAT IT WILL OPERATE WITHOUT INTERRUPTION. NEITHER RHOMOBILE NOR ITS LICENSORS WARRANT, GUARANTEE OR MAKE ANY REPRESENTATION REGARDING THE USE, OR THE RESULTS OF THE USE OF THE LICENSED SOFTWARE INCLUDING, WITHOUT LIMITATION, THE CORRECTNESS, ACCURACY OR RELIABILITY OF SUCH USE OR RESULTS. LICENSEE ACKNOWLEDGES AND AGREES THAT RHOMOBILE IS NOT RESPONSIBLE FOR AND WILL HAVE NO LIABILITY FOR HARDWARE, SOFTWARE, CONTENT OR OTHER ITEMS OR ANY SERVICES PROVIDED BY ANY PERSONS OTHER THAN RHOMOBILE.
38
+
39
+ 6. LIMITATION OF LIABILITY
40
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, RHOMOBILE AND ITS LICENSORS WILL NOT BE LIABLE WITH RESPECT TO ANY SUBJECT MATTER OF THIS AGREEMENT UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER LEGAL OR EQUITABLE THEORY FOR: (I) ANY AMOUNTS IN EXCESS IN THE AGGREGATE OF THE AMOUNTS YOU PAID FOR THE LICENSED SOFTWARE; (II) ANY LOST DATA OR OTHER EXEMPLARY, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, LOSS OF DATA, OR ANY AND ALL LOST PROFITS, EVEN IF RHOMOBILE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (III) THE COST OF PROCURING SUBSTITUTE GOODS, SERVICES OR TECHNOLOGY. THE LIMITATION OF LIABILITY SET FORTH IN THIS SECTION 6 SHALL NOT APPLY TO THE EXTENT PROHIBITED BY APPLICABLE LAW.
41
+
42
+ 7. SUPPORT AND UPDATES
43
+ Licensee shall be eligible to receive Support and Updates for one year from the date of the delivery of the Licensed Software to Licensee, in accordance with Rhomobile's then current policies and procedures, if any. After that time period the customer shall be entitled to execute a maintenance agreement which will entitle them to ongoing support and updates. Licensee may purchase additional Support and Updates following the Initial Term at 18% of the original price of the Licensed Software.
44
+
45
+ 8. EXPORT
46
+
47
+ Licensee acknowledges that the Licensed Software may be subject to the export and import control laws of the United States and any country where the Licensed Software is manufactured or received. Licensee agrees not to violate any such laws. Licensee further agrees not to export the Licensed Software to any prohibited country, entity or person for which an export license or other governmental approval is required. Obtaining any necessary governmental approval or licenses is solely the obligation of Licensee.
48
+
49
+ 9. GENERAL PROVISIONS
50
+
51
+ 9.1 Marketing
52
+ Rhomobile may include Licensee's company name and logo in a publicly available list of Rhomobile Licensees and in its public communications.
53
+
54
+ 9.2 No Assignment
55
+ Licensee shall not be entitled to assign or transfer all or any of its rights, benefits and obligations under this Agreement without the prior written consent of Rhomobile, which shall not be unreasonably withheld.
56
+
57
+ 9.3 Termination
58
+ This Agreement will remain in force until terminated. Licensee may terminate this Agreement at any time upon providing written notice thirty days in advance of the termination. Rhomobile may terminate this Agreement if Licensee breaches any of the terms or conditions hereunder. Licensee agrees to destroy or return to Rhomobile the original and all copies of the Licensed Software immediately upon any termination of this Agreement, and certify the same in writing if requested.
59
+
60
+ 9.4 Surviving Sections
61
+ Any terms and conditions that by their nature or otherwise reasonably should survive a cancellation or termination of this Agreement shall also be deemed to survive. Such terms and conditions include, but are not limited to the following Sections: 2, 4, 5, 6, 7, 8, 9, 11, and 12of this Agreement. Notwithstanding the foregoing, Section 4.1 shall not survive if the Agreement is terminated for material breach.
62
+
63
+ 9.5 Entire Agreement
64
+ This Agreement constitutes the complete agreement between the parties and supersedes all prior or contemporaneous discussions, representations, and proposals, written or oral, with respect to the subject matters discussed herein No modification of this Agreement shall be effective unless contained in a writing executed by an authorized representative of each party. No term or condition contained in Licensee's purchase order shall apply unless expressly accepted by Rhomobile in writing. If any provision of the Agreement is found void or unenforceable, the remainder shall remain valid and enforceable according to its terms. If any remedy provided is determined to have failed for its essential purpose, all limitations of liability and exclusions of damages set forth in this Agreement shall remain in effect.
65
+
66
+ 9.6 Notices
67
+ Any notice given by one party to the other shall be deemed properly given and deemed received if specifically acknowledged by the receiving party in writing or when successfully delivered to the recipient by hand, fax, or special courier during normal business hours on a business day to the addresses specified below. Each communication and document made or delivered by one party to the other party pursuant to this Agreement shall be in the English language or accompanied by a translation thereof.
68
+ Notices to Rhomobile shall be given to:
69
+
70
+ Rhomobile, Inc.
71
+ 3031 Tisch Way Suite 1002
72
+ San Jose, CA 95128
73
+
74
+ 9.7 Governing Law and Legal Venue
75
+ This Agreement shall be governed by and construed in accordance with the federal laws of the United States of America and the internal laws of the State of California without giving effect to any choice of law rule that would result in the application of the laws of any other jurisdiction. The United Nations Convention on Contracts for the International Sale of Goods (CISG) shall not apply. Each Party (a) hereby irrevocably submits itself to and consents to the jurisdiction of the United States District Court for the Northern District of California (or if such court lacks jurisdiction, the state courts of the State of California) for the purposes of any action, claim, suit or proceeding between the Parties in connection with any controversy, claim, or dispute arising out of or relating to this Agreement; and (b) hereby waives, and agrees not to assert by way of motion, as a defense or otherwise, in any such action, claim, suit or proceeding, any claim that is not personally subject to the jurisdiction of such court(s), that the action, claim, suit or proceeding is brought in an inconvenient forum or that the venue of the action, claim, suit or proceeding is improper.