Rilis terbaru: 5.7.0
Ini adalah modul inti dari platform Holon dan mewakili fondasi platform, memberikan definisi arsitektur keseluruhan, struktur dasar dan API.
Sorotan modul adalah:
ContextProperty dan API DatastoreJWT )Lihat dokumentasi modul untuk detailnya.
Sama seperti modul platform lainnya, artefak ini adalah bagian dari ekosistem platform Holon, tetapi dapat juga digunakan sebagai perpustakaan yang berdiri sendiri .
Lihat Memulai dan dokumentasi platform untuk detail lebih lanjut.
Definisi Model Properti:
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 );
}Konfigurasi Properti:
static StringProperty NAME = StringProperty . create ( "name" ). message ( "Name" ). messageCode ( "localization.name" )
. withConfiguration ( "my-config" , "my-value" );Konverter Nilai Properti:
static StringProperty INTEGER_MODEL = StringProperty . create ( "integer_value" ). converter ( Integer . class ,
integer -> String . valueOf ( integer ), string -> Integer . valueOf ( string ));Validator Properti:
static StringProperty NAME = StringProperty . create ( "name" )
. withValidator ( Validator . notBlank ()). withValidator ( Validator . max ( 50 ));Presenter dan penyaji properti:
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 Propertieset dan 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 ());Dunia:
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 ); LOCALISASICONTEXT:
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 ();Lihat dokumentasi modul untuk panduan pengguna dan satu set lengkap contoh.
Lihat Struktur Kode Platform Holon dan konvensi untuk mempelajari tentang filosofi "Java API" yang digunakan dengan mana basis kode proyek dikembangkan dan diatur.
Platform Holon dibangun menggunakan Java 11 , jadi Anda memerlukan versi JRE/JDK 11 atau lebih untuk menggunakan artefak platform.
Lihat rilis untuk rilis yang tersedia. Setiap tag rilis menyediakan tautan ke masalah tertutup.
Platform Holon adalah open source dan dilisensikan di bawah lisensi Apache 2.0. Semua artefak (termasuk binari, sumber dan javadocs) tersedia dari repositori pusat Maven.
ID grup Maven untuk modul ini adalah com.holon-platform.core dan bom (bill of material) disediakan untuk mendapatkan artefak modul:
Bom Maven:
< 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 >Lihat daftar artefak untuk daftar artefak yang tersedia dari modul ini.
Platform Holon menyediakan Bom Maven secara keseluruhan (Bill of Material) untuk dengan mudah mendapatkan semua artefak platform yang tersedia:
Platform Maven Bom:
< dependencyManagement >
< dependency >
< groupId >com.holon-platform</ groupId >
< artifactId >bom</ artifactId >
< version >${platform-version}</ version >
< type >pom</ type >
< scope >import</ scope >
</ dependency >
</ dependencyManagement >Lihat daftar artefak untuk daftar artefak yang tersedia dari modul ini.
Anda dapat membangun sumber menggunakan Maven (versi 3.3.x atau di atasnya disarankan) seperti ini:
mvn clean install
Periksa dokumentasi platform atau dokumentasi modul spesifik.
Ajukan pertanyaan tentang Stack Overflow. Kami memantau tag holon-platform .
Melaporkan masalah.
Dukungan komersial juga tersedia.
Lihat Repositori Contoh Platform Holon untuk serangkaian proyek contoh.
Lihat berkontribusi pada platform Holon.
Bergabunglah dengan ruang gitter yang berkontribusi untuk pertanyaan apa pun dan untuk menghubungi kami.
Semua modul platform Holon adalah perangkat lunak open source yang dirilis di bawah lisensi Apache 2.0.
ID Grup Maven: com.holon-platform.core
| ID Artefak | Keterangan |
|---|---|
holon-core | Komponen Inti Platform, Layanan, dan API |
holon-http | Dukungan Pesan HTTP |
holon-async-http | Dukungan Pesan HTTP Asinkron |
holon-async-datastore | API Datastore Asynchronous |
holon-auth | Otentikasi dan Otorisasi |
holon-auth-jwt | Dukungan token web JSON |
holon-spring | Integrasi Musim Semi |
holon-spring-security | Integrasi Keamanan Musim Semi |
holon-spring-boot | Integrasi Boot Musim Semi |
holon-starter | Starter boot musim semi dasar |
holon-starter-security | Starter boot musim semi dasar dengan integrasi keamanan musim semi |
holon-starter-test | Starter boot pegas dasar untuk tes unit |
holon-bom | Bill of Material |
holon-bom-platform | Bill of Material termasuk dependensi eksternal |
documentation-core | Dokumentasi |