Última lançamento: 5.7.0
Este é o módulo principal da plataforma Holon e representa a base da plataforma, fornecendo a definição da arquitetura geral, estruturas de base e APIs.
Os destaques do módulo são:
ContextProperty e a API DatastoreJWT ) SuporteConsulte a documentação do módulo para obter detalhes.
Assim como qualquer outro módulo de plataforma, esse artefato faz parte do ecossistema da plataforma Holon, mas também pode ser usado como uma biblioteca independente .
Consulte Introdução e a documentação da plataforma para obter mais detalhes.
Definição do modelo de propriedade:
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 );
}Configuração da propriedade:
static StringProperty NAME = StringProperty . create ( "name" ). message ( "Name" ). messageCode ( "localization.name" )
. withConfiguration ( "my-config" , "my-value" );Conversor de valor da propriedade:
static StringProperty INTEGER_MODEL = StringProperty . create ( "integer_value" ). converter ( Integer . class ,
integer -> String . valueOf ( integer ), string -> Integer . valueOf ( string ));Validadores de propriedades:
static StringProperty NAME = StringProperty . create ( "name" )
. withValidator ( Validator . notBlank ()). withValidator ( Validator . max ( 50 ));Apresentadores e renderizadores de propriedades:
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 e 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 a documentação do módulo para o guia do usuário e um conjunto completo de exemplos.
Consulte Estrutura e convenções de código da plataforma Holon para aprender sobre a filosofia "API Java Real Java" com a qual a base de código do projeto é desenvolvida e organizada.
A plataforma Holon é construída usando o Java 11 , então você precisa de uma versão 11 ou mais JRE/JDK para usar os artefatos da plataforma.
Consulte os lançamentos para os lançamentos disponíveis. Cada tag de liberação fornece um link para os problemas fechados.
A plataforma Holon é de código aberto e licenciada sob a licença Apache 2.0. Todos os artefatos (incluindo binários, fontes e javadocs) estão disponíveis no repositório central do MAVEN.
O ID do grupo maven para este módulo é com.holon-platform.core e uma lista de materiais é fornecida para obter os artefatos do 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 >Consulte a lista de artefatos para obter uma lista dos artefatos disponíveis deste módulo.
A plataforma Holon fornece um Bom Maven (Bill of Materials) para obter facilmente todos os artefatos de plataforma disponíveis:
MAVEN BOM: plataforma:
< dependencyManagement >
< dependency >
< groupId >com.holon-platform</ groupId >
< artifactId >bom</ artifactId >
< version >${platform-version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencyManagement >Consulte a lista de artefatos para obter uma lista dos artefatos disponíveis deste módulo.
Você pode construir as fontes usando o maven (versão 3.3.x ou acima é recomendado) como este:
mvn clean install
Verifique a documentação da plataforma ou a documentação específica do módulo.
Faça uma pergunta no transbordamento da pilha. Monitoramos a tag holon-platform .
Relatar um problema.
Um suporte comercial também está disponível.
Consulte o repositório de exemplos da plataforma Holon para um conjunto de projetos de exemplo.
Veja contribuindo para a plataforma Holon.
Junte -se à sala de gitores de contribuir para qualquer pergunta e entre em contato conosco.
Todos os módulos da plataforma Holon são software de código aberto lançado sob a licença Apache 2.0.
MAVEN GROUP ID : com.holon-platform.core
| Id de artefato | Descrição |
|---|---|
holon-core | Componentes, serviços e APIs da plataforma |
holon-http | Suporte às mensagens HTTP |
holon-async-http | Suporte de mensagens HTTP assíncronas |
holon-async-datastore | API assíncrona do datastore |
holon-auth | Autenticação e autorização |
holon-auth-jwt | Suporte de tokens da web json |
holon-spring | Integração da primavera |
holon-spring-security | Integração de segurança da primavera |
holon-spring-boot | Integração da inicialização da primavera |
holon-starter | Base Spring Boot Starter |
holon-starter-security | Base Spring Boot Starter com integração de segurança da primavera |
holon-starter-test | Base Spring Boot Starter para testes de unidade |
holon-bom | Lei de Materiais |
holon-bom-platform | Lei de materiais, incluindo dependências externas |
documentation-core | Documentação |