{"id":19704654,"url":"https://github.com/datastax/pulsar-jms","last_synced_at":"2026-03-18T00:09:55.771Z","repository":{"id":37078355,"uuid":"354892302","full_name":"datastax/pulsar-jms","owner":"datastax","description":"DataStax Starlight for JMS, a JMS API for Apache Pulsar ®","archived":false,"fork":false,"pushed_at":"2026-03-11T13:31:16.000Z","size":24438,"stargazers_count":53,"open_issues_count":18,"forks_count":23,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-03-11T19:39:55.890Z","etag":null,"topics":["jakartaee","javaee","jms","messaging","pulsar"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datastax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE.txt","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-04-05T16:07:03.000Z","updated_at":"2026-02-20T19:05:06.000Z","dependencies_parsed_at":"2024-05-11T01:39:39.112Z","dependency_job_id":"b28d9a99-ff25-4b61-a1ac-3682021d3fdf","html_url":"https://github.com/datastax/pulsar-jms","commit_stats":null,"previous_names":[],"tags_count":71,"template":false,"template_full_name":null,"purl":"pkg:github/datastax/pulsar-jms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datastax%2Fpulsar-jms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datastax%2Fpulsar-jms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datastax%2Fpulsar-jms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datastax%2Fpulsar-jms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datastax","download_url":"https://codeload.github.com/datastax/pulsar-jms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datastax%2Fpulsar-jms/sbom","scorecard":{"id":324823,"data":{"date":"2025-08-11","repo":{"name":"github.com/datastax/pulsar-jms","commit":"c23baa9d0ccebfdd5d8fe92fbf0adaa4eed11ce0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":1,"reason":"Found 4/30 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":2,"reason":"3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/tck-client-side-filters.yaml:1","Warn: no topLevel permission defined: .github/workflows/tck-server-side-filters.yaml:1","Warn: no topLevel permission defined: .github/workflows/tests.yaml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-client-side-filters.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-client-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-client-side-filters.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-client-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-client-side-filters.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-client-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-server-side-filters.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-server-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-server-side-filters.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-server-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tck-server-side-filters.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tck-server-side-filters.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/datastax/pulsar-jms/tests.yaml/master?enable=pin","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 7.0.15 not signed: https://api.github.com/repos/datastax/pulsar-jms/releases/223719521","Warn: release artifact 6.0.6 not signed: https://api.github.com/repos/datastax/pulsar-jms/releases/223714489","Warn: release artifact 7.0.14 not signed: https://api.github.com/repos/datastax/pulsar-jms/releases/218897735","Warn: release artifact 6.0.5 not signed: https://api.github.com/repos/datastax/pulsar-jms/releases/218903830","Warn: release artifact 6.0.4 not signed: https://api.github.com/repos/datastax/pulsar-jms/releases/214306682","Warn: release artifact 7.0.15 does not have provenance: https://api.github.com/repos/datastax/pulsar-jms/releases/223719521","Warn: release artifact 6.0.6 does not have provenance: https://api.github.com/repos/datastax/pulsar-jms/releases/223714489","Warn: release artifact 7.0.14 does not have provenance: https://api.github.com/repos/datastax/pulsar-jms/releases/218897735","Warn: release artifact 6.0.5 does not have provenance: https://api.github.com/repos/datastax/pulsar-jms/releases/218903830","Warn: release artifact 6.0.4 does not have provenance: https://api.github.com/repos/datastax/pulsar-jms/releases/214306682"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v","Warn: Project is vulnerable to: GHSA-h46c-h94j-95f3","Warn: Project is vulnerable to: GHSA-78wr-2p64-hpwj","Warn: Project is vulnerable to: GHSA-4265-ccf5-phj5","Warn: Project is vulnerable to: GHSA-4g9r-vxhx-9pgx","Warn: Project is vulnerable to: GHSA-4cx2-fc23-5wg6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T02:11:34.022Z","repository_id":37078355,"created_at":"2025-08-18T02:11:34.027Z","updated_at":"2025-08-18T02:11:34.027Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30636917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-18T00:09:27.587Z","status":"ssl_error","status_checked_at":"2026-03-18T00:09:26.123Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jakartaee","javaee","jms","messaging","pulsar"],"created_at":"2024-11-11T21:23:50.450Z","updated_at":"2026-03-18T00:09:55.759Z","avatar_url":"https://github.com/datastax.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Starlight for JMS\n\nStarlight for JMS implements the JMS 2.0 (Java Messaging Service ®) API over the Apache Pulsar® Java Client.\n\nThis library is Open Source Software, Apache 2 licensed.\n\nPlease refer to the [official JMS documentation](https://jakarta.ee/specifications/messaging/2.0/) in order to learn about JMS.\nThis [website](https://javaee.github.io/jms-spec/) is useful as well as it contains the former JMS 2.0 specifications before the Jakarta transitions.\n\nYou can find the official Apache Pulsar documentation [here](https://pulsar.apache.org).\n\nThe documentation for this project is located [here](https://docs.datastax.com/en/streaming/starlight-for-jms/3.2/index.html).\n\n## Installation\n\nIn order to use this library just add this dependency to your Maven pom:\n\n```\n\u003cdependency\u003e\n   \u003cartifactId\u003epulsar-jms\u003c/artifactId\u003e\n   \u003cgroupId\u003ecom.datastax.oss\u003c/groupId\u003e\n   \u003cversion\u003eVERSION\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nThat file contains only Starlight for JMS code, and transitively imports the Apache Pulsar client and the Jakarta JMS 2.0 specifications JAR.\n\nYou can also use a \"fat\" JAR that includes all dependencies:\n\n```\n\u003cdependency\u003e\n   \u003cartifactId\u003epulsar-jms-all\u003c/artifactId\u003e\n   \u003cgroupId\u003ecom.datastax.oss\u003c/groupId\u003e\n   \u003cversion\u003eVERSION\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Version Compatibility\n\nStarlight for JMS works well with every Pulsar version for basic features. However, some specific features require particular version combinations.\n\n### Compatibility Matrix\n\n| Starlight for JMS Version | JMS API Version | Apache Pulsar Version |\n|---------------------------|-----------------|----------------------|\n| 9.x.x (current)          | JMS 3.0         | 4.x                |\n| 8.x.x                    | JMS 2.0         | 4.x                |\n| 7.x.x                    | JMS 3.0         | 3.x                |\n| 6.x.x                    | JMS 2.0         | 3.x                |\n\n\n## Getting started\n\nIn JMS you need these three concepts to get started:\n- a ConnectionFactory: use com.datastax.oss.pulsar.jms.PulsarConnectionFactory\n- a Queue: use com.datastax.oss.pulsar.jms.PulsarQueue (or better Session#createQueue)\n- a Topic: use com.datastax.oss.pulsar.jms.PulsarTopic (or better Session#createTopic)\n\nThis is how you access them with Starlight for JMS:\n\n```\n   Map\u003cString, Object\u003e configuration = new HashMap\u003c\u003e();\n   configuration.put(\"webServiceUrl\", \"http://localhost:8080\"); \n   configuration.put(\"brokerServiceUrl\", \"pulsar://localhost:6650\"); \n   PulsarConnectionFactory factory = new PulsarConnectionFactory(configuration);\n   \n   try (JMSContext context = factory.createContext()) {\n       Destination destination = context.createQueue(\"persistent://public/default/test\");\n       context.createProducer().send(destination, \"text\");\n       try (JMSConsumer consumer = context.createConsumer(destination)) {\n            String message = consumer.receiveBody(String.class);\n            ...\n       }\n   }`\n```\n\nEnsure you have a Pulsar service running at http://localhost:8080 before trying out the example.\n\nYou can for instance run Pulsar Standalone using docker like this:\n\n```\ndocker run --name pulsar-jms-runner -d -p 8080:8080 -p 6650:6650 apachepulsar/pulsar:2.7.1 /pulsar/bin/pulsar standalone\n```\n\n## JakartaEE® Resource Adapter\n\nIn order to use this JMS Client inside a JakartaEE® or JavaEE® application you can use the `ResourceAdapter`.\n\nThe source code for the resource adapter is in this [directory](resource-adapter).\n\n## Using JNDI to Connect to Pulsar\n\nYou can use the JNDI API to build the ConnectionFactory and the Destination references.\n\nSteps:\n* Use `com.datastax.oss.pulsar.jms.jndi.PulsarInitialContextFactory` as `Context.INITIAL_CONTEXT_FACTORY`\n* Pass the configuration (authentication, broker address...) using the `Properties` object\n* Lookup the ConnectionFactory using the system name `ConnectionFactory`\n* Lookup destinations using `queues/` or `topics/` prefix\n\n```\nProperties properties = new Properties();\nproperties.setProperty(Context.INITIAL_CONTEXT_FACTORY, \"com.datastax.oss.pulsar.jms.jndi.PulsarInitialContextFactory\");\nproperties.setProperty(Context.PROVIDER_URL, \"pulsar://localhost:6650\");\nproperties.setProperty(\"webServiceUrl\", \"http://localhost:8080\");\n// automatically close the ConnectionFactory when closing the JDNI context\nproperties.setProperty(\"autoCloseConnectionFactory\", \"true\");\nproperties.setProperty(\"jms.systemNamespace\", \"public/default\");\n\n// add here the rest of your configuration\n// properties.setProperty(\"jms.clientId\", \"my-id\");\n\njavax.naming.Context jndiContext = new InitialContext(properties);\n\n// get access to the ConnectionFactory\nConnectionFactory factory = (ConnectionFactory) jndiContext.lookup(\"ConnectionFactory\");\nQueue queue = (Queue) jndiContext.lookup(\"queues/MyQueue\");\nTopic topic = (Topic) jndiContext.lookup(\"topics/MyQueue\");\n\n// use fully qualified Pulsar topic name\nQueue queue = (Queue) jndiContext.lookup(\"queues/persistent://tenant/namespace/MyQueue\");\n\n// disposing the InitialContext closes the ConnectionFactory\njndiContext.close();\n```\n\n\n## Examples\n\nWe have two example apps, one for Pulsar standalone, and one for Astra Streaming:\n\n- [Pulsar standalone](https://docs.datastax.com/en/streaming/starlight-for-jms/3.2/jms-migration/pulsar-jms-quickstart-sa.html)\n- [Astra Streaming](https://docs.datastax.com/en/streaming/streaming-learning/use-cases-architectures/starlight/jms/index.html)\n\nIn addition, we’ve provided the following integration examples:\n\n- with [Spring Boot®](examples/spring)\n- with [Payara Micro®](examples/payara-micro)\n- with [Apache TomEE®](resource-adapter-tests)\n\n## JMS TCK (Technology Compatibility Kit) Verification\n\nYou can download the TCK [here](https://jakarta.ee/specifications/messaging/2.0/). The repository contains a copy of the TCK that automates the execution of the tests.\n\nIn the tck-executor module you'll find:\n\n- The Java Code needed to initialize the TCK, `JNDIInitialContextFactory.java`.\n- The configuration file for the TCK runner, `ts.jte`.\n- A file that contains the excluded tests that cannot pass with this client, `ts.jtx`\n- Scripts to run Apache Pulsar, configure the Transaction Coordinator, and prepare for the execution of the TCK.\n\nPlease **NOTE**: \n1. Regarding the TCK configuration file, `ts.jte`, you don't need to configure it manually. The maven process (as described below) will configure it automatically.\n2. Regarding the test exclusion file, 'ts.jtx', you don't need to make any changes. This file contains a minimum list of TCK tests that are not applicable when using Pulsar as the JMS provider. For example, globally unique subscription names are not supported so the corresponding tests are skipped.\n\n### Build Prerequisite\n\nIn order to run th TCK tests, please make sure the following prerequisites are met:\n\n* JDK 8 (Note that this is only needed to run TCK test. Starlight for JMS itself can run on newer java versions)\n* docker\n* ant\n* maven\n\nAlso, when running the TCK tests on one machine, please make sure that there is **NO** existing Pulsar server running on the same machine. The execution of the TCK tests will launch a standalone Pulsar server running in a docker container. It will run into port conflicts if a Pulsar server is already running. \n\n### Build and run TCK\n\nTo build the package, run unit tests, and run the TCK:\n\n```\nmvn clean install -Prun-tck\n```\n\nTo run only the TCK:\n\n```\nmvn clean install -Prun-tck -am -DskipTests -pl tck-executor\n```\n\n## Building from source\n\nIf you want to develop and test this library you need to build the jar from sources.\n\nThis is a standard Maven project, so use the default commands:\n\n       mvn clean install\n\n## Configuration reference\n\nFor a complete list of configuration options, please see [Starlight for JMS Configuration Reference](https://docs.datastax.com/en/streaming/starlight-for-jms/3.2/reference/pulsar-jms-reference.html)\n\n## Implementation details\n\nFor general background as well as implementation details, see:\n\n- [Mapping Pulsar concepts to JMS specifications](https://docs.datastax.com/en/streaming/starlight-for-jms/3.2/reference/pulsar-jms-mappings.html)\n- [Starlight for JMS implementation details](https://docs.datastax.com/en/streaming/starlight-for-jms/3.2/examples/pulsar-jms-implementation.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatastax%2Fpulsar-jms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatastax%2Fpulsar-jms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatastax%2Fpulsar-jms/lists"}