Último lanzamiento: 5.7.0
Este es el módulo central de la plataforma Holon y representa la base de la plataforma, proporcionando la definición de la arquitectura general, las estructuras base y las API.
Los aspectos más destacados del módulo son:
ContextProperty y la API DatastoreJWT )Consulte la documentación del módulo para más detalles.
Al igual que cualquier otro módulo de plataforma, este artefacto es parte del ecosistema de la plataforma Holon, pero también puede usarse como una biblioteca independiente .
Consulte Comenzar y la documentación de la plataforma para obtener más detalles.
Definición del modelo de propiedad:
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 );
}Configuración de la propiedad:
static StringProperty NAME = StringProperty . create ( "name" ). message ( "Name" ). messageCode ( "localization.name" )
. withConfiguration ( "my-config" , "my-value" );Convertidor de valor de propiedad:
static StringProperty INTEGER_MODEL = StringProperty . create ( "integer_value" ). converter ( Integer . class ,
integer -> String . valueOf ( integer ), string -> Integer . valueOf ( string ));Validadores de propiedades:
static StringProperty NAME = StringProperty . create ( "name" )
. withValidator ( Validator . notBlank ()). withValidator ( Validator . max ( 50 ));Presentadores de propiedades y renderizadores:
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 ();
});DataStore:
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 PropertySet y DataStore:
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 ());Reino:
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 ();Consulte la documentación del módulo para la guía del usuario y un conjunto completo de ejemplos.
Consulte la estructura y las convenciones del código de la plataforma Holon para aprender sobre la filosofía de "API Java real" con la que se desarrolla y organiza la base de código del proyecto.
La plataforma Holon está construida con Java 11 , por lo que necesita una versión 11 JRE/JDK o superior para usar los artefactos de la plataforma.
Ver lanzamientos para los lanzamientos disponibles. Cada etiqueta de lanzamiento proporciona un enlace a los problemas cerrados.
La plataforma Holon es de código abierto y licencia bajo la licencia Apache 2.0. Todos los artefactos (incluidos binarios, fuentes y javadocs) están disponibles en el repositorio central de Maven.
La identificación del grupo Maven para este módulo es com.holon-platform.core y se proporciona una lista de materiales (factura de materiales) para obtener los artefactos del módulo:
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 >Vea la lista de artefactos para obtener una lista de los artefactos disponibles de este módulo.
La plataforma Holon proporciona una lista general de Maven (factura de materiales) para obtener fácilmente todos los artefactos de plataforma disponibles:
Plataforma Maven Bom:
< dependencyManagement >
< dependency >
< groupId >com.holon-platform</ groupId >
< artifactId >bom</ artifactId >
< version >${platform-version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencyManagement >Vea la lista de artefactos para obtener una lista de los artefactos disponibles de este módulo.
Puede construir las fuentes usando Maven (se recomienda la versión 3.3.x o arriba) como esta:
mvn clean install
Verifique la documentación de la plataforma o la documentación del módulo específico.
Haga una pregunta sobre el desbordamiento de la pila. Monitoreamos la etiqueta holon-platform .
Informar un problema.
También hay un soporte comercial disponible.
Consulte el repositorio de ejemplos de la plataforma Holon para un conjunto de proyectos de ejemplo.
Ver contribuyendo a la plataforma Holon.
Únase a la habitación de contribución de Gitter para cualquier pregunta y para contactarnos.
Todos los módulos de plataforma Holon son software de código abierto lanzado bajo la licencia Apache 2.0.
ID del grupo Maven: com.holon-platform.core
| ID de artefacto | Descripción |
|---|---|
holon-core | Componentes básicos de plataforma, servicios y API |
holon-http | Soporte de mensajes HTTP |
holon-async-http | Soporte de mensajes HTTP asíncronos |
holon-async-datastore | API asincrónica de coros de datos |
holon-auth | Autenticación y autorización |
holon-auth-jwt | Soporte de tokens web json |
holon-spring | Integración de primavera |
holon-spring-security | Integración de seguridad de primavera |
holon-spring-boot | Integración de arranque de primavera |
holon-starter | Arrancador de arranque de primavera base |
holon-starter-security | Base Spring Boot Starter con integración de seguridad de primavera |
holon-starter-test | Artor de arranque de primavera base para pruebas unitarias |
holon-bom | Materiales |
holon-bom-platform | Lectura de materiales que incluyen dependencias externas |
documentation-core | Documentación |