Thanks to many of you for submitting your apps to the Liferay Marketplace. Back in November, when apps began rolling in, we noticed several unexpected things about them that would result in confusion in the future, and several things that could be improved in our internal workflow for approvals. We decided to stop the approval process for a while, and revise the policies and procedures to ensure a smooth transition. I'm happy to report that we have now sorted these issues out, and are actively reviewing (and hopefully approving) apps.

The following policies now apply to all app submissions going forward. You should familiarize yourself with the documentation for an overall guide to developing and submitting apps. This documentation is in the process of being revised to incorporate these new policies.

Your app must have at least an English description. If you click the "Localized" checkbox you can submit descriptions for the other supported languages on liferay.com. Descriptions with poor grammar or other problems will need to be revised. Note that if you are logged into liferay.com using some other supported language, then the description you enter will by default be assumed to be in that language. You will need to click the "Localized" checkbox and switch to English to supply an English description.

Your app must have at least one screenshot. If your app has no visible UI, you must still submit some kind of screenshot (for example, check out the screenshots for this app).

The version specification in each embedded WAR must be terminated with a version using the + symbol. This ensures that your app will be deployable onto future versions of Liferay (but does not guarantee your app will work in future versions). So, 6.1.1 will not work, but 6.1.1+ will work. In most cases, as of 6.1.1, it is best to specify liferay-versions=6.1.1+ . This will guarantee your app is deployable onto Liferay 6.1 CE GA2 and later (including EE).

You should not use overlapping version specifications, for example, do not use 6.1.1+,6.1.20+ . The documentation was not clear on this, and even used this as an example, but for consistency (and to reinforce the notion that apps developed for CE should be compatible with EE), you should simply use 6.1.1+ to capture all of those versions. In the future, if you discover that your app does not work with a particular version of Liferay, you can revise your versioning, but for now, we ask that you use 6.1.1+ for CE/EE apps, and 6.1.20+ for EE-only apps.

If you use something other than the above for your version specification, be sure to include a description of it in the description of your app, or email marketplace-dev@liferay.com with some justification of your unusual versioning scheme, to aid in the app's approval. If your app is designed for EE only, you can use something like 6.1.20+. However, this will restrict your app only to EE customers.

You must include a link for the following Metadata: "Website", "Support". These are currently "optional" in the Marketplace UI but will become required shortly.

If your app is to be professionally offered/supported, you must submit the app on behalf of a registered company. If the nature of the app implies it is authored/supported by a company or non-profit organization, but is submitted by an individual with no explanation, the app will likely be rejected. To register your company, visit the Marketplace homepage and click on "Become a Developer" on the left.

Be sure to choose a relatively short name for your app. "App that clears the database cache, expires web contents, and clears the in-memory cache" is not a good title. "ClearCache" is much better and catchier!

The use of the Liferay Security Manager (aka PACL) is required (by putting security-manager-enabled=true in your liferay-plugin-package.properties file). However, it is not enough to test your app with PACL disabled, then at the last minute, with no further testing, enable it and submit your app. We noticed many apps that were submitted in this way, and they have been rejected as most apps will not work without a tested access control list. See the Liferay Security Manager documentation for details on how to enable this properly. If you believe your app does indeed work with simply PACL turned on, with no other access control specifiers, be sure to email marketplace-dev@liferay.com and let us know this.

Be sure your screenshots and icons adhere to the requirements. Also, be sure you do not violate the copyright or trademark restrictions of other apps. For example, for a SharePoint-related app, do not use Microsoft's trademarked logo in your logo.

If you submit an app, and it is rejected/denied, here's the procedure to correct the app:

Navigate to your personal profile's "home" page (or your company's "home" page if you submitted on behalf of a company)

Click on "App Manager"

Click on the "Apps" tab

Click on the App in question, and you will be taken to the App Summary screen. At the bottom will be a note with the reason for rejection.

Click on "Edit", to step through the same screens you originally stepped through. This will allow you to make corrections on each screen.

If you need to revise the WAR files, skip to the screen listing the WAR files of your app. Delete the old ones by clicking "Delete" next to the ones you need to delete. Make revisions to your WAR files locally, then re-upload them. Proceed to the final screen and click "Submit for Review". Your app is now re-submitted.

We are very excited to see the Marketplace flourish with high quality apps, and to those that have submitted thus far, I'd like to personally thank you for being an early adopter, apologize for the rough start, and ask that you keep at it - your apps should begin appearing on the Marketplace as we ramp up the approvals pipeline!

Hmm.. everything looks correct. Make sure your WAR filename is correct. The documentation is in the process of being updated, but here are the WAR file requirements:

- WARs must contain a WEB-INF/liferay-plugin-package.properties file.

- WARs must not contain any WEB-INF/liferay-plugin-package.xml file.

- WAR file names must not contain any commas.

- WAR file names must conform to the following naming convention:

*context_name*-*plugin_type*-A.B.C.D.war

Where:

- *context_name* - Alpha-numeric (including `-` and `_`) short name of your app. This name will be used as the deployment context, and should not duplicate any other app's context (you will see a warning if you use a context name of any other app on the Marketplace).

Thanks James, I just enabled the Security PACL. so i have added the set bean ,get bean service enable properties. while i accessing the portlet , i have getting below error

1 2java.lang.SecurityException: Attempted to access declared members 3 at com.liferay.portal.security.pacl.checker.BaseChecker.throwSecurityException(BaseChecker.java:259) 4 at com.liferay.portal.security.pacl.checker.RuntimeChecker.checkPermission(RuntimeChecker.java:71) 5 at com.liferay.portal.security.pacl.ActivePACLPolicy.checkPermission(ActivePACLPolicy.java:55) 6 at com.liferay.portal.security.lang.PortalSecurityManager.checkPermission(PortalSecurityManager.java:103) 7 at com.liferay.portal.security.lang.PortalSecurityManager.checkPermission(PortalSecurityManager.java:74) 8 at java.lang.SecurityManager.checkMemberAccess(SecurityManager.java:1662) 9 at java.lang.Class.checkMemberAccess(Class.java:2157)10 at java.lang.Class.getDeclaredField(Class.java:1879)11 at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.getDeclaredField(ReflectionNavigator.java:243)12 at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.getDeclaredField(ReflectionNavigator.java:47)13 at com.sun.xml.internal.bind.v2.model.impl.RegistryInfoImpl.<init>(RegistryInfoImpl.java:70)14 at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.addRegistry(ModelBuilder.java:346)15 at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:316)16 at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:430)17 at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)18 at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1100)19 at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:143)20 at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:110)21 at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:191)22 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)23 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)24 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)25 at java.lang.reflect.Method.invoke(Method.java:597)26 at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:128)27 at javax.xml.bind.ContextFinder.find(ContextFinder.java:290)28 at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:372)29 at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:337)30 at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:244)31 at com.msat.portlet.multilingual.MultilingualContent.addUpdateContent(MultilingualContent.java:240)

Thanks James, I just enabled the Security PACL. so i have added the set bean ,get bean service enable properties. while i accessing the portlet , i have getting below error

12java.lang.SecurityException: Attempted to access declared members3 at com.liferay.portal.security.pacl.checker.BaseChecker.throwSecurityException(BaseChecker.java:259)4 at com.liferay.portal.security.pacl.checker.RuntimeChecker.checkPermission(RuntimeChecker.java:71)5 at com.liferay.portal.security.pacl.ActivePACLPolicy.checkPermission(ActivePACLPolicy.java:55)6...