{"id":1999,"date":"2015-12-16T01:06:00","date_gmt":"2015-12-16T01:06:00","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1999"},"modified":"2021-01-25T12:17:41","modified_gmt":"2021-01-25T20:17:41","slug":"getting-started-javafx-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/","title":{"rendered":"Getting Started with JavaFX and Couchbase Mobile"},"content":{"rendered":"<p>JavaFX and Couchbase Mobile is a great combo for creating desktop class applications with rich user interfaces and fast data access. In this tutorial, you will learn the following core concepts:<\/p>\n<ul>\n<li>Learn about replication, security and deployment using the TodoLite sample<\/li>\n<li>How to start a new JavaFX project with Couchbase Mobile as a dependency<\/li>\n<\/ul>\n<p>We won\u2019t cover TodoLite for Android in this post but you could have both applications running side by side and replicating documents and attachments via Sync Gateway:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10403\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/thumbnail-1024x566.png\" alt=\"\" width=\"900\" height=\"497\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/thumbnail-1024x566.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/thumbnail-300x166.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/thumbnail-768x424.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/thumbnail-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/thumbnail.png 1153w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>You can find the source code of TodoLite JavaFX on <a href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\" data-cke-saved-href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\">github<\/a>.<\/p>\n<h2 id=\"toc_1\">TodoLite JavaFX<\/h2>\n<p>To speed things up, you will clone some source code with the following:<\/p>\n<pre class=\"lang:default decode:true \">git clone git@github.com:CouchbaseTutorials\/todolite-javafx.git\r\ncd todolite-javafx<\/pre>\n<p>Open this folder in IntelliJ and click the <strong>Run<\/strong> button in the upper right corner. A new window should open (of course your\u2019s won\u2019t have any data in it :D):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10404\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/preview.png\" alt=\"\" width=\"733\" height=\"623\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/preview.png 733w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/preview-300x255.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/preview-20x17.png 20w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/p>\n<p>Go ahead and create a new List and Task. At the time of this writing, the JavaFX version of TodoLite doesn\u2019t implement all of the features. Right now, you\u2019re logged in as the user with name wayne and the password is pass. So if you run the TodoLite Android version, you can login with those credentials or create a new user on the Sign Up page and share Lists with other Users. Both applications would be syncing to a Sync Gateway instance running at <a href=\"https:\/\/9cec7a6e-jamiltz.node.tutum.io:4984\/\" data-cke-saved-href=\"https:\/\/9cec7a6e-jamiltz.node.tutum.io:4984\">https:\/\/9cec7a6e-jamiltz.node.tutum.io:4984<\/a>.<\/p>\n<h2 id=\"toc_2\">Data Model<\/h2>\n<p>TodoLite has the following data model. Notice how documents are kept small in size and can reference other documents&#8217; <strong>_id<\/strong> field (you could think of them as foreign keys): <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10405\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/data-model-1024x230.png\" alt=\"\" width=\"900\" height=\"202\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-1024x230.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-300x67.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-768x173.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-1536x345.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-20x4.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model-1320x297.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/data-model.png 1877w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<h2 id=\"toc_3\">Deployment<\/h2>\n<p>The back-end for TodoLite is composed of Sync Gateway and an App Server to allow users to Sign Up. Again, at the time of this writing, the Login and Sign Up screens have not been implemented for the JavaFX version of TodoLite. You can follow the README in the <a href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-development\" data-cke-saved-href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-development\">todolite-development<\/a> repository to get both servers running locally.<\/p>\n<h2 id=\"toc_4\">How-To Creating a new JavaFX + Couchbase Mobile application<\/h2>\n<p>Open IntelliJ IDEA and choose the <strong>Create New Project<\/strong> menu. On the left pane, select the <strong>JavaFX<\/strong> application template and set the Project SDK to 1.8. <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10406\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/starter-template-1024x711.png\" alt=\"\" width=\"900\" height=\"625\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-1024x711.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-300x208.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-768x533.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-1536x1067.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template-1320x917.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/starter-template.png 1843w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/> Name the application as you wish and click <strong>Finish<\/strong>, this will open your newly created project in a new window. Before we begin writing code, there are a couple of configuration settings to change. Select the <strong>Edit Configurations\u2026<\/strong> menu in the top right corner which will open a new window. Check the <strong>Single instance only<\/strong> box to ensure that the IDE doesn\u2019t start a new instance of the application every time you click the Run button. <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10407\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/single-instance-1024x645.png\" alt=\"\" width=\"900\" height=\"567\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-1024x645.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-300x189.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-768x484.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-1536x968.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-20x13.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance-1320x832.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/single-instance.png 1920w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/> With that, let\u2019s turn our attention to adding Couchbase Lite as a dependency to the project. Select <strong>File\\Project Structure\u2026<\/strong> from the top menu bar, a new window will open and on the <strong>Modules<\/strong> tab, add a new Library from Maven: <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10408\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/maven-module-1024x813.png\" alt=\"\" width=\"900\" height=\"715\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-1024x813.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-300x238.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-768x610.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-1536x1220.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-20x16.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module-1320x1048.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/maven-module.png 1612w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/> A search field will appear in a popup window, type <strong>com.couchbase.lite:couchbase-lite-java:1.1.0<\/strong> and click <strong>OK<\/strong>. This will download the library and add it to the project. Next, you will add a JAR file that contains the native library for the platform you\u2019re running the application on (Windows, Mac\u2026). For OS X users, download <a href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\/tree\/master\/libraries\" data-cke-saved-href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\/tree\/master\/libraries\">this JAR file<\/a> and add it in a new directory called <strong>libraries<\/strong> in your project. Return the <strong>Modules<\/strong> window and add this JAR file from the <strong>Add &gt; JARs or directories\u2026<\/strong> menu: <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-10409\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/jar-dependency-1024x814.png\" alt=\"\" width=\"900\" height=\"715\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-1024x814.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-300x239.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-768x611.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-1536x1221.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-20x16.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency-1320x1049.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/jar-dependency.png 1610w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/> Click <strong>OK<\/strong> and run the application. You should see a blank window with the message <strong>Hello World<\/strong> in the status bar: <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-10410\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2015\/12\/hello-world.png\" alt=\"\" width=\"600\" height=\"594\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world.png 600w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world-300x297.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world-150x150.png 150w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world-65x65.png 65w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world-50x50.png 50w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2015\/12\/hello-world-20x20.png 20w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<h3 id=\"toc_6\">Open a new Database and save a Document<\/h3>\n<p>In your new project, open <strong>Main.java<\/strong> and create a new method called <code>startCouchbase<\/code> with the following:<\/p>\n<pre class=\"lang:default decode:true \">private void startCouchbase() {\r\n    JavaContext context = new JavaContext();\r\n    Manager manager = null;\r\n    try {\r\n        manager = new Manager(context, Manager.DEFAULT_OPTIONS);\r\n    } catch (IOException e) {\r\n        e.printStackTrace();\r\n    }\r\n    Database database = null;\r\n    try {\r\n        database = manager.getDatabase(\"myapp\");\r\n    } catch (CouchbaseLiteException e) {\r\n        e.printStackTrace();\r\n    }\r\n    Map&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();\r\n    properties.put(\"session\", \"Couchbase Mobile\");\r\n    properties.put(\"conference\", \"JavaOne\");\r\n    Document document = database.createDocument();\r\n    try {\r\n        document.putProperties(properties);\r\n    } catch (CouchbaseLiteException e) {\r\n        e.printStackTrace();\r\n    }\r\n}<\/pre>\n<p>Here, you\u2019re opening a new database called myapp and persisting a new document with a session and conference field. You can read more about the different APIs in the <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/index.html\" data-cke-saved-href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/index.html\">documentation guides<\/a> or refer to the <a href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\" data-cke-saved-href=\"https:\/\/github.com\/CouchbaseTutorials\/todolite-javafx\">TodoLite-JavaFX<\/a> sample app.<\/p>\n<p>Call the <code>startCouchbase<\/code> method in the <code>start<\/code> method of <strong>Main.java<\/strong><\/p>\n<h3 id=\"toc_7\">Sync Gateway<\/h3>\n<p>The quickiest way to get started with replication is to download the latest version of Sync Gateway:<\/p>\n<blockquote><p>https:\/\/www.couchbase.com\/nosql-databases\/downloads#Couchbase_Mobile<\/p><\/blockquote>\n<p>And use one of the provided configuration template as the command line argument when starting Sync Gateway:<\/p>\n<pre class=\"lang:default decode:true \">$ ~\/Downloads\/couchbase-sync-gateway\/bin\/sync_gateway basic-walrus-bucket.json<\/pre>\n<p>The specified configuration file has the following:<\/p>\n<pre class=\"lang:default decode:true \">{\r\n  \"log\": [\"*\"],\r\n  \"databases\": {\r\n    \"db\": {\r\n      \"server\": \"walrus:\",\r\n      \"users\": { \"GUEST\": { \"disabled\": false, \"admin_channels\": [\"*\"] } }\r\n    }\r\n  }\r\n}<\/pre>\n<p>Here, you\u2019re creating a database called <strong>db<\/strong> and enable the <strong>GUEST<\/strong> which means that unauthenticated requests should be allowed and processed.<\/p>\n<p>That\u2019s it! You now have a Sync Gateway database running on your machine that can be reached at <a href=\"https:\/\/localhost:4984\/db\/\" data-cke-saved-href=\"https:\/\/localhost:4984\/db\/\">https:\/\/localhost:4984\/db\/<\/a>.<\/p>\n<h3 id=\"toc_8\">Adding Sync<\/h3>\n<p>Head back to the JavaFX application and add a new <code>startReplications<\/code> method:<\/p>\n<pre class=\"lang:default decode:true \">public void startReplications() {\r\n\r\n    URL remoteURL = null;\r\n    try {\r\n        remoteURL = new URL(remoteDatabase);\r\n    } catch (MalformedURLException e) {\r\n        e.printStackTrace();\r\n    }\r\n\r\n    Replication pull = database.createPullReplication(remoteURL);\r\n    Replication push = database.createPushReplication(remoteURL);\r\n\r\n    pull.setContinuous(true);\r\n    push.setContinuous(true);\r\n\r\n    pull.start();\r\n    push.start();\r\n\r\n}<\/pre>\n<p>Call the <code>startReplications<\/code> below the <code>startCouchbase<\/code> method and restart the application. You should now see the document you created previously in the Sync Gateway Admin UI (<a href=\"https:\/\/localhost:4985\/_admin\/\" data-cke-saved-href=\"https:\/\/localhost:4985\/_admin\/\">https:\/\/localhost:4985\/_admin\/<\/a>).<\/p>\n<h2 id=\"toc_9\">Where To Go From Here<\/h2>\n<p>Congratulations! You\u2019ve built your first JavaFX + Couchbase Mobile application with replication. You\u2019re now ready to learn the following concepts:<\/p>\n<ul>\n<li>The <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/sync-gateway\/sync-function-api-guide\/index.html\" data-cke-saved-href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/sync-gateway\/sync-function-api-guide\/index.html\">Sync Function<\/a> to define access rules<\/li>\n<li><a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/native-api\/view\/index.html\" data-cke-saved-href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/couchbase-lite\/native-api\/view\/index.html\">Couchbase Lite Views<\/a> to write custom queries<\/li>\n<\/ul>\n<p>Feel free to share your feedback, findings or ask any questions in the comments below or in the forums. Talk to you soon!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaFX and Couchbase Mobile is a great combo for creating desktop class applications with rich user interfaces and fast data access. In this tutorial, you will learn the following core concepts: Learn about replication, security and deployment using the TodoLite [&hellip;]<\/p>\n","protected":false},"author":51,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1810],"tags":[],"ppma_author":[9028],"class_list":["post-1999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-mobile"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with JavaFX and Couchbase Mobile - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with JavaFX and Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"JavaFX and Couchbase Mobile is a great combo for creating desktop class applications with rich user interfaces and fast data access. In this tutorial, you will learn the following core concepts: Learn about replication, security and deployment using the TodoLite [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T01:06:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-25T20:17:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\"},\"author\":{\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\"},\"headline\":\"Getting Started with JavaFX and Couchbase Mobile\",\"datePublished\":\"2015-12-16T01:06:00+00:00\",\"dateModified\":\"2021-01-25T20:17:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\"},\"wordCount\":860,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Mobile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\",\"name\":\"Getting Started with JavaFX and Couchbase Mobile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T01:06:00+00:00\",\"dateModified\":\"2021-01-25T20:17:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with JavaFX and Couchbase Mobile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\",\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"caption\":\"James Nocentini, Technical Writer, Mobile, Couchbase\"},\"description\":\"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/james-nocentini\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting Started with JavaFX and Couchbase Mobile - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/","og_locale":"en_US","og_type":"article","og_title":"Getting Started with JavaFX and Couchbase Mobile","og_description":"JavaFX and Couchbase Mobile is a great combo for creating desktop class applications with rich user interfaces and fast data access. In this tutorial, you will learn the following core concepts: Learn about replication, security and deployment using the TodoLite [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-16T01:06:00+00:00","article_modified_time":"2021-01-25T20:17:41+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"James Nocentini, Technical Writer, Mobile, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Nocentini, Technical Writer, Mobile, Couchbase","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/"},"author":{"name":"James Nocentini, Technical Writer, Mobile, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6"},"headline":"Getting Started with JavaFX and Couchbase Mobile","datePublished":"2015-12-16T01:06:00+00:00","dateModified":"2021-01-25T20:17:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/"},"wordCount":860,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Mobile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/","name":"Getting Started with JavaFX and Couchbase Mobile - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T01:06:00+00:00","dateModified":"2021-01-25T20:17:41+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/getting-started-javafx-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with JavaFX and Couchbase Mobile"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6","name":"James Nocentini, Technical Writer, Mobile, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816","url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","caption":"James Nocentini, Technical Writer, Mobile, Couchbase"},"description":"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.","url":"https:\/\/www.couchbase.com\/blog\/author\/james-nocentini\/"}]}},"authors":[{"term_id":9028,"user_id":51,"is_guest":0,"slug":"james-nocentini","display_name":"James Nocentini, Technical Writer, Mobile, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","author_category":"","last_name":"Nocentini","first_name":"James","job_title":"","user_url":"","description":"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1999"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1999\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=1999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1999"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}