{"action":"created","issue":{"url":"https://api.github.com/repos/lucee/Lucee/issues/39","repository_url":"https://api.github.com/repos/lucee/Lucee","labels_url":"https://api.github.com/repos/lucee/Lucee/issues/39/labels{/name}","comments_url":"https://api.github.com/repos/lucee/Lucee/issues/39/comments","events_url":"https://api.github.com/repos/lucee/Lucee/issues/39/events","html_url":"https://github.com/lucee/Lucee/pull/39","id":175275319,"number":39,"title":"Page engines","user":{"login":"dajester2013","id":4575960,"avatar_url":"https://avatars.githubusercontent.com/u/4575960?v=3","gravatar_id":"","url":"https://api.github.com/users/dajester2013","html_url":"https://github.com/dajester2013","followers_url":"https://api.github.com/users/dajester2013/followers","following_url":"https://api.github.com/users/dajester2013/following{/other_user}","gists_url":"https://api.github.com/users/dajester2013/gists{/gist_id}","starred_url":"https://api.github.com/users/dajester2013/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dajester2013/subscriptions","organizations_url":"https://api.github.com/users/dajester2013/orgs","repos_url":"https://api.github.com/users/dajester2013/repos","events_url":"https://api.github.com/users/dajester2013/events{/privacy}","received_events_url":"https://api.github.com/users/dajester2013/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2016-09-06T15:19:56Z","updated_at":"2016-10-20T18:08:18Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/lucee/Lucee/pulls/39","html_url":"https://github.com/lucee/Lucee/pull/39","diff_url":"https://github.com/lucee/Lucee/pull/39.diff","patch_url":"https://github.com/lucee/Lucee/pull/39.patch"},"body":"This PR is to add the Page Engines (formerly Template Engines) feature to Lucee.  This is a pretty big feature, so I'll provide more-than-usual explanation:\r\n\r\nCurrently, the compilation of a page happens in the `PageSourceImpl` class.  That is, a `PageSource` \"knows\" how to compile itself.  This changes it up so that a page source runs itself through it's assigned page engine that in return builds the `Page` instance.  The main benefit of this is that now, alternate templating engines can be plugged into the system, and can return Lucee `Page` objects from non-CFML source.\r\n\r\nIn doing this, I've also re-implemented the compilation of .cf*/.lucee files using page engines.  The \"request dialect\" is no longer determined by the servlet/execute methods, but by the PageEngine.  Because of this, I've deprecated the `PageContext`'s `executeCFML` method, and merged/deprecated the `CFMLServlet` and `LuceeServlet` implementations into the `LuceeRuntimeServlet`. Now you need only set up one servlet.  Also, you can configure .cfm files to be run through the `LuceePageEngine`, and it would use the Lucee dialect.  The inverse is true for assigning .lucee files to the `CFPageEngine`.  By default, the CFPageEngine is loaded and used as the default page engine for all file extensions.  However, if the lucee dialect is enabled, the LuceePageEngine is loaded as the default in addition to the CFPageEngine.\r\n\r\nCurrently, page engines can only be configured in the xml config files (either server or web).  In addition, security was added so that web-contexts can be prevented from loading their own page engines (/security/setting[page_engines]).  Next step is to integrate into LEX packaging, so that page engines can be configured by extensions."},"comment":{"url":"https://api.github.com/repos/lucee/Lucee/issues/comments/255183268","html_url":"https://github.com/lucee/Lucee/pull/39#issuecomment-255183268","issue_url":"https://api.github.com/repos/lucee/Lucee/issues/39","id":255183268,"user":{"login":"dajester2013","id":4575960,"avatar_url":"https://avatars.githubusercontent.com/u/4575960?v=3","gravatar_id":"","url":"https://api.github.com/users/dajester2013","html_url":"https://github.com/dajester2013","followers_url":"https://api.github.com/users/dajester2013/followers","following_url":"https://api.github.com/users/dajester2013/following{/other_user}","gists_url":"https://api.github.com/users/dajester2013/gists{/gist_id}","starred_url":"https://api.github.com/users/dajester2013/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dajester2013/subscriptions","organizations_url":"https://api.github.com/users/dajester2013/orgs","repos_url":"https://api.github.com/users/dajester2013/repos","events_url":"https://api.github.com/users/dajester2013/events{/privacy}","received_events_url":"https://api.github.com/users/dajester2013/received_events","type":"User","site_admin":false},"created_at":"2016-10-20T18:08:18Z","updated_at":"2016-10-20T18:08:18Z","body":"@micstriit, I thought you could already include a Lucee template inside a cfm, and vice versa.  I do know you can instantiate a CFC from inside a Lucee template.  From the standpoint of the interpreter and it's related settings, I've not changed anything.  I simply moved the logic of converting a `PageSourceImpl` into a `Page` into a separate class, which I called a `PageEngine`.  So what was previously `PageSourceImpl.loadPage(…) -> Page` is now `PageSourceImpl.loadPage(…) -> this.pageEngine.loadPage(this,…) -> Page`.\n\nTo the developer, nothing changes with the way the cfml vs lucee dialects work.  In fact, you still have to use servlet params or JVM args to enable the lucee dialect.  Now, there is a slight change in how the servlet is configured, which I think is the main piece that is causing concern.  I'd be glad to talk more about it here or on slack.  \n\nAlso, I will concede that this needs a good bit of testing first, and I've not provided any unit tests.  I'll work on some in the coming days as I have the opportunity.  Thanks for the feedback."}}
{"actor":{"display_login":"dajester2013"}}