Dernière version: 5.7.0
Il s'agit du module de base de la plate-forme Holon et représente la Fondation de la plate-forme, fournissant la définition de l'architecture globale, des structures de base et des API.
Les points forts du module sont:
ContextProperty et l'API DatastoreJWT )Voir la documentation du module pour plus de détails.
Comme tout autre module de plate-forme, cet artefact fait partie de l'écosystème de la plate-forme Holon, mais peut également être utilisé comme bibliothèque autonome .
Voir le démarrage et la documentation de la plate-forme pour plus de détails.
Définition du modèle de propriété:
public interface Subject {
static NumericProperty < Long > ID = NumericProperty . longType ( "id" );
static StringProperty NAME = StringProperty . create ( "name" );
static StringProperty SURNAME = StringProperty . create ( "surname" );
static TemporalProperty < LocalDate > BIRTH = TemporalProperty . localDate ( "birth" );
static BooleanProperty ACTIVE = BooleanProperty . create ( "active" );
static VirtualProperty < String > FULL_NAME = VirtualProperty . create ( String . class ,
propertyBox -> propertyBox . getValue ( NAME ) + " " + propertyBox . getValue ( SURNAME ));
static PropertySet <?> SUBJECT = PropertySet . of ( ID , NAME , SURNAME , BIRTH , ACTIVE , FULL_NAME );
}Configuration de la propriété:
static StringProperty NAME = StringProperty . create ( "name" ). message ( "Name" ). messageCode ( "localization.name" )
. withConfiguration ( "my-config" , "my-value" );Convertisseur de valeur de propriété:
static StringProperty INTEGER_MODEL = StringProperty . create ( "integer_value" ). converter ( Integer . class ,
integer -> String . valueOf ( integer ), string -> Integer . valueOf ( string ));Validateurs de propriété:
static StringProperty NAME = StringProperty . create ( "name" )
. withValidator ( Validator . notBlank ()). withValidator ( Validator . max ( 50 ));Présentateurs et rendements de propriété:
String value = NAME . present ( "A value" );
MyType myType = NAME . render ( MyType . class );Propertybox:
PropertyBox propertyBox = PropertyBox . create ( SUBJECT );
String name = propertyBox . getValue ( NAME );
Optional < String > oname = propertyBox . getValueIfPresent ( NAME );
propertyBox . setValue ( NAME , "John" );
propertyBox . propertyValues (). forEach ( propertyValue -> {
Property <?> property = propertyValue . getProperty ();
Object value = propertyValue . getValue ();
});Borne de données:
DataTarget <?> TARGET = DataTarget . named ( "subjects" );
Datastore datastore = getDatastore ();
Stream < PropertyBox > results = datastore . query (). target ( TARGET )
. filter ( NAME . contains ( "a" ). and ( SURNAME . isNotNull ())). sort ( BIRTH . desc ()). stream ( SUBJECT );
Stream < String > names = datastore . query ( TARGET ). aggregate ( SURNAME ). stream ( NAME . max ());
Optional < String > name = datastore . query ( TARGET ). filter ( ID . eq ( 1L )). findOne ( NAME );
datastore . insert ( TARGET , PropertyBox . builder ( SUBJECT ). set ( ID , 1L ). set ( NAME , "John" ). set ( ACTIVE , true ). build ());
datastore . bulkUpdate ( TARGET ). set ( ACTIVE , true ). filter ( BIRTH . lt ( LocalDate . now ())). execute ();
datastore . query ( TARGET ). filter ( ID . eq ( 1L )). findOne ( SUBJECT ). ifPresent ( subject -> datastore . delete ( TARGET , subject ));BEAN PROPRIPTIONSET ET HORE DE DONNÉE:
class MyBean {
private @ NotNull Long id ;
private @ Caption ( "The name" ) String name ;
private @ Caption ( "The surname" ) String surname ;
/* getters and setters omitted */
}
BeanPropertySet < MyBean > propertySet = BeanPropertySet . create ( MyBean . class );
PathProperty <?> name = propertySet . property ( "name" );
PathProperty < String > typedName = propertySet . property ( "name" , String . class );
BeanDatastore datastore = BeanDatastore . of ( getDatastore ());
Stream < MyBean > results = datastore . query ( MyBean . class ). filter ( propertySet . property ( "name" ). eq ( "John" )). stream ();
datastore . save ( new MyBean ());Royaume:
Realm realm = Realm . builder (). withAuthenticator ( Authenticator . create ( MyAuthenticationToken . class , token -> {
if ( "test" . equals ( token . getPrincipal ())) {
return Authentication . builder ( "test" ). withPermission ( "ROLE1" ). build ();
}
throw new UnknownAccountException ();
}))
. withDefaultAuthorizer (). build ();
Realm . builder (). withAuthenticator ( Account . authenticator ( id -> Optional . of ( Account . builder ( id ). build ()))). build ();Authcontext:
AuthContext context = AuthContext . create ( realm );
context . authenticate ( AuthenticationToken . accountCredentials ( "test" , "pwd" ));
Optional < Authentication > authentication = context . getAuthentication ();
boolean permitted = context . isPermitted ( "ROLE1" , "ROLE2" );RestClient:
RestClient client = RestClient . forTarget ( "https://rest.api.example" );
ResponseEntity < TestData > response = client . request ()
. path ( "test/{id}" ). resolve ( "id" , 123 )
. accept ( MediaType . APPLICATION_JSON )
. header ( "MY_HEADER" , "my-value" )
. authorizationBearer ( "An389fz56xsr7" )
. get ( TestData . class );
HttpStatus status = response . getStatus ();
Optional < TestData > payload = response . getPayload ();
Optional < TestData > data = client . request (). path ( "test/{id}" ). resolve ( "id" , 123 )
. getForEntity ( TestData . class );
List < TestData > results = client . request (). path ( "test" ). getAsList ( TestData . class );
client . request (). path ( "test" ). post ( RequestEntity . json ( new TestData ()));
Optional < PropertyBox > propertyBox = client . request (). path ( "test2" )
. propertySet ( PROPERTIES ). getForEntity ( PropertyBox . class ); LocalizationContext:
LocalizationContext localizationContext = LocalizationContext . builder ()
. withMessageProvider ( MessageProvider . fromProperties ( "messages" ). build ())
. withDefaultDateTemporalFormat ( TemporalFormat . MEDIUM )
. withInitialLocale ( Locale . US )
. build ();
localizationContext . localize ( Locale . ITALY );
String localized = localizationContext . getMessage ( "message.code" , "Default message" );
String formatted = localizationContext . format ( LocalDate . now ());
formatted = localizationContext . format ( 123.4d );
Optional < LocalizationContext > current = LocalizationContext . getCurrent ();Voir la documentation du module pour le guide de l'utilisateur et un ensemble complet d'exemples.
Voir la structure et les conventions du code de la plate-forme Holon pour en savoir plus sur la philosophie "Real Java API" avec laquelle la base de code du projet est développée et organisée.
La plate-forme Holon est construite à l'aide de Java 11 , vous avez donc besoin d'une version 11 JRE / JDK ou supérieure pour utiliser les artefacts de la plate-forme.
Voir les versions des versions disponibles. Chaque balise de version fournit un lien vers les problèmes fermés.
La plate-forme Holon est open source et sous licence sous la licence Apache 2.0. Tous les artefacts (y compris les binaires, les sources et les javadocs) sont disponibles dans le référentiel Maven Central.
L' ID de groupe Maven pour ce module est com.holon-platform.core et une nomenclature (acte de fond) est fourni pour obtenir les artefacts du module:
Maven Bom:
< dependencyManagement >
< dependency >
< groupId >com.holon-platform.core</ groupId >
< artifactId >holon-bom</ artifactId >
< version >5.7.0</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencyManagement >Voir la liste des artefacts pour une liste des artefacts disponibles de ce module.
La plate-forme Holon fournit une nomenclature globale (Bill of Materials) pour obtenir facilement tous les artefacts de plate-forme disponibles:
Plate-forme maven bom:
< dependencyManagement >
< dependency >
< groupId >com.holon-platform</ groupId >
< artifactId >bom</ artifactId >
< version >${platform-version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencyManagement >Voir la liste des artefacts pour une liste des artefacts disponibles de ce module.
Vous pouvez construire les sources à l'aide de maven (version 3.3.x ou supérieure est recommandée) comme ceci:
mvn clean install
Vérifiez la documentation de la plate-forme ou la documentation spécifique du module.
Posez une question sur le débordement de pile. Nous surveillons la balise holon-platform .
Signaler un problème.
Un soutien commercial est également disponible.
Voir le référentiel d'exemples de plate-forme Holon pour un ensemble d'exemples de projets.
Voir contribuer à la plate-forme Holon.
Rejoignez la salle Gitter contribue pour toute question et pour nous contacter.
Tous les modules de plate-forme Holon sont des logiciels open source publiés sous la licence Apache 2.0.
Maven Group ID : com.holon-platform.core
| ID d'artefact | Description |
|---|---|
holon-core | Composants, services et API de la plate-forme |
holon-http | Prise en charge des messages HTTP |
holon-async-http | Prise en charge des messages HTTP asynchrones |
holon-async-datastore | API asynchrone |
holon-auth | Authentification et autorisation |
holon-auth-jwt | Prise en charge des jetons Web JSON |
holon-spring | Intégration de printemps |
holon-spring-security | Intégration de la sécurité du printemps |
holon-spring-boot | Intégration de démarrage de printemps |
holon-starter | Démarreur de démarrage de printemps |
holon-starter-security | Démarreur de démarrage de printemps de base avec intégration de sécurité de ressort |
holon-starter-test | Démarreur de démarrage à ressort de base pour les tests unitaires |
holon-bom | Sauvetage |
holon-bom-platform | Déclaration des matériaux, y compris les dépendances externes |
documentation-core | Documentation |