Lasta Di
Japanese page here.
- Lasta Di とは?
- GitHub Page
- Two components
- Lightening Boot
- ConnectionPool (DBCP)
- Transaction
- lasta_di.properties
- Di xml
- Major Classes
- Maven Repository
- Code Reading Hint
- Thanks, Frameworks
Lasta Di とは?
simple DI container for LastaFlute, forked from Seasar as Java8
GitHub Page
is there:
Two components
- Quick component
- convention registration, hot reloading (prototype)
- Rich component
- flexible manual registration (singleton)
How to inject
Both components can be injected by @Resource annotation.
e.g. injection definition @Java
@Resource
private AbcLogic abcLogic;
Quick component
Application's business logics, are prototype e.g. Action class, Logic class...
Convention provides auto regsitration:
- Package
- [your domain].app (e.g. com.example.app)
- Class Name
- e.g. app.web.AbcAction, auto regsitered as Action to Lasta Di
Class name suffixes are e.g. following:
- Action
- ...app.web.AbcAction
- Form
- ...app.web.AbcForm
- Assist
- ...app.web.AbcAssist (or ...app.assist.AbcAssist)
- Logic
- ...app.logic.AbcLogic
- (Others)
- AbcValidator, AbcConverter, AbcHelper, AbcService
e.g. Quick components @Directory
com.example
|-app // application package
| |-logic
| | |-AbcLogic
| |-web // web package
| |-AbcAction
| |-AbcForm
|-bizfw
|-dbflute
|-mylasta
And these components can be hot-reloaded so you don't need to reboot in local development. So you can get quick trial-and-error programming with Lasta Di.
Rich component
Application's common classes, are singleton e.g. Manager class
- Package
- [your domain].bizfw (e.g. com.example.bizfw) *actually free but recommended
- Class Name
- e.g. bizfw.AbcManager, basically you can set free name
You can register by your Di xml app.xml flexibly.
e.g. Rich components @Directory
|-src/main/java
| |-com.example
| |-app
| |-bizfw *recommended package for rich components
| | |-AbcManager
| |-dbflute
| |-mylasta
|-src/main/resources
|-app.xml *your Di xml, you can regsiter here
e.g. Di xml @app.xml
<components>
<include path="convention.xml"/>
<component name="abcManager">...bizfw.AbcManager</component>
</components>
Lightening Boot
Simple logic in Lasta Di, speed is prior.
And following features:
- Small dependencies
- Javassit, JTA, Slf4j (only three)
- Lazy Loading
- Minimum initialization in (in hot, warm)
ConnectionPool (DBCP)
Implementation
Lasta Di has the original connection pool, which can handle transactions.
- ConnectionPool
- interface of connection pool, checkOut(), checkInTx()
- SimpleConnectionPool
- simple implementation of connection pool
- PooledDataSource
- data source using connection pool
if you use Lasta Di with LastaFlute, you can use the extended implementation classes which have more rich functions. (e.g. HookedConnectionPool, HookedPooledDataSource)
Transaction
Implementation (for Architect)
Lasta Di has the original JTA implementation, which is related to connection pool.
- LaTransactionManager
- simple implementation of TransactionManager interface
- LaUserTransaction
- simple implementation of UserTransaction interface
- LaTransaction
- simple implementation of Transaction interface
if you use Lasta Di with LastaFlute, you can use the extended implementation classes which have more rich functions. (e.g. HookedTransactionManager, HookedUserTransaction, RomanticTransaction)
javax.transaction.Transactional (for Developer)
javax.transaction.Transactional is supported. You can use it as default in several Quick component (e.g. Logic, Service).
However if you use Lasta Di with LastaFlute, you can use the TransactionStage interface provided by LastaFlute which is programatic transaction. So the annotation may be small use.
Attention, the annotation process is implemented by interceptor (AOP) so you can use it at public method. And Lasta Di can support "this" call of AOP so you can use the annotation in the same class.
e.g. Transactional annotation use @Java
@Transactional
public void registerMember() {
...
}
(While, if you use LastaFlute, you can use the interface TransactionStage instead of the annotation)
lasta_di.properties
Application settigs for Lasta Di.
e.g. lasta_di.properties is here @Directory
|-src/main/java
| |-com.example...
|-src/main/resources
|-app.xml
|-lasta_di.properties
- smart.deploy.mode.location (optional: cool as default)
- e.g. abc_env.properties: lasta_di.smart.deploy.mode
- Settings for smart deploy mode (hot, warm, cool). e.g. hot provides you quick programming in development. While, cool should be set in production.
- smart.package1 (basically required)
- e.g. com.example.app
- Settings for application package treated as smark deploy.
- You can set smart.package2, and 3...
Di xml
Di xml Overview
You can register your components in app.xml.
e.g. app.xml is here @Directory
|-src/main/java
| |-com.example...
|-src/main/resources
|-app.xml
|-lasta_di.properties
You can get rich components by setting comopnent tags with your classes.
e.g. settings for rich components @app.xml
<components>
<!-- settings for rich components -->
<component name="abcManager">...bizfw.AbcManager</component>
<component name="stuManager">...bizfw.StuManager</component>
<component name="xyzManager">...bizfw.XyzManager</component>
</components>
You can get quick components by including convention.xml.
e.g. settings for rich components @app.xml
<components>
<include path="convention.xml"/> <!-- needs for quick components -->
<!-- settings for rich components -->
<component name="abcManager">...bizfw.AbcManager</component>
</components>
You can get library components provided from frameworks, e.g. LastaFlute, dbflute, by including their xml.
e.g. Di xml @app.xml
<components>
<include path="convention.xml"/>
<include path="dbflute.xml"/>
<include path="lastaflute.xml"/>
<component name="abcManager">...bizfw.AbcManager</component>
</components>
Di xml Hierarchy
Embedded xml in Lasta Di are colored:
e.g. Di xml Hierarchy, embedded is colored @app.xml
...Reading lasta_di.xml
...Reading redefiner.xml
...Reading smartdeploy.xml
...Reading smart/hotdeploy.xml
...Reading convention.xml
...Reading embedded_convention.xml
...Reading creator.xml
...Reading convention.xml (recycle)
...Reading customizer.xml
...Reading lastafw_customizer.xml
...Reading embedded_customizer.xml
...Reading tx_customizer.xml
...Reading lastafw_creator.xml
...Reading convention.xml (recycle)
...Reading customizer.xml (recycle)
...Reading embedded_creator.xml
...Reading convention.xml (recycle)
...Reading customizer.xml (recycle)
...Reading customizer.xml (recycle)
...Reading app.xml
...Reading convention.xml
...Reading embedded_convention.xml
...Reading dbflute.xml
...Reading rdb.xml
...Reading jta.xml
...Reading jta+userTransaction.xml
...Reading jta+transactionManager.xml
...Reading jdbc.xml
...Reading jta.xml (recycle)
...Reading lastaflute_assist.xml
...Reading lastaflute_director.xml
...Reading tx_aop.xml
...Reading jta.xml (recycle)
...Reading lastaflute.xml
...Reading lastaflute_core.xml
...Reading lastaflute_assist.xml (recycle)
...Reading lastaflute_db.xml
...Reading jta.xml (recycle)
...Reading lastaflute_web.xml
...Reading lastaflute_core.xml (recycle)
...Reading lastaflute_db.xml (recycle)
...Reading convention.xml (recycle)
Di xml Expression
Using JavaScript engine 'Nashorn' as expression parser.
Redefiner
Yon can customize embedded Di xml.
- Switch Di xml Wholly
- e.g. sea+.xml: switch Di xml wholly
- Copy the original Di xml to the redefined Di xml and fix it.
- Switch Component
- e.g. sea+mystic.xml: switch the embedded 'mystic' to the defined 'mystic'
- No need to define 'namespace' and 'include' in the redefined Di xml.
- This is the most useful.
- Remove Component
- e.g. sea+mystic.xml: nothing defined means removing embedded 'mystic'
- Add Component
- e.g. sea++.xml: the defined components are added to embedded Di xml as low priority
- e.g. ++sea.xml: the defined components are added to embedded Di xml as high priority
e.g. switch component 'userTransaction' fixedly @Directory
|-src/main/resources
| |-app.xml
| |-jta+userTransaction.xml // userTransaction is switched fixedly
// lasta-di.jar contains jta.xml, which has component 'userTransaction'
e.g. switch component 'mystic' in unit test @Directory
|-src/main/resources
| |-app.xml
| |-sea.xml // in production
|
|-src/test/resources
|-sea+mystic.xml // mystic is switched in unit test
Major Classes
- SingletonLaContainer
- has your components
- ConnectionPool
- manages database connections
Maven Repository
See github page.
If you use LastaFlute, you don't need Lasta Di dependency because LastaFlute depends it.
Code Reading Hint
Lasta Di Boot World
Thanks, Frameworks
Lasta Di is forked from Seasar, and inherits it, thankful wonderful functions.
And also forked from S2ClassBuilder (called Redefiner in Lasta Di), provides flexible Di xml.
Thanks.