- jdk: republish with jdk 8, due to neowu#8
- property: when override property with env var, convert key with upper case and replace '.' with '_', e.g. "sys.kafka.uri" to "SYS_KAFKA_URI", due to dot is not supported by POSIX, especially not supported by alpine 3.6, https://bugs.alpinelinux.org/issues/7344
- property: allow all the properties can be override by env var (mount by kubernetes/docker) or system property (via -Dkey=value)
- search: update es to 6.1.0, disable zen for integration test
- db: fixed ZonedDateTime saves to DB with nano precision
- search: update es to 6.0.1
- api: support /_sys/api, can be used by http://editor.swagger.io/ to generate OpenAPI doc
- test: replace hamcrest with assertj
- http: in local dev env, allow developer to run multiple apps on different port, either put -Dsys.http.port=8080 in Intellij Run configuration, or ./gradlew -Dsys.http.port=8080 :some-service:run
- test: update junit to 5.0.2
- bug: fixing elasticsearch client does not need EsExecutors.PROCESSORS_SETTING settings
- sys: added Threads.availableProcessors() to allow use -Dcore.availableProcessors to specify cpu core to be used due to in docker/kubenetes env, Runtime.getRuntime().availableProcessors() always return number of cores from host, not cpu limited by cgroup (-cpus or limit.cpus).
- json: support empty object
- log: console logger writes to stderr for WARN/ERROR, this is to help kubernetes logger driver to classify log severity, e.g. stackdriver in gcloud
- search: update es to 6.0.0
- log: log-processor collects its own cpu/heap/kafka stats to index
- log: ActionLogContext.stat() supports adding up
- log: ActionLogContext.track() tracks I/O reads and writes for heavy backend db, such as DB/Mongo/ES
- web: put max forwarded ips config to prevent from x-forwarded-for clientIp spoofing http().maxForwardedIPs()
- search: update es to 5.6.4
- bean: removed "javax.inject:javax.inject:1", replaced with core.framework.inject, removed constructor injection support (to simplify and prepare for JDK 9)
- jdk: make built target compatible with JDK 9, as first step of java 9 migration (some of toolchain does not support java 9 yet)
- kafka: update to 1.0.0
- pool: monitor pool size for both db and redis/cache/session
- pool: refactor and simplify resource pool
- web: @QueryParam bean validation to disallow @Property
- httpClient: changed httpClient to interface, to make it easier to mock/override binding, change HTTPRequest to bean style from builder style you need to update the binding to "bind(HTTPClient.class, new HTTPClientBuilder().build())"
- redis: replaced jedis impl with minimal support we only need to support request/response/pipeline model, and due to we manage resource pool, cluster support requires customization anyway
- check: replace findbugs with spotbugs
- test: updated to junit 5, for old tests before upgrading API, add following dependency 'junit:junit:4.12' 'org.junit.vintage:junit-vintage-engine:4.12.1' for integration test use "@ExtendWith(IntegrationExtension.class)" instead of @RunWith
- search: update es to 5.6.3
- api: remove jaxb dependency, use our own @Property instead (jaxb will be deprecated by jdk9 and it has unnecessary java.desktop module dependency)
- package: move core.framework.api from core-ng lib to core.framework, due to with JDK 9, package must be unique to export across all libs, this is to prepare for JDK 9 modules
- web: enable http2 support
- web: simplified ControllerInspector, to only support JDK 1.8.0_60 or later
- lib: update javaassist to 3.22, kafka to 0.11.0.1
- mongo: tweak mongo encoder and decoder code gen
- http: update undertow to 1.4.20, tweak the cookies config
- search: update es to 5.6.2
- web: simplified Response interface, use chained method to set content-type and status going forward
- bug: fix oracle pagination query param value
- validate: replace validation impl with dynamic code generation
- kafka: combine json reader/validator into handler, since one topic can only have one message class and there is no rabbitMQ anymore
- test: added EnumConversionValidator to facilitate verifying view enum to domain enum conversion
- api: add validation for GET/DELETE body type
- web: added @QueryParam support to replace flat JAXB bean for GET/DELETE
- queue: removed rabbitMQ support, make kafka only queue implementation
- search: update es to 5.5.2
- web: support @ResponseStatus on exception class, to simplify default error response handling
- web: updated request parser to determine port with x-forwarded-proto aware, (due to google cloud level 7 lb does not forward x-forwarded-port)
- mongo: update driver to 3.5, and its new builtin POJO impl should be slower than coreng due to reflection, so we still keep EntityCodec
- db: replaced repository.select(Query) with Query repository.select() to support dynamic query with pagination
- web: Response.file(File) changed to Response.file(Path) to be consistent with entire api design, (to return path via WebDirectory)
- json: update jackson to 2.9.0, simplified configuration
- scheduler: add secondly trigger, to support precisely scheduling to align with clock time
- search: update es to 5.5.1
- db: update insertQuery to use prepareStatement(String sql, String columnNames[]), to adapt to both mysql, oracle and potentially postgreSQL
- db: support oracle db insert with sequence
- search: update es to 5.5.0
- kafka: update to 0.11.0.0, use built-in headers for meta data
- test: validate override binding in integration test
- lib: update es to 5.4.1, fongo to 2.1.0
- web: forbidden inherited controller
- html: recommend to use double quote to delimit attribute value
- search: update es to 5.4.0, delete by query support
- httpclient: changed to disable redirect by default, support to enable redirect handling
- httpclient: added 302 Found status
- web: action log uses context.requestURL instead of context.path
- route: remove regex path variable support, not used anymore
- api: rename WebServiceRequestSigner to WebServiceRequestInterceptor
- rate: added rate limiter support for API and site
- log: add actionLogContext.stat() to support numeric context field, for analytics thru kibana
- scheduler: daily/weekly/monthly supports timezone
- search: update es to 5.3.0
- db: fix to support ZonedDateTime
- site: enable security headers, X-Frame-Options, X-XSS-Protection, X-Content-Type-Options
- kafka: updated maxPoll and minPoll config
- kafka: kafka().publish() return publisher instance for convenience
- kafka: add default publish method to use UUID as key
- mongo: fix bulkReplace to set upsert
- gradle: update to 3.4.1, updated lib.gradle
- template: support to use html tag contains '-'
- kafka: fix LONG_PROCESS threshold calculation
- mongo: tweak bulkDelete param type
- kafka: update default consumer behavior to auto reset to latest
- utils: make Exceptions.error be aware of last Throwable argument, keep it consistent as logger
- mongo: add bulkDelete
- lib: update kafka to 0.10.2.0, es to 5.2.2
- kafka: simplify listener, warn if took too long to consume message
- api: validate webservice impl method should not have @PathParam()
- bug: fixed if/for statement template statement pattern, thanks @bitmore88gt and @julioalberto64
- kafka: log info on message poll
- kafka: monitor max commit latency
- kafka: support max poll records
- config: refactory module/config
- bind: removed bindSupplier, not used anymore
- queue: deprecate rabbitMQ
- session: make session only supports https, with modern standard, https should be by default
- http: StaticDirectoryController checks requested file must under directory
- kafka: set default max process time to 15 mins
- lib: update undertow to 1.4.10, es to 5.2.1
- config: better validate kafka/mongo/es uri property presents
- kafka: support max process time for long process
- kafka: tweak kafka producer and consumer stats
- kafka: track publish, collect kafka producer and consumer stats
- undertow: update to 1.4.8
- inject: fix beanFactory inject method parameter to support generic type
- search: update ES to 5.2.0
- kafka: update logging to expose more info
- mongo: check entities must not be empty in bulk operations
- redis: support scan keys
- kafka: update to 0.10.1.1
- mongo: support bulk replace, update driver to 3.4.1
- search: update es to 5.1.1
- mongo: support bulk insert
- kafka: add kafka support in order to replace rabbitMQ
- properties: add _sys property controller for troubleshooting
- properties: allow load properties from file path, for kube/docker support
- http: change https redirection to 301 instead of 308
- http: support site.httpsOnly(), for https hsts and https redirect
- redis: update jedis to 2.9.0
- search: update es to 5.0.2
- http: added https with self signed cert support, make http/https port configurable
- search: update es to 5.0.0
- log: removed rabbitmq log forward support
- session: replace redis impl with HASH, to make it easier to manage and share between multiple apps
- web: fix path param to decode %2F to '/', (disabled undertow decodeURL completely)
- log: rename kafkaHost to kafkaURI
- http: fix decode path param bug
- kafka: update to 0.10.1.0
- test: fix EnvWebValidator to support node
- template: translate to <script type="text/template"/> to support IE
- cdn: removed version support, use node pipeline instead
- web: use ./src/main/web as web directory if node is used
- lib: update undertow to 1.4.3
- http: url param supports boolean
- search: update esTookTime to nano seconds
- mockito: update mockito to 2.1
- queue: start supporting kafka
- mongo: removed eval() support
- log: make logger.isDebugEnabled() to return false, to disable 3rd party log gracefully
- http: throw methodNotAllowedException for unknown http method
- session: ignore all errors on decoding redis session value
- session: allow configure session cookie name
- session: change session data encoding to JSON
- search: update jackson lib and es lib to match latest
- json: remove optional field support, which is not useful, only support Optional as return object
- search: update client to enable sniff
- mongo: updated driver to 3.3.0
- convert: support ZonedDateTime in mongo/db/json conversion
- template: support c:html:attribute for attribute not be escaped (thanks gabo)
- site: expose messages interface for i18n messages
- gradle: remove properties process, use node/gulp asset pipeline instead
- redis: restructure hash() and set() api
- monitor: collect gc stats in CollectStatTask
- http: update undertow to 1.4.0
- test: support MockExecutor
- search: support bulkDelete
- redis: support hget
- test: EntitySchemaGenerator support LocalDate
- db: support LocalDate type as column
- bind: use mock executor in integration test
- mongo: support readPreference in all operation
- search: support search type in ES
- hash: added SHA1 SHA256 support
- search: remove groovy test support, actually script query is never useful, not plan to use anymore
- mock: mockRedis supports all operations
- search: support foreach for reindex support
- httpclient: ContentType.parse supports to ignore illegal charset
- session: support to configure cookie domain
- mongo: refine mongo decoding logic and error message
- http: fix webContext should init at beginning, to make it available in 404 error handler
- mongo: support connect to multiple mongo with name
- mongo: support MapReduce/Aggregate with readPreference
- httpclient: wrap UncheckedIOException as HTTPClientException
- queue: update queue handling action to be queue/{queue}/{message_type}, to make it easier to manage and analyze
- template: support classpath template (for include)
- session: remove key
- httpclient: throw HTTPClientException when status code is not supported
- template: fix template engine with c:src in String template
- validate: support Optional
- validate: removed @ValueNotNull/@ValueNotEmpty/@ValuePattern, use @NotNull/@NotEmpty/@Pattern to simplify
- mongo: count() supports null filter
- background-task: fix task can be broken if exception occurred
- error: fix errorCode.severity handling by remoteServiceException
- mongo: support mapReduce
- web: support return all values for file upload and form post
- web: support PUT for file uploading
- http: fixed pass errorCode.severity
- http: add Map<String, String) queryParams();
- template: remove c:msg, use m:text instead
- exception: removed @Warning, use programmable severity (to simplify webservice exception handling and error report)
- template: support m:text and m:{attr} for message body and attribute
- route: fix dynamic path should not match trailing slash
- error: refactory errorCode support, make webservice client translate
- httpclient: put error code to httpclientexception
- rabbitmq: fixed queue listener to report error code on ack
- thread: try to shutdown thread pool gracefully
- template: hide templateManager, not needed by application
- mongo: log Bson filter/projection/sort in json string format
- json: support Optional as field, queue/ws interface supported too
- http: update httpclient request to accept ContentType
- search: update es to 2.3.1
- httpclient: throw HTTPClientException for invalid url
- log: put 1M limit of trace log to forward to remote
- log: add message filter support
- mongo: support eval for db-migration
- mongo: set connection max idle time to 30mins
- hmac: changed input from String to bytes
- search: update es to 2.3.0
- validate: add @ValuePattern
- http: request supports body() method
- http: added 422 status code
- log: actionLogContext.put checks duplication to avoid huge trace log
- search: update es to 2.2.1
- web: for file response, close exchange when end
- mongo: update default timeout to 15s
- rabbitmq: publisher supports message with priority
- http: added status code 410
- build: update gradle 2.12, flyway 4.0
- mongo: support @MongoEnumValue
- db: renamed @EnumValue to @DBEnumValue
- template: remove LanguageProvider as first step for i18n message support refactory
- stopwatch: start to use nanoTime
- log: actionlog start to trace cpuTime
- mongo: register enum codec from entity, for filter
- http: support statusCode 429
- rabbitmq: update to 3.6.1
- rabbitmq: make rabbitmq listener use dedicated thread pool
- executor: remove Batch support
- scheduler: use dedicated thread pool
- search: remove client(), add analyze/index meta support
- mongo: added Mongo interface for unit test and management
- validation: support @Pattern
- mongo: disable cursorFinalizer, framework always close cursor
- thread: limit executor to processor*4 thread, to collect data for next phase design
- config: update template and message config API
- web: support convert query param as value type
- template: refine i18n language support
- mongo: removed old Mongo interface, refined mongo impl
- mongo: add timeout to query, support MongoCollection
- mongo: updated to 3.2.2, added fongo support back
- search: exposed ElasticSearch as interface
- queue: tweak queue listener to result in less thread when rabbitmq is busy, track slow acknowledge
- batch: allow specify maxConcurrentHandlers for batch
- async: provide thread name for all thread pool
- redis: update default redis timeout to 5s
- validation: update validation exception message
- json: add from/to enum value to JSON, to support search query build with enum
- util: ASCII supports char
- log: improve log error handling
- fix: allow logger to log null message, e.g. errorMessage of NullPointerException
- rabbitmq: unified single/batch message polling
- util: moved InputStreams to util, open to use
- log: make max trace log 3000, and only append warn/error after
- search: added SearchResponse to convert hits to object on framework level
- tuning: internal tuning, move low level optimization class to impl package, leave core.framework.util simple ones
- httpclient: use byte[] as body, remove ByteBuf
- log: use 500k as max trace log to forward to log processor, removed max trace event size limit, truncate after 5000 and only add warning events
- cache: make cache process byte[] directly to redis
- log: limit trace log 200k max per line, rise max log events per action to 10,000
- json: add afterburner module for object binding performance
- db: lower default db timeout to 15s
- queue: updated rabbitMQ api and config api
- json: start convert json to bytes directly, to lower memory footprint with queue/ES/cache
- web: removed web/not-found, web/method-not-allowed action assign, since we use error_code now
- background: moved pool-cleanup, collect-stat job to background thread, not included in action
- web: renamed all internal /management/ path to /_sys/
- monitor: initial monitoring draft, forward monitor metrics via logforwarder
- template: invalid url attr will write src="", container will write empty if content is null
- search: support 2.2.0, load groovy plugin in test context
- redis: loose slow_redis warning threshold and timeout, on busy server due to CPU context switch, it's relative easy to hit it
- web: requestURL now contains QueryString, (requestURL is url without decoding)
- log: renamed all slow query error_code and naming
- pool: add error code POOL_TIME_OUT
- template: warning if url fragment gets null url
- log: forward log one by one to simplify, batch happens on log-processor
- log: make 3rd party log level to info, (e.g. ES log sampler error by INFO level in separated thread)
- search: set ping timeout, support dynamic index name (for alias or time serial index name)
- fix: typo in @NotEmpty/@ValueNotEmpty
- ws: support enum in path param
- cache: update getAll to return Map<String, T>
- web: removed URIBuilder, added Encodings.encodeURIComponent and decodeURIComponent
- web: use URI query param encoding/decoding to set/get cookie (refered as URLEncoding in other place, e.g. jquery)
- schedule: support weekly and monthly trigger
- bytebuf: improve for skip/available as it will be wrapped by buffered stream or S3 client
- web: mark path not found error code to PATH_NOT_FOUND (to ignore 3rd party scan)
- batch: new async support, use Executor
- mongo: support LocalDateTime in filter
- httpclient: fix NPE with HttpEntity is null on 204
- search: ignore cluster name for transport client
- url: encode '+' for path segment to keep compatible with other impl, e.g. undertow, AWS S3
- mongo: update driver to 3.2.0
- quality: support jacoco report
- lib: updated undertow to 1.3.10, jackson to 2.6.4, update quality check lib
- db: added repository.select(query) to support complex query + limit
- log: dynamic group action log message to forward, 2000 or 5M which comes first
- log: update log forwarding structure, send in batch
- log: moved ErrorCode to core.framework.api.log.ErrorCode
- search: update ES to 2.1.0
- log: restructure trace/warning log, for prod log aggregation
- hash: added md5 support
- queue: removed sns/sqs support, only use rabbitmq from now on
- redis/cache: mset with expiration, update jedis to 2.8.0
- redis: fix the typo in log,
- bug: fix cache getAll/setAll
- http: added ACCEPTED(202) for async response code
- db: removed selectInt/selectLong/selectString, use selectOne instead with target view class, e.g. selectOne(sql, String.class, params)
- benchmark: added jmh for systemically performance turning
- util: added ASCII to handle ASCII chars
- web: validate empty pathParam on both server and client side
- util: fast impl of Strings.split(char)
- uri: simplify URIBuilder to match our use cases and performance tuning
- util: ByteBuf put byte[]
- refactory: performance tuning for html/uri encode/decode
- bug: fix html parser/lexer process emtpty end script tag.
- redis: update redis mget to return Map<String,String>
- route: validate path segment and variable
- bug: fixed QueryParam encoding to encode +/?/=
- bug: fixed URLFragment.isValidURL to allow '%'
- util: enhanced ByteBuf to make it can be used in broader scenario.
- encodings: removed hex encoding, we don't have use case any more, use base64 instead
- encodings: removed url encoding from Encodings, added URIBuilder
- cache: support get multiple keys in batch
- cache: changed get(Supplier) to get(Function<String,T>) to keep consistent with getAll, and be more functional style
- bug: fix http content type parsing multipart
- search: support bulk index
- yml: removed yml support, use JSON instead
- mongo: removed fongo, updated mongo driver to 3.1.0
- mongo: entity validation, not allow mix with JAXB
- template: refactory html parser validation, validate boolean attribute
- template: template must register in config before using, enforce safety
- template: validate empty attribute
- template: refactory html parser, html validation, void element
- config: support sys.http.port
- template: support i18n message with hierarchy, "en_US" fall back to "en"
- template: support dynamic href
- mongo: added get(id) method to replace findOne()
- mongo: added Query to support complex query
- search: update to elasticsearch 2.0
- lib: update undertow to 1.3.4, jackson to 2.6.3
- http: introduced strong typed ContentType
- template: validate cdn attribute, url must start with /
- template: c:msg="" use key directly, removed expression support
- template: built-in i18n support
- properties: read in utf-8
- httpclient: fix text() to use utf-8 as encoding
- webservice: unified web service call error flow, RemoteServiceException provided structural info to be handled in client service app
- exception: provide ErrorCode support for error flow
- template: removed c:cdn, automatically replace all src/href applies
- template: new template syntax, only support HTML template
- rabbitmq: publisher mark pool item to be broken if AlreadyClosedException (throws when exchange/queue is not configured correctly in RabbitMQ)
- site: exposed WebDirectory to injection context to provide way let website access web directory
- mongo: support assigned id
- mongo: config support
- lib: removed hsql to default test-compile scope, not all services had db.
- gradle: core-ng app support ant property filtering, conf/env/web content override
- test: rewrite env conf validator, to verify /conf/env/resources and /conf/env/web
- web: #cdn function append version param
- gradle: checkstyle update to 6.11.2, finally support intention for lambda
- web: static content supports file under root directly (like robot.txt and favicon.ico)
- web: static content removed 304 support, because static content is always handled by nginx in server env.
- web: update undertow to 1.3.0.Final
- db: improve setParam error message
- util: Files, added common functions
- test: refactory test dependency and structure, support api().client() mock
- web: support CDN config and #cdn() function, in sys.properties uses sys.cdn.host=
- template: expression validate return type, for for/if
- validate: added @NotEmpty (for string), @ValueNotEmpty, @ValueNotNull (for collection)
- template: print location when expression failed
- template: removed #if(condition?a:b), always prefer to write method in model
- template: support single quote string
- template: add #if as built-in method for inline condition
- bug: fixed actionLog result is not updated
- bug: fixed web/IO allow content-length = 0, and catch all errors during IO in order to generate action log
- util: added ByteBuf for high performance network IO and NIO
- http-client: response bytes() changed to inputStream()
- web-service: moved core.framework.api.web.client.WebServiceRequestSigner to core.framework.api.web.service.WebServiceRequestSigner
- web: changed form parsing threading model, support file upload
- web: read json body in IO thread
- refactory: web-service code generator, logger
- config: better error message for load not found property
- lib: update all 3rd party lib up to date
- web-service: fix web service GET query, not append param if null
- log-forward: clear up queue if rabbitmq is down
- log: support to disable action/trace, !!! sys.properties, use sys.log.actionLogPath=console, sys.log.traceLogPath=console in dev env.
- queue: config, publish(String[] destinations) will call publish(String destination) if length = 1
- log: to protect log ES, not forward trace log if lines is more than max hold size = 5000, the log will still be written to file and application is responsible to split task into smaller chunk
- batch: tweak async executor for batch process
- redis: refined config, removed name support and added "sys.redis.host"
- search: config support, annotation support
- log-processor: due to search support changed, log processor must match latest core-ng
- validate: type validator disallow cycle reference data structure (include same node as parent/child)
- redis: config support
- redis: added setIfAbsent, use SET to replace SETEX
- search: removed parent/child support, always use nested from now on
- search: support parent/child
- search: added delete and other tuning
- bug: fixed DBConfig to handle multiple DB with different name
- search: added get()
- web: web bean validation, disallow to use @XmlEnum(Integer.class) on enum class, (in this case, not use enum, just use Integer, this is due to incomplete Jackson JAXB support)
- bug: fixed when rabbitmq server is down, the rabbitmq listener/log forward may keep trying without wait, cause cpu 100%
- httpClient: reduced default timeout to 1 min
- httpClient: disable cookie and auth by default
- util: InputStreams use 8K as buffer if length can not be determined, optimize for HTTPClient download with gzip
- tuning: various of tunings, utils/IO/random and etc
- util: removed Asserts, not really needed, in actual business code, just throw error/validation exception
- db: removed RowMapper, use view instead (broken change!)
- web: enum must have @XmlEnumValue
- config: renamed AbstractApplication to App (broken change!)
- db: removed repository select where clause must contains '?', exception is like "where some_column is null";
- db: removed Query, prefer use sql + param... (broken change!)
- web: updated Request.host() to Request.hostName(), according to url standard: http://bl.ocks.org/abernier/3070589
- db: replace repository insert/update query with dynamic code generation
- db: use @EnumValue to map the enum value in db (broken change!)
- db: lower the slow query to 5s and too many results to 1000
- redis: raise slow query to 200ms, (considering GC and network latency)
- redis: removed keys() (use SCAN in future if needed)
- redis: use binaryJedis and other changes according to profiling
- db: fix selectInt/String with null returned
- search: validate search index document object
- validator: partial validate for update (ignore notNull)
- db: validate for update
- validation: added @Min/@Max
- db: removed db c3p0 pool, use internal pool
- sysmodule: removed sys.jdbc.pool.minSize/maxSize, all env should be same, and if need to specify, put to App
- rabbitmq: check slow query
- rabbitmq: make listener use native thread
- redis: use internal pooling
- rabbitmq: channel pooling (send message perf is 20x faster if not closing channel)
- web: assign action for 404 => web/not-found, 405 => web/method-not-allowed
- scheduler: make scheduler for both internal and external scheduling
- db: use label not column name to map view
- FIX: make ControllerInspector works with jdk 1.8.0_60
- rabbitmq: handle ShutdownSignalException gracefully
- lib: updated jackson/undertow/rabbitmq/httpclient lib
- FIX: ControllerInspector does not work with jdk 1.8.0_60, disable temporarily
- log: refactor/tuning impl
- log: update log-processor ES mappings
- search: API changed to provide more flexibility to operate index and type
- log: draft of trace log forwarding
- http: fix put/post without content-type
- http server: interceptor ignore built-in controllers
- mongo: use LinkedHashMap to keep same order as in mongo
- log: draft of log forwarding
- web: fix webservice controller inspection (getAnnotation/methodInfo)
- mongo: find supports orderby/skip/limit
- log: push action log to rabbitmq, index by ES/Kibana
- log: renamed action log requestId to id, and use refId for reference
- webService: WebContext can retrive request() to support web service
- rabbitmq: publish message with appId = -Dcore.appName
- webservice client: pass -Dcore.appName via "client" header
- internal: expose web template manager for cms widget impl
- internal: renamed -Dcore.web to -Dcore.webPath, added -Dcore.appName, prepare for log aggregating
- make default values to fit AWS medium/large instance, simplify env properties
- rabbitmq: make default user/password to rabbitmq/rabbitmq
- redis: make default pool size to (5,50)
- db: make default pool size to (5,50)
- cache/session: update default redis pool size, (min=8,max=32) optimized to AWS medium/large instances.
- redis: print pool size info for slow query
- updated c3p0 to 0.9.5.1 (all client must update c3p0 lib to use this version of core-ng) make c3p0 not use thread pool for checkin, we don't do test on checkin, this improves performance under high load dataSource.setForceSynchronousCheckins(true);
- updated mysql driver to 5.1.36 for db-migration
- website: message support, site().message().messageProvider() is for custom message service
- mongo: refactory, support fongo, minor API changes
- queue: composite queue publisher
- queue: MessagePublisher.publish with routingKey, only support for RabbitMQ
- template: validate model class
- add TemplateEngine for general purpose
- module: renamed bind(supplier) to bindSupplier()
- template: "include" support
- queue: renamed MessagePublisher.reply to publish
- template: custom function support, prepare for #msg, #js, #css
- template: load from string
- db repository, added selectAll()
- template engine first draft impl, removed thymeleaf
- website static content
- refactory rabbitmq support
- update elasticsearch to 1.7
- standardized validation exception and make validator throw validationException, refactory validator
- fix: http response body validation pass empty list
- databaseImpl, track available/total connections when getting conn from pool
- httpClient, allow server ssl cert change during renegotiation
- tune http client log info
- enhanced Files, create temp file, logging
- fix: api() client to pass "Accept: application/json"
- replace URL/URLPath encoding with apache common codec
- tuned async task begin/end log message
- measure startup time
- measure time on test db schema creation
- update gradle to 2.5
- update build gradle to publish to s3 directly
- fix: api webservice client encode path param
- renamed StandardAppModule to SystemModule, and added jdbc pool properties
- fix: requestURL(), parse x-forwarded-port to get requested port
- fix: test hsql db map BigDecimal to DECIMAL(10,2)
- refactory config structure to simplify test context
- refactory class validation into general one with spec
- WebContext to pass from interceptor
- updated web customErrorHandler, moved it to http() and in top level of Module
- add requiredProperty() method in module
- async task support, inject AsyncExecutor
- webservice support List as request/response, for channel-advisor and also for us
- removed module.loadYML(), use YAML.load(ClasspathResources.text()) instead, for db init data, use YAML loadlist then call repository.batchInsert
- improve web service interface validator, better error message for bean param/path param missing @PathParam
- Cache management controllers (list names/clear key)
- move repository() into db() and register db entity class to view.
- fix: webservice interface validator should allow String as @PathParam
- db added timeout for checkout conn and query, default is 60s
- update ElasticSearch API according to ES 1.6.0
- bind with supplier to support for expensive or external dependent object, test context can override by not calling supplier.get()
- mark trace in ActionLogContext, write trace log for all subsequent actions (apiCall/messages)
- create Application.configure()/start(), to make core-ng be used as script for testing/scripting
- trace external calling time and count, e.g. db, redis
- update trace log path
- cache value type validator
- refactory cache impl
- Cache error handle, fault tolerant
- database batchInsert/Delete
- httpClient supports download bytes
- webservice client
- support test initDB(), runscript and createSchema
- update rabbitmq/db config
- refactory validator
- refactory module/config(testConfig)/builder/impl structure
- refactory session provider, local session cleanup
- added rabbitmq subscriber and listener
- refactory module config, session changes to site().session()
- added core-ng-api for interface module
- updated row mapper, use code generation, updated Row interface
- added core-ng-test support
- YML supports type
- support to add cache without name
- cache management controller
- add repository support