cari
RumahJavajavaTutorialMemanggil Clojure dari Java menggunakan contoh sebenar (Clojure Quarkus)

Calling Clojure from Java using a real example (Clojure   Quarkus)

Cabarannya

Hujung minggu lalu, saya memutuskan untuk meneroka lebih lanjut tentang cara Clojure boleh berinteraksi dengan ekosistem Java yang sedia ada, cabarannya mudah:

Buat rangka kerja web ringkas dalam Clojure menggunakan rangka kerja Quarkus sebagai asas.

Premis:

  • The Quarkus tidak tahu apa yang akan dilaksanakan mengikut laluan, malah tidak berapa banyak laluan yang wujud.
  • Saya sepatutnya boleh mencipta laluan dan pengendali menggunakan Clojure semudah mungkin:
(defn send-hello-world [] "Hello World")

(defn routes [] [{:method "GET"
                  :path "/hello" 
                  :handler send-hello-world}])

Beberapa takrifan:

  • Quarkus: Quarkus ialah rangka kerja Java asli Kubernetes yang dibuat untuk mesin maya Java (JVM) dan kompilasi asli, mengoptimumkan Java khusus untuk bekas.
  • Clojure: Merupakan bahasa pengaturcaraan yang dinamik dan bertujuan umum

Langkah 1: Mencipta apl Quarkus

Sangat mudah untuk memulakan aplikasi dalam Quarkus anda boleh mengikuti tutorial ini, kerana anda boleh melihat arahan terakhir anda ialah quarkus create && cd code-with-quarkus selepas itu anda boleh membuka folder code-with-quarkus dengan IDE kegemaran anda, arahan itu mencipta struktur asas aplikasi Quarkus, dan anda boleh menjalankan quarkus dev

Langkah 2: Dayakan projek untuk mengenali fail clj

Anda perlu mengkonfigurasi Quarkus untuk memasukkan fail .clj dalam folder sasaran (Folder dengan apl terkumpul anda), dan anda boleh melakukannya dengan menambahkan konfigurasi ini dalam pom.xml di dalam

<resources>
        <resource>
            <directory>/</directory>
            <includes>
                <include>*.clj</include>
            </includes>
        </resource>
    </resources>

Langkah 3: Buat fail Clojure

Seperti yang saya nyatakan sebelum ini, saya menentukan satu struktur untuk mengisytiharkan laluan saya, di lokasi folder utama yang sama. Kemudian saya mencipta folder bernama quarkus_clj dengan fail yang dipanggil teras dengan kod di bawah:

(ns quarkus-clj.core)

(defn send-hello-world [] "Hello World")

(defn routes [] [{:method "GET"
                  :path "/hello" 
                  :handler send-hello-world}])

Langkah 4: Membolehkan Quarkus mengendalikan program Clojure saya

Di sinilah keajaiban berlaku??!

Pertama sekali, anda harus memasang Clojure di dalam apl Quarkus anda; anda boleh melakukannya dengan menambahkan kebergantungan dalam pom.xml

<dependency>
      <groupid>org.clojure</groupid>
        <artifactid>clojure</artifactid>
        <version>1.11.1</version> 
</dependency>

Kini, anda boleh memadamkan fail GreetingResource.java dan ujiannya. Di tempat yang sama, cipta fail Starting.java

Saya menulis beberapa ulasan menerangkan cara ia berfungsi

@ApplicationScoped
public class Starting {
    //Setup app routes
    public void setupRouter(@Observes Router router) {
        // Load Clojure core;
        IFn require = Clojure.var("clojure.core", "require");
        // Load quarkus-clj.core namespace
        require.invoke(Clojure.read("quarkus-clj.core")); 

        // Load the route list function
        IFn routesFn = Clojure.var("quarkus-clj.core", "route");

        // Invoke the function with no parameters
        PersistentVector routesVector = (PersistentVector) routesFn.invoke();

        //For each route in routes vector 
        for (Object route : routesVector) {
            /**Get the route map, example
            {:method "GET"
             :path "/hello" 
             :handler send-hello-world}
             */
            PersistentArrayMap routeMap = (PersistentArrayMap) route;

            //Get :path value
            String path = (String) routeMap.valAt(Clojure.read(":path"));
            //Get :handler function
            IFn handlerRoute = (IFn) routeMap.valAt(Clojure.read(":handler"));
            //Get :method value
            String method = (String) routeMap.valAt(Clojure.read(":method"));
            //Create a handler to exec handler function
            Handler<routingcontext> handlerFn = (RoutingContext context) -> {
            String result = (String) handlerRoute.invoke();  
            context.response().end(result);
        };
            //Config the route in quarkus
            router.route(HttpMethod.valueOf(method), path).handler(handlerFn);
        }
    }
}
</routingcontext>

Kini anda hanya boleh menjalankan: quarkus dev buka laluan anda yang diisytiharkan dan lihat hasilnya!

Kesimpulan

Ini ialah contoh pantas tentang cara menggunakan Clojure dalam apl Quarkus untuk mencipta laluan dinamik. Dengan hanya beberapa langkah, kami menyambungkan kedua-dua ekosistem dan menyediakan sistem penghalaan asas. Jangan ragu untuk mengembangkan asas ini dan terokai kemungkinan lain dengan Clojure dan Quarkus!

Atas ialah kandungan terperinci Memanggil Clojure dari Java menggunakan contoh sebenar (Clojure Quarkus). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimanakah JVM mengendalikan perbezaan dalam sistem operasi API?Bagaimanakah JVM mengendalikan perbezaan dalam sistem operasi API?Apr 27, 2025 am 12:18 AM

JVM Mengendalikan Perbezaan API Sistem Operasi melalui JavanativeInterface (JNI) dan Perpustakaan Standard Java: 1. JNI membenarkan kod Java untuk memanggil kod tempatan dan terus berinteraksi dengan API Sistem Operasi. 2. Perpustakaan Standard Java menyediakan API bersatu, yang dipetakan secara dalaman kepada API sistem operasi yang berbeza untuk memastikan kod tersebut berjalan di seluruh platform.

Bagaimanakah modulariti yang diperkenalkan dalam kemerdekaan platform kesan Java 9?Bagaimanakah modulariti yang diperkenalkan dalam kemerdekaan platform kesan Java 9?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyaffectjava'splatformindected.java'splatformindectenceismaintybythejvm, butmodularityinfluencesapplicationstructureandManagement, indirectlyimpactingplatformindect.1) DeploymentandmentandmentweMbecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecombecom

Apakah bytecode, dan bagaimanakah ia berkaitan dengan kemerdekaan platform Java?Apakah bytecode, dan bagaimanakah ia berkaitan dengan kemerdekaan platform Java?Apr 27, 2025 am 12:06 AM

BytecodeinjavaistheintermediaterepresentationThateNableSplatformindant.1) javacodeiscompiledintobytecodestoredin.classfiles.2)

Mengapa Java dianggap sebagai bahasa bebas platform?Mengapa Java dianggap sebagai bahasa bebas platform?Apr 27, 2025 am 12:03 AM

JavaachievesplatformindependencethroughavavaVirtualMachine (JVM), yang mana -yexeCuteSbytecodeonanydeviceWIjvm.1)

Bagaimanakah antara muka pengguna grafik (GUI) menyajikan cabaran untuk kemerdekaan platform di Java?Bagaimanakah antara muka pengguna grafik (GUI) menyajikan cabaran untuk kemerdekaan platform di Java?Apr 27, 2025 am 12:02 AM

Kemerdekaan platform dalam pembangunan Javagui menghadapi cabaran, tetapi boleh ditangani dengan menggunakan swing, javafx, penampilan penyatuan, pengoptimuman prestasi, perpustakaan pihak ketiga dan ujian silang platform. Pembangunan Javagui bergantung pada AWT dan Swing, yang bertujuan untuk menyediakan konsistensi rentas platform, tetapi kesan sebenar berbeza dari sistem operasi ke sistem operasi. Penyelesaian termasuk: 1) Menggunakan Swing dan Javafx sebagai Toolkit GUI; 2) menyatukan penampilan melalui uimanager.setlookandfeel (); 3) mengoptimumkan prestasi untuk memenuhi platform yang berbeza; 4) menggunakan perpustakaan pihak ketiga seperti Apachepivot atau SWT; 5) Melaksanakan ujian silang platform untuk memastikan konsistensi.

Apakah aspek pembangunan Java yang bergantung kepada platform?Apakah aspek pembangunan Java yang bergantung kepada platform?Apr 26, 2025 am 12:19 AM

Javadevelopmentisnotentirelyplatform-independentduetoseveralfactors.1) jvmvariationsaffecperformanceandbehavioracrossdifferentos.2) nativelibrariesviajniintroduceplatform-specificiSsues.3)

Adakah terdapat perbezaan prestasi semasa menjalankan kod Java pada platform yang berbeza? Kenapa?Adakah terdapat perbezaan prestasi semasa menjalankan kod Java pada platform yang berbeza? Kenapa?Apr 26, 2025 am 12:15 AM

Kod Java akan mempunyai perbezaan prestasi apabila berjalan pada platform yang berbeza. 1) Strategi pelaksanaan dan pengoptimuman JVM adalah berbeza, seperti OracleJDK dan OpenJDK. 2) Ciri -ciri sistem operasi, seperti pengurusan memori dan penjadualan thread, juga akan menjejaskan prestasi. 3) Prestasi boleh ditingkatkan dengan memilih JVM yang sesuai, menyesuaikan parameter JVM dan pengoptimuman kod.

Apakah beberapa batasan kemerdekaan platform Java?Apakah beberapa batasan kemerdekaan platform Java?Apr 26, 2025 am 12:10 AM

Java'splatformindecthaslimitationscludingperformanceOverhead, VersionCompateIssues, cabaranwithnativelibraryintegration, platform-specificfeatures, danjvminstallation/penyelenggaraan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),