3.31.0:
- #691 Cache SSL certificate files certChainFile and keyFile for 1 hour, and reload them if they are modified
3.30.2:
- #690 Support running on Apple machines with M1 chip
3.30.1:
- #688 Swagger documentation for BodyParam and Responses with JSON models generated from case classes
- #689 Update dependency libraries
3.30.0:
- #683 Support Scala 2.13 and 2.12, and update dependency libraries; Scala 2.11 and below are not supported
3.29.0:
3.28.18:
- #613 Support Proxy Protocol
- #681 Respond bad request 400 for incorrect param types
- Update dependency libraries
3.28.17:
- #679 Update dependency libraries
3.28.16:
3.28.15:
- #674 Update dependency libraries
3.28.14:
- #672 Update dependency libraries
3.28.13:
- #671 WebJars files cannot be served on Windows
3.28.12:
3.28.11:
3.28.10:
3.28.9:
- #663 Update dependency libraries
3.28.8:
3.28.7:
- #660 Update dependency libraries
3.28.6:
3.28.5:
3.28.4:
- #647 Readd support for %2F in path params
- #648
Make
Action#executionContext
lazy to avoid starting Akka in tests - #650 Update dependencies
3.28.3:
3.28.2:
3.28.1:
- #634 Fix memory leak when params in request body are large and they need to be saved in temporary files
- #635 Update Netty from 4.1.4 to 4.1.5
- #637 Update Akka from 2.4.8 to 2.4.11
- #638 Update JSON4S from 3.4.0 to 3.4.1
- #639 Update metrics-scala from 3.5.4_a2.3 to 3.5.5_a2.3
- #640 WebJars: Update jQuery 3.1.0 to 3.1.1
- #641 WebJars: Update Swagger UI from 2.1.8-M1 to 2.2.5
3.28.0:
- #626 Avoid duplicate info in error message
- #627 Allow spaces and non-ASCII characters in static file names
- #629 Remove tf, tcf, tnf, and tcnf in I18n; replace them with added t, tc, tn, and tcn variants
- #630 Add I18n#locale (java.util.Locale)
- #632 Add default loading image for Ajax post back
- #628 Update Netty from 4.1.3 to 4.1.4
- #631 WebJars: Update jQuery Validation from 1.15.0 to 1.15.1
3.27.0:
- #614 Add object xitrum.action.Url so that it's easier to write URL helpers
- #616 Use / instead of File.separatorChar in template path for Scalate so that it can work on Windows
- #618 Simplify xitrum.view.TemplateEngine interface
- #619 Add some more render and respond variants for completeness
- #617 Update Netty from 4.1.1 to 4.1.3
- #620 Update Akka from 2.4.7 to 2.4.8
- #621 WebJars: Update jQuery 3.0.0 to 3.1.0
- #622 WebJars: Replace jquery-validation from org.webjars with the one from org.webjars.bower
- #623 WebJars: Update Swagger UI from 2.1.4 to 2.1.8-M1
3.26.2:
- #608 Update Netty from 4.1.0 to 4.1.1
- #610 Update Akka from 2.4.6 to 2.4.7
- #609 Update slf4s-api from 1.7.12 to 1.7.13
- #607 Update Scaposer from 1.7 to 1.8
- #611 Update JSON4S from 3.3.0 to 3.4.0
- #612 WebJars: Update jQuery 2.2.4 to 3.0.0
- #606 Set serverName to localhost if HOST header does not exist
3.26.1:
- #589 Update Scala from 2.11.7 to 2.11.8
- #595 Update Netty from 4.0.33 to 4.1.0
- #596 Update Akka from 2.4.1 to 2.4.6
- #597 Update Schwatcher from 0.2.0 to 0.3.1
- #600 Update metrics-scala from 3.5.2_a2.3 to 3.5.4_a2.3
- #598 Update Twitter Chill from 0.7.2 to 0.8.0
- #599 Update RhinoCoffeeScript from 1.9.3 to 1.10.0
- #601 WebJars: Update jQuery 2.1.4 to 2.2.4
- #602 WebJars: Update jQuery Validation from 1.14.0 to 1.15.0
- #603 WebJars: Update sockjs-client from 1.0.3 to 1.1.1
- #604 WebJars: Update d3js from 3.5.12 to 3.5.17
- #594 In production mode, exception in non-GET action is mistakenly handled as "Missing param: csrf-token"
- #593 Allow easy customizing error messages for BadRequest
- #592 Change URL to access Swagger UI from /xitrum/swagger-ui back to /xitrum/swagger
3.26.0:
- #547 Update Scala from 2.11.6 to 2.11.7 and drop support for Scala 2.10.x and Java 7
- #579 Add xitrum.util.SeriDeseri.bytesToHex and bytesFromHex to convert bytes to hexadecimal string and vice versa
- #568 Add xitrum.util.SeriDeseri.toJValue and fromJValue to convert Scala objects to JSON4S JValue and vice versa
- #580 Add xitrum.util.Secure.hmacSha256 to calculate HMAC SHA256
- #572 [Metrics] Fix JavaScript error at metrics detail page of actions
- #574 [Metrics] Add single executionTime histogram for all actions
- #583 Update metrics-scala from 3.5.1_a2.3 to 3.5.2_a2.3
- #578 Update Netty from 4.0.30 to 4.0.33
- #576 Update Akka from 2.3.12 to 2.4.1
- #587 Update Schwatcher from 0.1.8 to 0.2.0
- #566 Update Scaposer from 1.6 to 1.7
- #581 Update Twitter Chill from 0.7.0 to 0.7.2
- #582 Update JSON4S from 3.2.11 to 3.3.0
- #573 WebJars: Update sockjs-client from 1.0.2 to 1.0.3
- #585 WebJars: Update d3js from 3.5.5-1 to 3.5.12
- #586 WebJars: Update Swagger UI from 2.1.1 to 2.1.4
3.25.0:
- #541 routes.cache should be saved in tmpDir as configured in xitrum.conf
- #542 Use cookie parsing's strict mode to avoid security problems
- #550 Params extraction also works for request with content type application/json
- #565 Allow to get request content body as JSON4S JValue
- #555 Log error message when ssl certificate file not found
- #548 Update Netty from 4.0.28 to 4.0.30
- #554 Update Akka from 2.3.11 to 2.3.12
- #563 Update Twitter Chill from 0.6.0 to 0.7.0
- #549 Update slf4s-api from 1.7.10 to 1.7.12
- #562 Update Scaposer from 1.5 to 1.6
- #558 Update Swagger from 1.2 to 2.0
- #559 Update Swagger UI from 2.0.24 to 2.1.1
- #557 Update jQuery Validation from 1.13.1 to 1.14.0
- #560 Update sockjs-client from 1.0.0 to 1.0.2
- #564 Update RhinoCoffeeScript from 1.9.2 to 1.9.3
3.24.0:
- #535 Localize function t doesn't work in Component
- #527 Update Netty from 4.0.26 to 4.0.28
- #528 Update Akka from 2.3.9 to 2.3.11
- #529 Update Glokka from 2.2 to 2.3
- #525 Update Schwatcher from 0.1.6 to 0.1.8
- #536 Update Twitter Chill from 0.5.2 to 0.6.0
- #537 Update commons-lang3 from 3.3.2 to 3.4
- #538 Update metrics-scala from 3.3.0_a2.3 to 3.5.1_a2.3
- #539 WebJars: Update jquery from 2.1.3 to 2.1.4, d3js from 3.5.3 to 3.5.5-1
- #540 Update RhinoCoffeeScript from 1.9.0 to 1.9.2
- #533 Update sockjs-client from 0.3.4-1 to 1.0.0
3.23:
- #503 Make respondSockJsXxx return Future like other respondXxx methods
- #504 The result of xitrum.Server.start can be used to stop the server
- #505 Reset session when there's type cast error with SessionVar
- #508 Respond 400 Bad Request when params in request URI or body can't be decoded, not just closing the connection
- #512 Add config maxHeaderSize (for the entire HTTP header, defaults to 8192)
- #518 Make xitrum.util.SeriDeseri.fromXXX return String by default, instead of Nothing
- #517 Update Scala to 2.10.5 and 2.11.6
- #519 Update Netty from 4.0.25 to 4.0.26
- #511 Update RhinoCoffeeScript from 1.8.0 to 1.9.0
- #515 Update Schwatcher from 0.1.5 to 0.1.6
- #520 Update slf4s-api from 1.7.7 to 1.7.10
- #521 Update Twitter Chill from 0.5.1 to 0.5.2
- #523 Update SockJS JS library from 0.3.4 to 0.3.4-1
3.22:
- #459 Optimize route collecting: Ignore more packages that obviously don't contain routes
- #495 Update Netty from 4.0.24 to 4.0.25
- #501 Update Akka from 2.3.8 to 2.3.9
- #498 Update Javassist from 3.18.2-GA to 3.19.0-GA
- #497 Update jQuery from 2.1.1 to 2.1.3
- #500 Update D3.js from 3.5.2 to 3.5.3
3.21:
- #489 When forwardTo is called in a before filter, the action's execute method should not be called
- #491 Remove paramso; params returns Seq.empty when there's no such param
- #455 PoLoader should watch src/main/resources/i18n directory in development mode
- #493 Add some more methods to xitrum.util.Loader
- #492 Update Akka from 2.3.7 to 2.3.8
3.20:
- #482 paramo, params, and paramso should not filter out empty params
- #484 Add methods in Option to RequestVar and SessionVar
- #481 Allow enabling cache in development mode/disabling cache in production mode
- #480 Update Glokka from 2.0 to 2.2
- #485 Update Twitter Chill from 0.5.0 to 0.5.1
- #487 Update jQuery Validation from 1.13.0 to 1.13.1
- #486 Update D3.js from 3.4.13 to 3.5.2
3.19:
- #452 Postback: Split data-extra to data-params and data-form
- #460 Make respondView more convenient, so that one action can have multiple views
- #463 Do not ignore empty uploaded files
- #466 Add xitrum.util.Loader.bytesToFile method to write to file
- #467 Improve xitrum.util.SeriDeseri methods
- #474 Add isEmpty to SessionVar for convenience
- #475 Make writing before filters more convenient: If a filter responds something, the main action will not be called; you don't have to make the filter return true/false any more
- #462 Switch back to Twitter's Chill (from chill-scala) because it now supports Scala 2.11
- #476 Update Netty from 4.0.23 to 4.0.24; SSLv3.0 is disabled to avoid POODLE vulnerability
- #461 Update Akka from 2.3.5 to 2.3.7
- #465 Update Scaposer from 1.4 to 1.5; the original string is used when it hasn't been translated yet
- #478 Update JSON4S from 3.2.10 to 3.2.11
- #469 Update metrics-scala from 3.2.1_a2.3 to 3.3.0_a2.3
- #470 Update RhinoCoffeeScript from 1.7.1 to 1.8.0
- #471 Update Swagger UI from 2.0.22 to 2.0.24
- #479 Update D3.js from 3.4.11 to 3.4.13
3.18:
- #446 Fix bug: Action cache does not work when the response is not gzip
- #307 Add option edgeTriggeredEpoll to xitrum.conf to use Netty's epoll feature for maximal performance and low latency
- #429 Generate Swagger API doc listing so that codegen tool works
- #448 Update Swagger UI from 2.0.18 to 2.0.22
- #443 paramo returns None for empty param, params and paramso ignore empty params
- #438 In dev mode, only recollect routes when there's .class file change
- #441 Move routes.cache to tmp directory
- #442 Add respond404Page and respond500Page
- #444 Update Akka from 2.3.4 to 2.3.5
- #445 Update Netty from 4.0.21 to 4.0.23
- #449 Update metrics-scala from 3.2.0_a2.3 to 3.2.1_a2.3
3.17:
- #434 [Autoreload in dev mode] Replace classloaders with DCEVM
- #436 Check for CSRF when request method is PATCH
- #439 Fix type cast error at PoLoader
- #432 Update Swagger UI from 2.0.17 to 2.0.18
- #433 Update D3.js from 3.4.8 to 3.4.11
- #435 Update jQuery Validation from 1.12.0 to 1.13.0
3.16:
- #428 Fix: SeriDeseri.{fromJson, toJson} doesn't work in dev mode
- #416 [Autoreload in dev mode] Autoreload all directories in classpath (with this improvement, Xitrum can autoreload dependency modules in multimodule SBT projects)
- #430 Fix: JS error at metrics page of indiviual actions
3.15:
- #415 Fix: publicUrl/3 reverses paths of development mode and production mode
- #420 [Autoreload in dev mode] Allow disabling autoreload
- #418 [Autoreload in dev mode] Allow specifying classes that shouldn't be reloaded
- #426 Add xitrum.Config.xitrum.tmpDir
- #413 [Metrics viewer] Add reconnection
- #425 Update Netty from 4.0.20 to 4.0.21
- #424 Update Akka from 2.3.3 to 2.3.4
3.14:
- #400 Support both Scala 2.10.x and 2.11.x
- #81 Reload classes in development mode
- #398 Recollect routes in development mode
- #399 Add xitrum.Component
- #390 Add validation method "check" that returns true/false
- #393 For development mode, set Netty's ResourceLeakDetector level to ADVANCED
- #395 Fix memory leak at xitrum.util.SeriDeseri.fromUrlSafeBase64
- #394 Add automatic error handling (error 500) for ActorAction
- #404 At boot, add config directory to classpath, if it's not in classpath
- #411 Set Action#requestCookies to empty when there's problem decoding cookies
- #408 Metrics: Ignore the actions of metrics itself
- #409 Update Netty from 4.0.19 to 4.0.20
- #410 Allow the use of OpenSSL engine for faster HTTPS
- #407 Update Javassist from 3.18.1-GA to 3.18.2-GA
3.13:
- #363 Use SLF4S instead of using SLF4J directly
- #385 Support WebJars; rename resourceUrl to webJarsUrl
- #383 Update Scala from 2.11.0 to 2.11.1
- #384 Update Akka from 2.3.2 to 2.3.3
- #387 Update JSON4S from 3.2.9 to 3.2.10
- #388 Update metrics-scala from 3.1.1.1_a2.3 to 3.2.0_a2.3
3.12:
- #372 ParamAccess: Support all primitive types
- #373 Add respondWebSocketJson and respondSockJsJson
- #374 Merge UrlSafeBase64 to SeriDeseri; Also solve memory leak problem
- #375 Add toBase64 and fromBase64 to SeriDeseri
- #376 Embed Xitrum CSRF token to requests from Swagger UI
- #379 Add xitrum.version
- #380 Recreate routes.cache when Xitrum is updated
- #362 Update Schwatcher from 0.1.4 to 0.1.5
- #381 Update D3.js from 3.4.6 to 3.4.7
- #382 Update Swagger UI from 2.0.16 to 2.0.17
3.11:
- #357 Update Scala from 2.10.4 to 2.11.0
- #361 Update Netty from 4.0.18 to 4.0.19
- #358 Update JSON4S from 3.2.8 to 3.2.9
- #359 Update metrics-scala from 3.0.5_a2.3 to 3.1.1.1_a2.3
- #365 Update Schwatcher from 0.1.1 to 0.1.4
- #368 Update jQuery from 1.11.0 to 1.11.1
- #369 jQuery Validate from 1.11.1 to 1.12.0
- #370 Update Swagger UI from 2.0.14 to 2.0.16
- #356 Fix: Remove metrics route when metrics is disabled
- #360 Split "Imperatively" feature (using Scla continuations) to a separate project
- #143 Replace Manifest with TypeTag when Scala 2.11 is released
- #364 Replace Twitter Chill with chill-scala-2.11
3.7:
- #354 Fix HTTP keep alive and pipelining do not work
3.6:
- #347 Fix Terrible performance of FutureAction and ActorAction
- #348 Fix bug: Unable to change Content-Type for respondFile and respondResource
- #80 Integrate Metrics (for actions statistics etc.)
- #337 Update Scala from 2.10.3 to 2.10.4 (you need to update your own projects to use Scala 2.10.4)
- #339 Update Netty from 4.0.17 to 4.0.18
- #342 Update Glokka from 1.7 to 1.8 (update Akka from 2.3.0 to 2.3.2)
- #332 Update JSON4S from 3.2.7 to 3.2.8 and replace json4s-native with json4s-jackson
- #341 Update SLF4J from 1.7.6 to 1.7.7, Logback from 1.1.1 to 1.1.2
- #343 Update commons-lang3 from 3.3 to 3.3.2
3.5:
- #329 Netty's HttpRequestDecoder unable to parse request
- #333 Update Glokka from 1.6 to 1.7 (update Akka from 2.2.3 to 2.3.0)
3.4:
- #322 Handle "Expect: 100-continue" requests
- #327 Fix path exception when autoreloading i18n files on Windows
- #328 Load language lazily
3.3:
- #275 Add a way to change session cookie max age
- #316 SockJS: Change heartbeat from 5s to 25s
- #317 SockJS: Add heartbeat for WebSocket transport
- #318 Fix Netty memory leak at xitrum.util.UrlSafeBase64
- #323 Stop Xitrum at startup on port bind exception
- #315 Update Akka from 2.2.3 to 2.3.0
- #319 Update Twitter Chill from 0.3.5 to 0.3.6
- #320 Update Schwatcher from 0.0.9 to 0.1.0
- #325 Update commons-lang3 from 3.2.1 to 3.3
3.2:
- #312 Fix bug at xitrum.js: when ajaxLoadingImg is not specified, the next element of the submit element is removed
- #268 Add xitrum.util.FileMonitor (requires Java 7)
- #308 Reload .po files updated at runtime
- #311 xitrum.util: Merge Json and SecureUrlSafeBase64 to SeriDeseri
- #297 Disable xitrum.local.LruCache in development mode
- #306 Update Netty from 4.0.16 to 4.0.17
3.1:
- #292 Fix chunked response bug
- #295 Fix bug at responding static file in the zero copy style
- #288 Add Scalive
- #289 Update SLF4J from 1.7.5 to 1.7.6, Logback from 1.0.13 to 1.1.1
- #300 Update Netty from 4.0.15 to 4.0.16
- #301 Update JSON4S from 3.2.6 to 3.2.7
- #302 Update RhinoCoffeeScript from 1.6.3 to 1.7.1
- #303 Update jQuery from 1.10.2 to 1.11.0
- #304 Update Swagger UI from 2.0.4 to 2.0.12
3.0:
- #151 Update Netty from 3.9.0 to 4.0.15
- #284 Fix: xitrum.local.LruCache#putIfAbsent can't overwrite stale cache
- #265 Add FutureAction, rename ActionActor to ActorAction, SockJsActor to SockJsAction, WebSocketActor to WebSocketAction
- #261 Add convenient methods to manipulate routes after they are collected at startup
- #269 Increase akka.logger-startup-timeout from 5s to 30s to avoid Akka's log initialization timeout error at Xitrum startup
- #263 Increase access log level from DEBUG to INFO
- #259 Log WebSocket messages at TRACE level
- #272 Add sockJsCookieNeeded in xitrum.conf so that this option can be set when deploying, depending on deployment environment
- #74 Flash socket policy server can use the same port with HTTP server
- #274 Update commons-lang3 from 3.1 to 3.2.1
- #282 Update Swagger UI from 2.0.3 to 2.0.4
2.15:
- #77 Remove HttpChunkAggregator to avoid memory problem with file upload
- #258 Add config for saving upload files to memory or to disk temporarily
- #257 Add config for directory path to save uploaded files temporarily
- #256 Replace syntax respondView(classOf[OtherAction]) with respondView[OtherAction]()
- #255 Update Netty from 3.8.0 to 3.9.0
2.14:
- #252 Fix cache TTL bug
- #244 Easier way to get request content as string and JSON
- #245 Rename "atJs" to "atJson"
- #248 Collect all routes
- #249 Improve inheritance rule of route annotations
- #250 CORS allow-origin should not be set for domain not specified in xitrum.conf
- #253 Update JSON4S from 3.2.5 to 3.2.6
- #254 Update Swagger UI from 2.0.2 to 2.0.3
2.13:
- #239 Readd feature: One action can have multiple routes
- #236 Remove Swagger related routes when it is disabled
- #145 Split Knockout.js to a separate module
- #234 xitrum.js: Fix bug XITRUM_BASE_URL does not exist
- #237 xitrum.js: Add withBaseUrl
- #242 Add atJs; atJs("key") returns the JSON form of at("key")
- #238 CSRF token can be set in header
2.12:
- #230 Fix bug Routes with trailing '/' are not matched
- #218 Make Hazelcast optional
- #221 xitrum.conf: Improve config of template engine, cache, and session store
- #159 Support dot in route
- #206 Support index.html fallback
- #209 Support automatic OPTIONS request handling for the whole site
- #71 Support automatic CORS request handling for the whole site
- #204 Log Xitrum additional routes separately from app routes
- #233 Add xitrum.Log package object for convenience use
- #223 Rename logger to log
- #195 Rename xitrumCSS to xitrumCss
- #216 Remove package xitrum.mq
- #211 Remove xitrum/routes.js
- #220 Optimize xitrum.util.Loader.bytesFromInputStream
- #227 Optimize xitrum.util.Json by avoid creating formats at every call
- #196 Swagger: Rename Optional<ValueType><ParamType> to Opt<ValueType><ParamType>, ex: OptStringQuery
- #198 Swagger: Add inheritance
- #199 Swagger: Add notes
- #232 Update Netty from 3.7.0 to 3.8.0
- #214 Update Glokka from 1.2 to 1.3 (and akka-slf4j to 2.2.3)
- #231 Update Twitter Chill from 0.3.4 to 0.3.5
- #200 Update Scaposer from 1.2 to 1.3
- #222 Update Knockout.js from 2.3.0 to 3.0.0
2.11: This release contains a noisy debug println, please use 2.12 instead
2.10:
- #180 Swagger: Add option to xitrum.conf to disable Swagger Doc
- #181 Swagger: Improve annotations
- #182 Swagger: Cache result on 1st access
- #185 Swagger: Include Swagger UI
- #183 Fix: Dead actor sends Terminate message to itself
- #194 Fix: Wrong version (2.10.0) of scala-compiler, scala-reflect, and scalap is used
- #51 Add bin/runner.bat for Windows
- #93 Readd indices for xitrum.mq.MessageQueue
- #179 Add route aliasing
- #189 Add option to xitrum.conf to configure request maxInitialLineLength
- #193 Add request.staticFilePathRegex to xitrum.conf
- #172 Replace Java annotations with Scala annotations
- #191 Placeholder in URL can't be empty
- #132 Log network card interface
- #192 Update Twitter Chill from 0.3.2 to 0.3.4
2.9:
- #169 Add Swagger Doc support
- #173 Speed up routing by caching latest matched routes
- #174 Redirect Akka log to SLF4J
- #175 Optimize static file serving by readding /public/ prefix
- #176 Change SkipCSRFCheck to SkipCsrfCheck; same for antiCSRFMeta etc.
- #177 Make routes.cache loading more robust with class name change
- #168 Better support for custom handler
- #167 Update Netty from 3.6.6.Final to 3.7.0.Final
- #171 Update Hazelcast from 3.0.1 to 3.0.2
- #170 Update Glokka from 1.1 to 1.2
- #178 Update Twitter Chill from 0.3.1 to 0.3.2
2.8:
- #164 Fix: publicUrl and resourceUrl return URL containing double slash if reverseProxy.baseUrl in xitrum.conf is set
- #157 Support HTTP method PATCH
- #161 Update SBT from 0.12.4 to 0.13.0
- #162 Update Akka from 2.2.0 to 2.2.1
- #158 Update Hazelcast from 2.6 to 3.0.1
- #163 Update Twitter Chill from 0.3.0 to 0.3.1
2.7:
- #152 Fix: Static files in public directory are not served on Windows
- #155 Fix: Workaround for thread safety problem of Scala reflection API
- #146 Add config option to disable auto gzip
- #140 Update Scala from 2.10.1 to 2.10.2
- #148 Update Akka from 2.1.4 to 2.2.0
- #142 Update Hazelcast from 2.5.1 to 2.6
- #153 Update Twitter Chill from 0.2.3 to 0.3.0
- #154 Update JSON4S from 3.2.4 to 3.2.5
- #147 Update RhinoCoffeeScript to 1.6.3
- #149 Update jQuery from 1.10.0 to 1.10.2
- #150 Update Knockout.js from 2.2.1 to 2.3.0
2.6:
- #135 Fix: Hangs up on cached action
- #119 Close connection after sendUnsupportedWebSocketVersionResponse
- #139 Add UnserializableSessionStore
- #136 Update Netty to 3.6.6.Final
- #133 Update Akka to 2.1.4
- #137 Update Twitter Chill to 0.2.3
- #138 Update jQuery to 1.10.0
2.5:
2.4:
- #115 Replace Javassist with ASM to reduce the number of dependencies
- #121 Update Twitter Chill to 0.2.1
- #123 Update Hazelcast to 2.5.1
2.3:
- #120 Add javacOptions -source 1.6 to avoid problem when Xitrum is built with Java 7 but the projects that use Xitrum are run with Java 6
2.2:
- #112 Add redirectToThis to redirect to the current action
- #113 Rename urlForPublic to publicUrl, urlForResource to resourceUrl
- #117 Apps can be configured to use no template engine
- #118 Route collecting: support getting cache annotation from superclasses
2.1:
- #110 Can't run in production mode because SockJsClassAndOptions in routes can't be serialized
- #111 Unify the "execute" method for Action, ActionActor, WebSocketActor, and SockJSActor
2.0: `#104 <https://github.com/xitrum-framework/xitrum/issues/104`_ Annotate your Akka actor to make it accessible from web
- Break actions in controller out to separate classes, each is an Action or an ActionActor; your action can be an actor
- Rewrite part of SockJS using ActionActor
- Add connection abort handling for SockJS
- Support "/" in SockJS path prefix
- Support WebSocket binary frame
- Allow starting server with custom Netty ChannelPipelineFactory; for an example, see xitrum.handler.DefaultHttpChannelPipelineFactory
- Speed up CoffeeScript compiling by using https://github.com/xitrum-framework/RhinoCoffeeScript
- Use Akka log instead of using SLF4J directly
- Ignore trailing slash in URL: treat "articles" and "articles/" the same; note that trailing slash is not recommended since browsers do not cache page with such URL
- Update Netty to `3.6.5 <http://netty.io/news/2013/04/09/3-6-5-Final.html>_, jQuery Validate to `1.11.1 <http://bassistance.de/2013/03/22/release-validation-plugin-1-11-1/>_, Sclasner to 1.6, and xitrum-scalate to 1.1
1.22:
1.21:
- #103 Move Scalate template engine out to a separate project
- #105 Move xitrum-sbt-plugin out to a separate project
- #100 Update JSON4S to 3.2.3
- #102 Update slf4j-api to 1.7.5
1.20:
- #88 Replace JBoss Marshalling with Twitter's Chill
- #99 Use ReflectASM (included by Twitter Chill) to initiate controllers faster
- #96 Rename xitrum.util.Base64 to UrlSafeBase64, SecureBase64 to SecureUrlSafeBase64
- #97 Update SLF4J from 1.7.2 to 1.7.3, Logback from 1.0.9 to 1.0.10 You should update Logback in your project from 1.0.9 to 1.0.10
- #98 Update Akka from 2.1.1 to 2.1.2
1.19:
1.18:
1.17:
- Avoid error of instantiating abstract controller while collecting routes
1.16:
- #86 Add forwardTo
- SockJS handler can now access session, request headers etc.
def onOpen(session: immutable Map[String, Any])
->def onOpen(controller: Controller)
- Update mime.types from https://github.com/klacke/yaws/blob/master/priv/mime.types (text/cache-manifest is added http://www.html5rocks.com/en/tutorials/appcache/beginner/)
- Update jQuery from 1.8.3 to 1.9.1
- Update Knockout.js from 2.2.0 to 2.2.1, its mapping plugin from 2.3.5 to 2.4.1
- Update SBT from 0.12.1 to 0.12.2 http://www.scala-sbt.org/0.12.2/docs/Community/Changes.html
1.15:
Improve SockJS handler interface
def onOpen()
->def onOpen(session: immutable Map[String, Any])
Make SockJS clusterwise, using Akka Remoting and Hazelcast - Add config/application.conf which loads conf/akka.conf and conf/xitrum.conf - Add Config.application and rename Config.config to Config.xitrum - Add Config.actorSystem named "xitrum" - Add xitrum.util.ActorCluster
Akka Clustering is currently lacks "single actor instance" feature
Update jboss-marshalling from 1.3.16.GA to 1.3.17.GA
See these examples to know how to update your project from 1.14 to 1.15:
1.14:
- Add config for template engine and Scalate template path
- Add comparison of controllers and actions
if (currentController == MyController) ...
if (currentAction == MyController.index) ...
- Update Netty from 3.6.0 to 3.6.1
- Update Scalate from 1.6.0 to 1.6.1
- Update jboss-marshalling from 1.3.15.GA to 1.3.16.GA
Updating your project from Xitrum 1.13 to 1.14 is simple.
1.13:
- Update Scala from 1.9.2 to 2.10.0
- Update Akka from 2.0.4 to 2.1.0
- Change Scalate template directory from
src/main/view/scalate
tosrc/main/scalate
- Add network interface config to config/xitrum.conf
- Add request and response log at TRACE level for easier debugging
- Add log for 500 error in production mode
1.12:
- Replace Jerkson with JSON4S (Jerkson has been abandoned); Note that there are also other libs like Jacks and jackson-module-scala
- Change
config/xitrum.json
toconfig/xitrum.conf
- Add methods to render Scalate templates directly from strings (non-file)
- Add Unicode quoting for SockJS
- Update Netty from 3.5.11.Final to 3.6.0.Final
- Update Scalate from 1.5.3 to 1.6.0
- Update Knockout.mapping from 2.3.3 to 2.3.5
1.11:
- Add renderFragment(fragment: String) which renders a fragment of the current controller
- Improve exception handling by catching only Exception, Error and control flow Throwable like scala.runtime.NonLocalReturnControl will not be catched. An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. http://docs.oracle.com/javase/6/docs/api/java/lang/Error.html
- Rename hazelcast_cluster_or_super_client.xml to hazelcast_cluster_or_lite_member.xml From Hazelcast 2.0, SuperClient is renamed to LiteMember to avoid confusion: http://www.hazelcast.com/docs/2.4/manual/multi_html/ch18s04.html
- Update Hazelcast from 2.4 to 2.4.1 This version fixes Out of Memory Error every few days: http://groups.google.com/group/hazelcast/browse_thread/thread/31f69d0eb89440b5/1d9ce430deffb575
1.10:
- Improve cookie API to requestCookies and responseCookies. Only cookies in responseCookies will be sent to browsers.
- Remove
resetSession
method. To reset session, callsession.clear()
. - Support Scalate Mustache template
- Fix bug with sending the last chunk in chunked mode for SockJS
- Fix URL to jquery.validate-1.10.0/localization/messages_<lang>.js (was "jquery.validate-1.9.0/..." instead)
- Update SBT from 0.12.0 to 0.12.1
- Update Netty from 3.5.10.Final to 3.5.11.Final
- Update Javassist from 3.16.1-GA to 3.17.1-GA (works with Java 6; 3.17.0-GA requires Java 7)
- Update Sclasner from 1.1 to 1.2
- Update jQuery from 1.8.2 to 1.8.3
1.9.10:
- Revert Javassist back to 3.16.1-GA because 3.17.0-GA requires Java 7
1.9.9:
Only decode request body only when the request method is POST, PUT, or PATCH http://groups.google.com/group/xitrum-framework/browse_thread/thread/f343f7bc92edb39c
SockJS: - Minor bug fixes and improvements - Allow setting options websocket = false and cookie_needed = true
http://groups.google.com/group/sockjs/browse_thread/thread/392cd07c4a75400b
Update Knockout.js from 2.1.0 to 2.2.0, Knockout.mapping from 2.3.2 to 2.3.3
1.9.8:
- Add support for SockJS 0.3.3; SockJS now works on a single server, next version will add cluster mode
- Add respondEventSource(data: String, event: String = "message")
- Add clientMustRevalidateStaticFiles option to config/xitrum.json You can force browsers to always send request to server to revalidate cache before using
- Add Akka 2.0.3 as a dependency, for use in SockJS
- Add JBoss Marshalling as dependency, for faster/smaller session cookie storing/restoring. It features the advanced River serialization protocol which is far more space- and computation-efficient. It can be found in use within the excellent Infinispan project as well as finding heavy use in JBoss.
- Add Scalate Markdown as dependency
- Add Appache Commons Lang as dependency, to use its StringEscapeUtils in jsEscape * Fix bug at remoteIp when reverseProxy is enabled in config/xitrum.json
- Remove double quotes around the result of jsEscape
- Remove xitrum.comet.CometController Rename xitrum.comet.Comet to xitrum.sockjs.MessageQueue
- Try GZIP compressing session cookie bigger than 4KB (limit of most browsers) Display error log when session cookie is still bigger than 4KB after compressing
- Rename routes.sclasner to routes.cache
- Update Netty from 3.5.8.Final to 3.5.9.Final
- Update Hazelcast from 2.3.1 to 2.4
- Update Scaposer from 1.1 to 1.2
1.9.7:
- Fix problem when HTTPS is used and static file is bigger than "smallStaticFileSizeInKB" in config/xitrum.js: #64
- Fix iOS6 Safari POST caching problem by automatically setting "Cache-Control" header to "no-cache" for POST response: http://www.mnot.net/blog/2012/09/24/caching_POST http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results
- Support HEAD (automatically handled by Xitrum as GET), OPTIONS, and PATCH
- In your controller, to prevent client-side caching, call setNoClientCache(); It will set "Cache-Control" header to: "no-store, no-cache, must-revalidate, max-age=0"
- Other new methods: isTablet: returns true if the request is from tablet setClientCacheAggressively() respondHtml("<html>...</html>") respondJsonText("[1, 2, 3]") respondJsonP(List(1, 2, 3), "myFunction") respondJsonPText("[1, 2, 3]", "myFunction")
- Responding methods (respondXXX, redirectTo) now returns org.jboss.netty.channel.ChannelFuture http://static.netty.io/3.5/api/org/jboss/netty/channel/ChannelFuture.html You can use it to perform actions when the response has actually been sent
- Update Netty from 3.5.7.Final to 3.5.8.Final: https://netty.io/Blog/Netty+358Final+release+-+A+%22must%22+upgrade
- Update slf4j-api from 1.6.6 to 1.7.1
- Update jQuery from 1.7.2 to 1.8.2
- Update jQuery Validate from 1.9.0 to 1.10.0: http://bassistance.de/2012/09/07/release-validation-plugin-1-10-0/
- Update Knockout.js from 2.0.0 to 2.1.0
- Update Knockout.mapping from 2.0.3 to 2.3.2
1.9.6:
- Support WebSocket for iPhone Safari when running on port 80 (HTTP) or 443 (HTTPS); previous Xitrum versions work OK for iPhone Safari when non-standard ports are used
- Improve i18n feature, e.g. add autosetLanguage method: http://xitrum-framework.github.io/guide/i18n.html
1.9.5:
- You should upgrade to Xitrum 1.9.5 as soon as possible because there's a bug with file upload in Netty 3.5.5.Final: netty/netty#569
- Update Netty from 3.5.5.Final to 3.5.7.Final: https://netty.io/Blog/Netty+357Final+released https://netty.io/Blog/Netty+356Final+released
- Update Hazelcast from 2.2 to 2.3.1: http://www.hazelcast.com/docs/2.3/manual/multi_html/ch18s04.html
1.9.4:
- Fix bug that causes non-empty 304 Not Modified response to be sent. This buggy response will be sent when respondFile is used in your controllers. You should upgrade to Xitrum 1.9.4 as soon as possible because Chrome cannot handle this response properly (but Firefox, Safari, and even IE can).
1.9.3:
Update Netty from 3.5.3.Final to 3.5.5.Final: https://netty.io/Blog/Netty+355Final+released https://netty.io/Blog/Netty+354Final+out+now
From Netty 3.5.5.Final, to delete cookie when the browser closes windows, set max age to Integer.MIN_VALUE, not -1 as before
Xitrum now can serve flash socket policy file: http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html http://www.lightsphere.com/dev/articles/flash_socket_policy.html
config/xitrum.json is slightly improved: https://github.com/xitrum-framework/xitrum-new/blob/master/config/xitrum.json
"Cache-Control" header will be automatically set to "no-cache" for chunked response, e.g. when response.setChunked(true) is called Note that "Pragma" will not be sent because this header is for request, not response: http://palizine.plynt.com/issues/2008Jul/cache-control-attributes/
- Add:
respondBinary(channelBuffer: ChannelBuffer) respondWebSocket(channelBuffer: ChannelBuffer)
Avoid duplicate routes when deleting and recreating routes.sclasner
Remove </meta>, </input>, and </link> at: <meta name="csrf-token" content="d1d50807-5a0a-4d42-830a-a01a3628f2c8"></meta> <input name="csrf-token" type="hidden" value="d1d50807-5a0a-4d42-830a-a01a3628f2c8"></input> <link type="text/css" media="all" rel="stylesheet" href="/resources/public/xitrum/xitrum.css?DMtin-KdUgKxwWIyHp3E4A"></link> You should use
!= antiCSRFMeta != xitrumCSS != antiCSRFInput
- instead of:
= antiCSRFMeta = xitrumCSS = antiCSRFInput
1.9.2:
- Add global basic authentication to protect the whole site. This is usually needed when putting an unfinished site to the Internet. See https://github.com/xitrum-framework/xitrum-new/blob/master/config/xitrum.json
- Improve access log to include remote IP
- Support "Range" request to static files Xitrum can now be used to serve interleaved MP4 movies (tested on iOS, Safari, Firefox, and Chrome) For simplicity only these specs are supported: bytes=123-456 bytes=123-
- Update SBT from 0.11.3-2 to 0.12.0
- Update Hazelcast from 2.1.2 to 2.2: http://hazelcast.com/docs/2.2/manual/multi_html/ch18s04.html hazelcast_java_client.json is changed to hazelcast_java_client.properties See https://github.com/xitrum-framework/xitrum-new/blob/master/config/hazelcast_java_client.properties
- Update Scaposer from 1.0 to 1.1: xitrum-framework/scaposer#2
1.9.1:
- Support "Range" request to static files Xitrum can now be used to serve interleaved MP4 movies (tested on iOS and Firefox) For simplicity only this spec is supported: bytes=123-456
- Update Netty from 3.5.0.Final to 3.5.3.Final: https://netty.io/Blog/Announcing+the+new+web+site+and+Netty+351Final https://netty.io/Blog/Netty+352Final+is+out https://netty.io/Blog/Say+Hello+to+Netty+353Final+
- Update Rhino from 1.7R3 to 1.7R4: https://developer.mozilla.org/en/New_in_Rhino_1.7R4
- Update SBT from 0.11.2 to 0.11.3-2
1.9:
Use Netty 3.5.0.Final instead of 4.0.0.Alpha1-SNAPSHOT for file upload To upgrade, in your project in most cases just replace io.netty.xxx with org.jboss.netty.xxx Ex:
Old code: import io.netty.util.CharsetUtil.UTF_8 New code: import org.jboss.netty.util.CharsetUtil.UTF_8
basicAuthenticate now works as documented: http://xitrum-framework.github.io/guide/howto.html#basic-authentication
Add I18n#tf, tcf, tnf, tcnf for formatted string; Standard placeholders %d, %s etc. work, but if the formatted string contains many of them, their order should not be changed
sbt publish-local can be run easily by anyone, not only core developers
Update Hazelcast from 2.0.2 to 2.1.2
Update SLF4J from 1.6.4 to 1.6.6
1.8.7:
- Add build for Scala 2.9.2
- To get URL to WebSocket action: ControllerObject.action.webSocketAbsoluteUrl
- Update Hazelcast from 2.0.1 to 2.0.2
- Fix #63 #63
1.8.6:
- Fix WebSocket bug introduced in Xitrum 1.8.4, now WebSocket frame receiving works again
- Cleaner API for WebSocket: http://xitrum-framework.github.io/guide/async.html#websocket
- To easily put JS fragments to Scalate views, jsAtBottom is split to jsDefaults and jsForView. jsDefaults containing jQuery, Knockout.js etc. should be put at layout's <head>. jsForView containing JS fragments added by jsAddToView should be put at layout's bottom.
- Add JS utility: xitrum.appendAndScroll, see example: https://github.com/xitrum-framework/xitrum-demos/blob/master/src/main/view/scalate/quickstart/controller/CometChat/index.jade
1.8.5:
- Regex can be used in routes to specify requirements: def show = GET("/articles/:id<[0-9]+>") { ... }
- Update Hazelcast from 2.0 to 2.0.1
- Update Javassist from 3.15.0-GA to 3.16.1-GA
1.8.4:
- Update Hazelcast from 1.9.4.8 to 2.0
- Remove ExecutionHandler. If your action performs a blocking operation that takes long time or accesses a resource which is not CPU-bound business logic such as DB access, you should do it in the async style (better) or use a separate thread pool to avoid unwanted hiccup during I/O because an I/O thread cannot perform I/O until your action returns the control to the I/O thread.
- For each connection, requests will be processed one by one. From Mongrel2: http://mongrel2.org/static/book-finalch6.html Where problems come in is with pipe-lined requests, meaning a browser sends a bunch of requests in a big blast, then hangs out for all the responses. This was such a horrible stupid idea that pretty much everone gets it wrong and doesn't support it fully, if at all. The reason is it's much too easy to blast a server with a ton of request, wait a bit so they hit proxied backends, and then close the socket. The web server and the backends are now screwed having to handle these requests which will go nowhere.
1.8.3:
- Fix #60
1.8.2:
- Filters now have "only" and "except" http://xitrum-framework.github.io/guide/filter.html
- Optimize routing by using methods instead of vals http://xitrum-framework.github.io/guide/controller_action_view.html
1.8:
Add Scalate back, with precompilation
Remove annotations and put related actions into controller
Remove server-side auto-validation for postback requests and rewrite validators so that they can be used for any kind of requests; You can still use postback APIs on browser side, postback requests are easier to debug with Firebug or Chrome, because parameter names are no longer encrypted
- Improve data-after, now you can write
data-after="$('#chatInput').val('')"
- instead of
data-after="function () { $('#chatInput').val('') }"
Add Knockout.js
Add Scala delimited continuation See:
http://www.earldouglas.com/continuation-based-web-workflows-part-two/ http://stackoverflow.com/questions/6062003/event-listeners-with-scala-continuations http://jim-mcbeath.blogspot.com/2010/08/delimited-continuations.html
Update jQuery from 1.6.4 to 1.7.1
Fix urlForPublic bug, resulted URL now has the leading "/"
Improve Quickstart: https://github.com/xitrum-framework/xitrum-quickstart
1.7:
WebSocket, see: http://xitrum-framework.github.io/guide/async.html#websocket http://netty.io/blog/2011/11/17/
Make postback tag attributes HTML5 standards-compliant: You must change:
postback to data-postback after to data-after confirum to data-confirm
Expose APIs for data encryption so that application developers may use xitrum.util.{Secure, SecureBase64, SeriDeseri} See http://xitrum-framework.github.io/guide/howto.html#encrypt-data
Update Hazelcast from 1.9.4.4 to 1.9.4.5
1.6:
- Redesign filters to be typesafe
- Add after and around filters
- Add Loader.json and use JSON for config files (.json files should be used instead of .properties files)
1.5.3:
- Close connection for HTTP 1.0 clients. This allows Xitrum to be run behind Nginx without having to set proxy_buffering to off. Nginx talks HTTP/1.1 to the browser and HTTP/1.0 to the backend server, and it needs the backend server to close connection after finishing sending response to it. See http://wiki.nginx.org/HttpProxyModule.
- Fix the bug that causes connection to be closed immediately when sending file from action using renderFile to HTTP 1.0 clients.
1.5.2:
- Add xitrum.Config.root (like Rails.root) and fix #47
- Better API for basic authentication
- renderFile now can work with absolute path on Windows
- Exit if there's error on startup
- Update SLF4J from 1.6.2 to 1.6.4 (and Logback from 0.9.30 from to 1.0.0)
- Update Hazelcast from 1.9.4.3 to 1.9.4.4
1.5.1:
- Update Jerkson from 0.4.2 to 0.5.0
1.5:
Static public files now do not have to have /public prefix, this is convenient but dynamic content perfomance decreases a little
Applications can handle 404 and 500 errors by their own instead of using the default 404.html and 500.html
Change validation syntax to allow validators to change HTML element: <input type="text" name={validate("username", Required)} /> now becomes {<input type="text" name="username" /> :: Required}
<input type="text" name={validate("param", MaxLength(32), MyValidator)} /> now becomes {<input type="text" name="param" /> :: MaxLength(32) :: MyValidator}
<input type="text" name={validate("no_need_to_validate")} /> now becomes {<input type="text" name="no_need_to_validate" /> :: Validated}
Implement more validators: Email, EqualTo, Min, Max, Range, RangeLength
Update jQuery Validation from 1.8.1 to 1.9.0: https://github.com/jzaefferer/jquery-validation/blob/master/changelog.txt
Textual responses now include charset in Content-Type header: http://code.google.com/speed/page-speed/docs/rendering.html#SpecifyCharsetEarly
Fix bug header not found: Content-Length for 404 and 500 content
1.4:
- Fix bug at setting Expires header for static content, it is now one year later instead of 17 days later
- Set Expires header for resources in classpath
- HTTPS (see config/xitrum.properties) KeyStore Explorer is a good tool to create self-signed keystore: http://www.lazgosoftware.com/kse/index.html
1.3:
- Update
Hazelcast: 1.9.4.2 -> 1.9.4.3 Jerkson: 0.4.1 -> 0.4.2 SBT: 0.10.1 -> 0.11.0
Improve performance, based on Google's best practices: http://code.google.com/speed/page-speed/docs/rules_intro.html Simple benchmark (please use httperf, ab is broken) on MacBook Pro 2 GHz Core i7, 8 GB memory:
Static file: ~11000 req/s Resource file in classpath: ~11000 req/s Dynamic HTML without layout: ~7000 req/s Dynamic HTML with layout: ~7000 req/s
Only gzip when client specifies "gzip" in Accept-Encoding request header
1.2:
- Conditional GET using ETag, see: http://stevesouders.com/hpws/rules.php
- Fix for radio: SecureBase64.encrypt always returns same output for same input <input type="radio" name={validate("light")} value="red" /> <input type="radio" name={validate("light")} value="yellow" /> <input type="radio" name={validate("light")} value="green" />
1.1:
- i18n using Scaposer
- Faster route collecting on startup using Sclasner