Hi Nathan, This is a problem, if I add <classloader>root</classloader> to pluto or portlet api. another class also happened "NoClassDefFoundError".
I think this is not the problem. The problem is that other JSP files are no problem except that one!!!!! really strange !!! and make me crazy !!! Eric ----- Original Message ----- From: "Nathan Coast" <[EMAIL PROTECTED]> To: "Maven Users List" <[EMAIL PROTECTED]> Sent: Monday, June 07, 2004 5:27 PM Subject: Re: Failed to use "maven-tomcat-plugin 1.1" to compile portlet JSP !!! > Hi, > > I think your oringal error was due to lack of pluto classes available to > root classloader > > C:\Projects\foodsin\testsuite\target\tomcat\src\java\org\apache\jsp\jsp\test > 9_jsp.java:108: > _jspx_meth_portlet_param_0(javax.servlet.jsp.tagext.JspTag,javax.servlet.jsp > .PageContext) in org.apache.jsp.jsp.test9_jsp cannot be applied to > (org.apache.pluto.tags.ActionURLTag,javax.servlet.jsp.PageContext) > if (_jspx_meth_portlet_param_0(_jspx_th_portlet_actionURL_0, > pageContext)) > > when you added <classloader>root</classloader> > > the error became: > > java.lang.NoClassDefFoundError: javax/portlet/PortletURL > > so I think you need to add the same <classloader>root</classloader> > element to the dependency to your portlet jar > > Eric Chow wrote: > > > It's strange that only that test9.jsp causing the error. Any others are work > > very fine. > > > > The test9.jsp is bundled with jakarta-pluto. > > > > <!-- > > Copyright 2004 The Apache Software Foundation > > Licensed under the Apache License, Version 2.0 (the "License"); > > you may not use this file except in compliance with the License. > > You may obtain a copy of the License at > > > > http://www.apache.org/licenses/LICENSE-2.0 > > > > Unless required by applicable law or agreed to in writing, software > > distributed under the License is distributed on an "AS IS" BASIS, > > WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > > implied. > > > > See the License for the specific language governing permissions and > > limitations under the License. > > --> > > <%@ page session="false" %> > > <%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%> > > <%@ page import="javax.portlet.*"%> > > <%@ page import="java.util.*"%> > > <portlet:defineObjects/> > > <% > > String baseNS = renderResponse.getNamespace(); > > PortletSession ps = renderRequest.getPortletSession(); > > %> > > <I>This portlet is testing "actionURL"/"renderURL" tags ... Step 9</I> > > <P> > > <I>1) define tag "actionURL" and display it's string value ...</I> > > <P> > > <portlet:actionURL windowState="Maximized" portletMode="Edit" secure="False" > > var="toto"> > > <portlet:param name="myParam" value="testParam"/> > > </portlet:actionURL> > > > > <i><%=toto%> > > <P> > > <I>2) define tag "renderURL" and display it's string value ...</I> > > <P> > > <portlet:renderURL windowState="Maximized" portletMode="Edit" secure="False" > > var="_url"> > > <portlet:param name="jspName" value="test1.jsp"/> > > </portlet:renderURL> > > <i><%=_url%> > > <P> > > <I>Tests passed ...</I> > > <P> > > > > <portlet:renderURL windowState="Normal" portletMode="View" > > secure="<%=renderRequest.isSecure()?"True":"False"%>" var="url"> > > <portlet:param name="jspName" value="test1.jsp"/> > > </portlet:renderURL> > > > > <FORM METHOD="POST" ACTION="<%=url%>"> > > <INPUT value="Next >>" TYPE="submit"> > > </FORM> > > > > <b><portlet:namespace/>[EMAIL PROTECTED]</b> > > > > > > > > > > and the generated java source test9_jsp.java is: > > > > package org.apache.jsp.jsp; > > > > import javax.servlet.*; > > import javax.servlet.http.*; > > import javax.servlet.jsp.*; > > import javax.portlet.*; > > import java.util.*; > > > > public final class test9_jsp extends org.apache.jasper.runtime.HttpJspBase > > implements org.apache.jasper.runtime.JspSourceDependent { > > > > private static java.util.Vector _jspx_dependants; > > > > static { > > _jspx_dependants = new java.util.Vector(1); > > _jspx_dependants.add("/WEB-INF/tld/portlet.tld"); > > } > > > > private org.apache.jasper.runtime.TagHandlerPool > > _jspx_tagPool_portlet_defineObjects; > > private org.apache.jasper.runtime.TagHandlerPool > > _jspx_tagPool_portlet_actionURL_windowState_var_secure_portletMode; > > private org.apache.jasper.runtime.TagHandlerPool > > _jspx_tagPool_portlet_param_value_name; > > private org.apache.jasper.runtime.TagHandlerPool > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode; > > private org.apache.jasper.runtime.TagHandlerPool > > _jspx_tagPool_portlet_namespace; > > > > public java.util.List getDependants() { > > return _jspx_dependants; > > } > > > > public void _jspInit() { > > _jspx_tagPool_portlet_defineObjects = > > org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig( > > )); > > _jspx_tagPool_portlet_actionURL_windowState_var_secure_portletMode = > > org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig( > > )); > > _jspx_tagPool_portlet_param_value_name = > > org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig( > > )); > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode = > > org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig( > > )); > > _jspx_tagPool_portlet_namespace = > > org.apache.jasper.runtime.TagHandlerPool.getTagHandlerPool(getServletConfig( > > )); > > } > > > > public void _jspDestroy() { > > _jspx_tagPool_portlet_defineObjects.release(); > > > > _jspx_tagPool_portlet_actionURL_windowState_var_secure_portletMode.release() > > ; > > _jspx_tagPool_portlet_param_value_name.release(); > > > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode.release() > > ; > > _jspx_tagPool_portlet_namespace.release(); > > } > > > > public void _jspService(HttpServletRequest request, HttpServletResponse > > response) > > throws java.io.IOException, ServletException { > > > > JspFactory _jspxFactory = null; > > PageContext pageContext = null; > > ServletContext application = null; > > ServletConfig config = null; > > JspWriter out = null; > > Object page = this; > > JspWriter _jspx_out = null; > > > > > > try { > > _jspxFactory = JspFactory.getDefaultFactory(); > > response.setContentType("text/html"); > > pageContext = _jspxFactory.getPageContext(this, request, response, > > null, false, 8192, true); > > application = pageContext.getServletContext(); > > config = pageContext.getServletConfig(); > > out = pageContext.getOut(); > > _jspx_out = out; > > > > out.write("<!-- \r\nCopyright 2004 The Apache Software > > Foundation\r\nLicensed under the Apache License, Version 2.0 (the > > \"License\");\r\nyou may not use this file except in compliance with the > > License.\r\nYou may obtain a copy of the License at > > \r\n\r\nhttp://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by > > applicable law or agreed to in writing, software\r\ndistributed under the > > License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR > > CONDITIONS OF ANY KIND, either express or\r\nimplied.\r\n\r\nSee the > > License for the specific language governing permissions and\r\nlimitations > > under the License.\r\n-->\r\n\r\n\r\n\r\n\r\n"); > > // portlet:defineObjects > > javax.portlet.PortletRequest renderRequest = null; > > javax.portlet.RenderResponse renderResponse = null; > > javax.portlet.PortletConfig portletConfig = null; > > org.apache.pluto.tags.DefineObjectsTag > > _jspx_th_portlet_defineObjects_0 = (org.apache.pluto.tags.DefineObjectsTag) > > _jspx_tagPool_portlet_defineObjects.get(org.apache.pluto.tags.DefineObjectsT > > ag.class); > > _jspx_th_portlet_defineObjects_0.setPageContext(pageContext); > > _jspx_th_portlet_defineObjects_0.setParent(null); > > int _jspx_eval_portlet_defineObjects_0 = > > _jspx_th_portlet_defineObjects_0.doStartTag(); > > renderRequest = (javax.portlet.PortletRequest) > > pageContext.findAttribute("renderRequest"); > > renderResponse = (javax.portlet.RenderResponse) > > pageContext.findAttribute("renderResponse"); > > portletConfig = (javax.portlet.PortletConfig) > > pageContext.findAttribute("portletConfig"); > > if (_jspx_th_portlet_defineObjects_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return; > > renderRequest = (javax.portlet.PortletRequest) > > pageContext.findAttribute("renderRequest"); > > renderResponse = (javax.portlet.RenderResponse) > > pageContext.findAttribute("renderResponse"); > > portletConfig = (javax.portlet.PortletConfig) > > pageContext.findAttribute("portletConfig"); > > > > _jspx_tagPool_portlet_defineObjects.reuse(_jspx_th_portlet_defineObjects_0); > > out.write('\r'); > > out.write('\n'); > > > > String baseNS = renderResponse.getNamespace(); > > PortletSession ps = renderRequest.getPortletSession(); > > > > out.write("\r\n<I>This portlet is testing \"actionURL\"/\"renderURL\" > > tags ... Step 9</I>\r\n<P>\r\n<I>1) define tag \"actionURL\" and display > > it's string value ...</I>\r\n<P>\r\n"); > > // portlet:actionURL > > java.lang.String toto = null; > > org.apache.pluto.tags.ActionURLTag _jspx_th_portlet_actionURL_0 = > > (org.apache.pluto.tags.ActionURLTag) > > _jspx_tagPool_portlet_actionURL_windowState_var_secure_portletMode.get(org.a > > pache.pluto.tags.ActionURLTag.class); > > _jspx_th_portlet_actionURL_0.setPageContext(pageContext); > > _jspx_th_portlet_actionURL_0.setParent(null); > > _jspx_th_portlet_actionURL_0.setWindowState("Maximized"); > > _jspx_th_portlet_actionURL_0.setPortletMode("Edit"); > > _jspx_th_portlet_actionURL_0.setSecure("False"); > > _jspx_th_portlet_actionURL_0.setVar("toto"); > > int _jspx_eval_portlet_actionURL_0 = > > _jspx_th_portlet_actionURL_0.doStartTag(); > > toto = (java.lang.String) pageContext.findAttribute("toto"); > > if (_jspx_eval_portlet_actionURL_0 != > > javax.servlet.jsp.tagext.Tag.SKIP_BODY) { > > do { > > out.write('\r'); > > out.write('\n'); > > out.write(' '); > > if (_jspx_meth_portlet_param_0(_jspx_th_portlet_actionURL_0, > > pageContext)) > > return; > > out.write('\r'); > > out.write('\n'); > > int evalDoAfterBody = _jspx_th_portlet_actionURL_0.doAfterBody(); > > toto = (java.lang.String) pageContext.findAttribute("toto"); > > if (evalDoAfterBody != > > javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN) > > break; > > } while (true); > > } > > if (_jspx_th_portlet_actionURL_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return; > > toto = (java.lang.String) pageContext.findAttribute("toto"); > > > > _jspx_tagPool_portlet_actionURL_windowState_var_secure_portletMode.reuse(_js > > px_th_portlet_actionURL_0); > > out.write("\r\n\r\n<i>"); > > out.print(toto); > > out.write("\r\n<P>\r\n<I>2) define tag \"renderURL\" and display it's > > string value ...</I>\r\n<P>\r\n"); > > // portlet:renderURL > > java.lang.String _url = null; > > org.apache.pluto.tags.RenderURLTag _jspx_th_portlet_renderURL_0 = > > (org.apache.pluto.tags.RenderURLTag) > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode.get(org.a > > pache.pluto.tags.RenderURLTag.class); > > _jspx_th_portlet_renderURL_0.setPageContext(pageContext); > > _jspx_th_portlet_renderURL_0.setParent(null); > > _jspx_th_portlet_renderURL_0.setWindowState("Maximized"); > > _jspx_th_portlet_renderURL_0.setPortletMode("Edit"); > > _jspx_th_portlet_renderURL_0.setSecure("False"); > > _jspx_th_portlet_renderURL_0.setVar("_url"); > > int _jspx_eval_portlet_renderURL_0 = > > _jspx_th_portlet_renderURL_0.doStartTag(); > > _url = (java.lang.String) pageContext.findAttribute("_url"); > > if (_jspx_eval_portlet_renderURL_0 != > > javax.servlet.jsp.tagext.Tag.SKIP_BODY) { > > do { > > out.write('\r'); > > out.write('\n'); > > out.write(' '); > > if (_jspx_meth_portlet_param_1(_jspx_th_portlet_renderURL_0, > > pageContext)) > > return; > > out.write('\r'); > > out.write('\n'); > > int evalDoAfterBody = _jspx_th_portlet_renderURL_0.doAfterBody(); > > _url = (java.lang.String) pageContext.findAttribute("_url"); > > if (evalDoAfterBody != > > javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN) > > break; > > } while (true); > > } > > if (_jspx_th_portlet_renderURL_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return; > > _url = (java.lang.String) pageContext.findAttribute("_url"); > > > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode.reuse(_js > > px_th_portlet_renderURL_0); > > out.write("\r\n<i>"); > > out.print(_url); > > out.write("\r\n<P>\r\n<I>Tests passed ...</I>\r\n<P>\r\n\r\n"); > > // portlet:renderURL > > java.lang.String url = null; > > org.apache.pluto.tags.RenderURLTag _jspx_th_portlet_renderURL_1 = > > (org.apache.pluto.tags.RenderURLTag) > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode.get(org.a > > pache.pluto.tags.RenderURLTag.class); > > _jspx_th_portlet_renderURL_1.setPageContext(pageContext); > > _jspx_th_portlet_renderURL_1.setParent(null); > > _jspx_th_portlet_renderURL_1.setWindowState("Normal"); > > _jspx_th_portlet_renderURL_1.setPortletMode("View"); > > > > _jspx_th_portlet_renderURL_1.setSecure(renderRequest.isSecure()?"True":"Fals > > e"); > > _jspx_th_portlet_renderURL_1.setVar("url"); > > int _jspx_eval_portlet_renderURL_1 = > > _jspx_th_portlet_renderURL_1.doStartTag(); > > url = (java.lang.String) pageContext.findAttribute("url"); > > if (_jspx_eval_portlet_renderURL_1 != > > javax.servlet.jsp.tagext.Tag.SKIP_BODY) { > > do { > > out.write('\r'); > > out.write('\n'); > > out.write(' '); > > if (_jspx_meth_portlet_param_2(_jspx_th_portlet_renderURL_1, > > pageContext)) > > return; > > out.write('\r'); > > out.write('\n'); > > int evalDoAfterBody = _jspx_th_portlet_renderURL_1.doAfterBody(); > > url = (java.lang.String) pageContext.findAttribute("url"); > > if (evalDoAfterBody != > > javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN) > > break; > > } while (true); > > } > > if (_jspx_th_portlet_renderURL_1.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return; > > url = (java.lang.String) pageContext.findAttribute("url"); > > > > _jspx_tagPool_portlet_renderURL_windowState_var_secure_portletMode.reuse(_js > > px_th_portlet_renderURL_1); > > out.write("\r\n\r\n<FORM METHOD=\"POST\" ACTION=\""); > > out.print(url); > > out.write("\">\r\n<INPUT value=\"Next >>\" > > TYPE=\"submit\">\r\n</FORM>\r\n\r\n<b>"); > > if (_jspx_meth_portlet_namespace_0(pageContext)) > > return; > > out.write("[EMAIL PROTECTED]</b>"); > > } catch (Throwable t) { > > if (!(t instanceof SkipPageException)){ > > out = _jspx_out; > > if (out != null && out.getBufferSize() != 0) > > out.clearBuffer(); > > if (pageContext != null) pageContext.handlePageException(t); > > } > > } finally { > > if (_jspxFactory != null) > > _jspxFactory.releasePageContext(pageContext); > > } > > } > > > > private boolean _jspx_meth_portlet_param_0(javax.servlet.jsp.tagext.JspTag > > _jspx_th_portlet_actionURL_0, PageContext pageContext) > > throws Throwable { > > JspWriter out = pageContext.getOut(); > > // portlet:param > > org.apache.pluto.tags.ParamTag _jspx_th_portlet_param_0 = > > (org.apache.pluto.tags.ParamTag) > > _jspx_tagPool_portlet_param_value_name.get(org.apache.pluto.tags.ParamTag.cl > > ass); > > _jspx_th_portlet_param_0.setPageContext(pageContext); > > _jspx_th_portlet_param_0.setParent((javax.servlet.jsp.tagext.Tag) > > _jspx_th_portlet_actionURL_0); > > _jspx_th_portlet_param_0.setName("myParam"); > > _jspx_th_portlet_param_0.setValue("testParam"); > > int _jspx_eval_portlet_param_0 = _jspx_th_portlet_param_0.doStartTag(); > > if (_jspx_th_portlet_param_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_portlet_param_value_name.reuse(_jspx_th_portlet_param_0); > > return false; > > } > > > > private boolean _jspx_meth_portlet_param_1(javax.servlet.jsp.tagext.JspTag > > _jspx_th_portlet_renderURL_0, PageContext pageContext) > > throws Throwable { > > JspWriter out = pageContext.getOut(); > > // portlet:param > > org.apache.pluto.tags.ParamTag _jspx_th_portlet_param_1 = > > (org.apache.pluto.tags.ParamTag) > > _jspx_tagPool_portlet_param_value_name.get(org.apache.pluto.tags.ParamTag.cl > > ass); > > _jspx_th_portlet_param_1.setPageContext(pageContext); > > _jspx_th_portlet_param_1.setParent((javax.servlet.jsp.tagext.Tag) > > _jspx_th_portlet_renderURL_0); > > _jspx_th_portlet_param_1.setName("jspName"); > > _jspx_th_portlet_param_1.setValue("test1.jsp"); > > int _jspx_eval_portlet_param_1 = _jspx_th_portlet_param_1.doStartTag(); > > if (_jspx_th_portlet_param_1.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_portlet_param_value_name.reuse(_jspx_th_portlet_param_1); > > return false; > > } > > > > private boolean _jspx_meth_portlet_param_2(javax.servlet.jsp.tagext.JspTag > > _jspx_th_portlet_renderURL_1, PageContext pageContext) > > throws Throwable { > > JspWriter out = pageContext.getOut(); > > // portlet:param > > org.apache.pluto.tags.ParamTag _jspx_th_portlet_param_2 = > > (org.apache.pluto.tags.ParamTag) > > _jspx_tagPool_portlet_param_value_name.get(org.apache.pluto.tags.ParamTag.cl > > ass); > > _jspx_th_portlet_param_2.setPageContext(pageContext); > > _jspx_th_portlet_param_2.setParent((javax.servlet.jsp.tagext.Tag) > > _jspx_th_portlet_renderURL_1); > > _jspx_th_portlet_param_2.setName("jspName"); > > _jspx_th_portlet_param_2.setValue("test1.jsp"); > > int _jspx_eval_portlet_param_2 = _jspx_th_portlet_param_2.doStartTag(); > > if (_jspx_th_portlet_param_2.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_portlet_param_value_name.reuse(_jspx_th_portlet_param_2); > > return false; > > } > > > > private boolean _jspx_meth_portlet_namespace_0(PageContext pageContext) > > throws Throwable { > > JspWriter out = pageContext.getOut(); > > // portlet:namespace > > org.apache.pluto.tags.NamespaceTag _jspx_th_portlet_namespace_0 = > > (org.apache.pluto.tags.NamespaceTag) > > _jspx_tagPool_portlet_namespace.get(org.apache.pluto.tags.NamespaceTag.class > > ); > > _jspx_th_portlet_namespace_0.setPageContext(pageContext); > > _jspx_th_portlet_namespace_0.setParent(null); > > int _jspx_eval_portlet_namespace_0 = > > _jspx_th_portlet_namespace_0.doStartTag(); > > if (_jspx_th_portlet_namespace_0.doEndTag() == > > javax.servlet.jsp.tagext.Tag.SKIP_PAGE) > > return true; > > _jspx_tagPool_portlet_namespace.reuse(_jspx_th_portlet_namespace_0); > > return false; > > } > > } > > > > > > > > Eric > > > > > > > > > > > > ----- Original Message ----- > > From: "Eric Chow" <[EMAIL PROTECTED]> > > To: "Maven Users List" <[EMAIL PROTECTED]> > > Sent: Monday, June 07, 2004 2:53 PM > > Subject: Re: Failed to use "maven-tomcat-plugin 1.1" to compile portlet JSP > > !!! > > > > > > > >>Hi Nathan, > >> > >>It is in the javac part !! > >> > >>Eric > >> > >> > >>----- Original Message ----- > >>From: "Nathan Coast" <[EMAIL PROTECTED]> > >>To: "Maven Users List" <[EMAIL PROTECTED]> > >>Sent: Monday, June 07, 2004 12:55 PM > >>Subject: Re: Failed to use "maven-tomcat-plugin 1.1" to compile portlet > > > > JSP > > > >>!!! > >> > >> > >> > >>>I'm not sure this is the problem, I think the jasper compilation is > >>>happening fine, ie the servlet java sources are being generated no > >>>problem. the tomcat plugin adds the generated sources to the > >>>maven.compile.src.set. > >>> > >>>I think Erics problem is occuring later when the war plugin compiles the > >>>java sources. > >>> > >>>Eric, can you confirm whether it's jasper or javac that's failing? > >>> > >>>cheers > >>>Nathan > >>> > >>>Brett Porter wrote: > >>> > >>> > >>>>>my guess would be that the pluto classes need to be available to the > >>>>>root classloader (I know this is deprecated but I don't know the > >>>>>replacement) > >>>>> > >>>> > >>>> > >>>>The Tomcat plugin should be adding the maven.dependency.classpath > > > > refid > > > >>to the > >> > >>>>classpath for the jasper task so that the project's classes are > > > > included > > > >>in the > >> > >>>>compile. This is outlined in the FAQ IIRC. > >>>> > >>>>- Brett > >>>> > >>>>--------------------------------------------------------------------- > >>>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>>For additional commands, e-mail: [EMAIL PROTECTED] > >>>> > >>>> > >>>> > >>> > >>> > >>>--------------------------------------------------------------------- > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
