1 2 Previous Next 21 Replies Latest reply: Jun 15, 2008 11:03 PM by 843833 RSS

    Petstore - tomcat - jsf-impl.jar

    843833
      follwing import in com.sun.faces.config.ConfigureListener is wrong

      import com.sun.org.apache.commons.digester.Digester;

      it should be

      import org.apache.commons.digester.Digester;

      Causing deploytime problem for petstore on tomcat
        • 1. Re: Petstore - tomcat - jsf-impl.jar
          843833
          Please mail JAVA file of com.sun.faces.config.ConfigureListener (jsf-impl.jar .....1.2) to me on atulkjava@yahoo.com so that I can compile it and put it in jar
          • 2. Re: Petstore - tomcat - jsf-impl.jar
            843833
            Hi,

            we have not yet tried using petstpre 2.0 on tomcat. Petstore uses some Java EE 5 technoogies such as JSF 1.2 and Java persistence, so you would need to add somejars and set up[ tomcat environment to have extra functionalities. WE address this question on our FAQ at
            https://blueprints.dev.java.net/petstore/faq.html#tomcat
            which sort of outlines what might be needed to run on Tomcat.

            Petstore should run on any Java EE 5 aplication server, though we have only tested it on the Java EE 5 SDK and Glassfish.

            hth,
            Sean
            • 3. Re: Petstore - tomcat - jsf-impl.jar
              843833
              Hi,
              I said one import is wrong. How can it be

              import com.sun.org.apache.commons.digester.Digester;

              Its not allowing class to load.

              I had read instructions at https://blueprints.dev.java.net/petstore/faq.html#tomcat and working on same guidlines.
              • 4. Re: Petstore - tomcat - jsf-impl.jar
                843833
                Ok. I understood why it is com.sun.org.apache.

                Please let me know in what jar of J2EE 5 SDK I will get implementation of javax.el.
                • 5. Re: Petstore - tomcat - jsf-impl.jar
                  843833
                  If you have the Java EE SDK or a version of glassfish, the classes I believe you are looking for are in the javaee.jar in the lib directory.

                  Just for all to understand, the reason the apache classes are prefaced with "com.sun" is to distinguish the version of the Apache classes that the appserver's implementation uses from a version of the Apache classes that an application running on the appserver may use.

                  Hope this helps...

                  Thanks - Mark
                  • 6. Re: Petstore - tomcat - jsf-impl.jar
                    843833
                    Hi,

                    Yes, I think since the unified EL is now a separate jar outside of JSF jar, so you would need a another jar to include that includes the package for javax.el as well as jsf.jar.

                    Hmmm... I am starting to wonder about getting it to work on Tomcat. Are you using Tomcat 5 or Tomcat 6? I think you would need Tomcat 6 to start with since it has the latest JSP engine and unified el and then you could add in JSF 1.2 jars and modify that environment.

                    I think it may not work to try to take tomcat 5 and run a Java 5 web application on it just by modifying a few jars in the tomcat environment. I think you would need to strt with tomcat 6, and then add some extra jars to be able to run a Java EE 5 web app?

                    hth,
                    Sean
                    • 7. Re: Petstore - tomcat - jsf-impl.jar
                      843833
                      Hi Sean,
                      Tomcat 6.x: JSF classes call to some method of jsp-api is not compatible. Signature of method in jsp-api is different than what JSF calls resulting in Exception. I will post details when I go to office.

                      Tomact 5.5.X: I will wait till tommorrow on this. It may work or few more hurdles. JPA (with toplink) is woking on tomcat 5.5.x. For JSF tomcat looks for sun.beans.ValueExpressionEditor class which is not there. So causes JasperException jsp.error.beans.property.conversion". It is easy to solve (I think).
                      Please see:
                      class org.apache.jasper.runtime.JspRuntimeLibrary#getValueFromPropertyEditorManager(Class attrClass, String attrName, String attrValue)

                      java.beans.PropertyEditorManager#findEditor


                      For JTA which is best? Bitronix, Atomikos, jotm or simplejta.
                      • 8. Re: Petstore - tomcat - jsf-impl.jar
                        843833
                        Hi,
                        Tomcat 6.x: JSF classes call to some method of
                        jsp-api is not compatible. Signature of method in
                        jsp-api is different than what JSF calls resulting in
                        Exception. I will post details when I go to office.
                        Has anyone else tried to get JSF 1.2 working on tomcat 6?

                        I will see if I can ask someone too.

                        Actually, this could be a tricky adventure to get this working on tomcat as tomcat 6 is still getting worked on a lot, so dont try too hard else you may get frustrated :-)

                        hth,
                        Sean
                        • 9. Re: Petstore - tomcat - jsf-impl.jar
                          843833
                          Petstore Web 2.0 application si fully working on Tomcat 5.5.16.
                          Only thing remaining is Banner new.
                          • 10. Re: Petstore - tomcat - jsf-impl.jar
                            843833
                            Hi,

                            It would be great if you could summarize the steps you had to perform to get this working so others on the forum can benefit.

                            Thanks in advance - Mark
                            • 11. Re: Petstore - tomcat - jsf-impl.jar
                              843833
                              Hi,

                              I spoke to Ed Burns about using JSF 1.2 from https://javaserverfaces.dev.java.net/ on Tomcat 6, and he mentioned that they test that periodically and it works. He mentioned that you need to ...

                              For Tomcat6 you need to delete the contents of your work directory and
                              restart.

                              So maybe you can try that?
                              Of course its just one step to getting Petstore 2.0 war running on Tomcat 6 plus some other jars like JSF 1.2

                              And it seems you already got some of it running on Tomcat 5 anyways. Hope you can share some of the steps you had to do for it to work. Maybe we can documenbt those steps and add them to the petstore project so others can try the same thing. Also, did you have to change any PS code?

                              thx,
                              Sean
                              follwing import in
                              com.sun.faces.config.ConfigureListener is wrong

                              import com.sun.org.apache.commons.digester.Digester;

                              it should be

                              import org.apache.commons.digester.Digester;

                              Causing deploytime problem for petstore on tomcat
                              • 12. Re: Petstore - tomcat - jsf-impl.jar
                                843833
                                sean, Mark please give me your mail id.
                                • 13. Re: Petstore - tomcat - jsf-impl.jar
                                  843833
                                  Hi,

                                  my email is Sean.Brydon@sun.com.

                                  And you can always post to the forum also to chat.

                                  hth,
                                  Sean
                                  • 14. Re: Petstore - tomcat - jsf-impl.jar
                                    843833
                                    Procedure to port Petstore to Tomcat:

                                    1.     Jars required in commons/lib:
                                         EL api & its implementation. Presently I am using classes available from appserv-rt.jar of 5.0 J2EE SDK.
                                         Database driver. I am using derbyclient.jar
                                         JPA api and its implementation. We can use toplink jars available with J2EE 5.0 SDK.
                                    Implemetation by Hibernet can also be used but it asks for some JBoss related Jars. (hibernate3.jar, hibernate-annotations.jar, hibernate-entitymanager.jar, jboss-common.jar, antlr-2.7.6.jar, cglib.jar, dom4j.jar, and javassist.jar)
                                         JSF 1.2 api and its implementation. I am using reference implementation. No open source implementation is available for JSF 1.2.
                                         JSTL jar.
                                         You also need to create two classes MethodExpressionEditor and ValueExpressionEditor.
                                    o     These classes must have name as above. This is required because tomcat looks for these classes. Pl. See JasperRuntime.java.
                                    o     They must be in package �sun.beans.editors�.
                                    o     They should extend MethodExpression /ValueExxpression and implement java,beans.PropertyEditor interface.
                                    o     Code should be same javax.el.MethodExpressionImpl/ javax.el.ValueExpressionImpl.

                                    getValue method of ValueExpressionEdior needs to be like follows:

                                    public Object getValue(ELContext context) throws PropertyNotFoundException, ELException {
                                    EvaluationContext ctx = new EvaluationContext(context, fnMapper, varMapper);
                                    Object value = getNode().getValue(ctx);
                                    Object ret = null;
                                    if(value == null){
                                         return value;
                                    }
                                    if(expectedType != null) {
                                         ret = ELSupport.coerceToType(value, expectedType);
                                         return ret;
                                    } else {
                                         Integer in = null;
                                         try{
                                                   in = new Integer(value.toString());
                                         return in;
                                         } catch(NumberFormatException nex){
                                         }
                                         String v = value.toString().toLowerCase();
                                         if("true".equals(v) || "false".equals(v)){
                                              return new Boolean(v);
                                         }
                                              return value;

                                    }

                                    2.     Jars required in shared/lib folder
                                         appserv-jstl.jar this is taken from J2EE 5 SDK.
                                         commons-beanutils.jar
                                         commons-collections.jar     
                                         toplink-essentials.jar
                                         toplink-essentials-agent.jar

                                    3.     Web.xml following changes are required.
                                         Add     <resource-ref>
                                    <res-ref-name>jdbc/PetstoreDB</res-ref-name>
                                    <res-type>javax.sql.DataSource</res-type>
                                    <res-auth>Container</res-auth>
                                    <res-sharing-scope>Shareable</res-sharing-scope>
                                    </resource-ref>
                                         There are two <context-param>
                                    <param-name>com.sun.faces.verifyObjects</param-name>
                                    Remove one that is not required. Tomcat does not allow both.

                                         Comment out or remove <servlet>
                                    <description>Persistence Test Servlet</description> and related mapping <servlet-mapping>
                                    <servlet-name>PersistenceTestServlet</servlet-name>
                                         Change Google map key if required.

                                    Search:
                                         You need to unzip petstoreIndexes.zip (in PETSTORE_HOME) into CATALINA_HOME.
                                         Changes in PetstoreConstants.java are
                                         public static final String PETSTORE_INDEX_DIRECTORY= "../searchindex";
                                         public static final String PETSTORE_IMAGE_DIRECTORY= "..";
                                    Search index


                                    Persistence.xml
                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
                                    <persistence-unit name="PetstorePu">
                                    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
                                    <class>com.sun.javaee.blueprints.petstore.model.Address</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.Category</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.Item</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.Product</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.SellerContactInfo</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.Tag</class>
                                    <class>com.sun.javaee.blueprints.petstore.model.ZipLocation</class>
                                    <properties>
                                    <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
                                    <property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/petstore"/>
                                         <property name="toplink.jdbc.user" value="APP"/>
                                         <property name="toplink.jdbc.password" value="APP"/>
                                    </properties>
                                    </persistence-unit>

                                    </persistence>

                                    rssbar.js needs changes other wise it results in javascript errors. It needs to be repackaged in bp-ui-5.jar
                                         if(!handleJsonRss(data)){
                                    return;
                                    }

                                         function handleJsonRss(json) {
                                    jsonData = json;
                                    // setting top title and link
                                    if (!headTitle) {
                                    headTitle = json.channel.title;
                                    }
                                    if(json.channel != null && json.channel.link != null){
                                    generateFeedView(headTitle, json.channel.link, "rss-channel");
                                    } else {
                                    return false;
                                    }
                                    // setting items
                                    var shortTitle = "....";
                                    if(json.channel != null && json.channel.item != null && json.channel.item[0] != null && json.channel.item[0].title != null) {
                                    shortTitle = cutStringatWs(json.channel.item[0].title, limitCharNum) + " ...";
                                    } else {
                                    return false;
                                    }
                                    if(json.channel != null && json.channel.item != null && json.channel.item[0] != null && json.channel.item[0].title != null && json.channel.item[0].link != null){
                                    generateHref(shortTitle, json.channel.item[0].link, "rss-item");
                                    } else {
                                    return false;
                                    }

                                    CatalogFacade.java
                                         Remove annotations for
                                              private EntityManagerFactory emf;
                                              UserTransaction utx;
                                         Change following method
                                    public void contextInitialized(ServletContextEvent sce) {
                                              Context ctx = null;
                                              try{
                                                   ctx = new InitialContext();
                                                   Context envCtx = (Context) ctx.lookup("java:comp/env");
                                    utx = (UserTransaction)envCtx.lookup("jta/UserTransaction");
                                              } catch(NamingException ex){
                                                   ex.printStackTrace();
                                              }
                                              emf = Persistence.createEntityManagerFactory("PetstorePu");


                                    JTA parts needs to be tested. I will document it after testing. Application can run even if you comment out transaction related code.

                                    I tried to use SimpleJTA. I could configure
                                    1. Context path="/petstore" docBase="petstore" debug="5" reloadable="true" crossContext="true">
                                    <Logger className="org.apache.catalina.logger.FileLogger"
                                    prefix="localhost_petstore_log." suffix=".txt"
                                    timestamp="true"/>
                                    <Resource name="jta/UserTransaction" auth="Container"
                                    type="javax.transaction.UserTransaction"
                                    factory="org.simplejta.tm.ut.SimpleUserTransactionFactory"
                                    tmgrId="TM1" tmgrRecoveryUser="recouser" tmgrRecoveryPassword="recouser"
                                    tlogDriver="DERBY.EMBEDDED" tlogUrl="./TLOG"
                                    tlogUser="APP" tlogPassword="APP"
                                    />
                                    </Context>

                                    2. create database using DERBY.EMBEDDED with name TLOG in CATALINA_HOME/bin.
                                    3.You need to create table in TLOG database using following code.
                                    private static void prepareLog() throws Exception
                                    {

                                    Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
                                    Connection conn = null;
                                    try
                                    {

                                    conn =DriverManager.getConnection("jdbc:derby:./TLOG;create=true");

                                    try
                                    {

                                    Statement st = conn.createStatement();
                                    if( st != null)
                                    {

                                    st.executeUpdate("create table sjta_transactions (tid bigint generated always as identity,"+
                                    "tmid varchar(30), formatid int, gtid varchar(64) for bit data,"+
                                    "bqual varchar(64) for bit data,state smallint)");
                                    st.executeUpdate("create table sjta_transaction_branches ("+
                                    "tid bigint, bid int, formatid int, gtid varchar(64) for bit data,"+
                                    "bqual varchar(64) for bit data, state smallint, url varchar(128),"+
                                    "userid varchar(30), password varchar(30), typeid varchar(30))" );
                                    st.executeUpdate("create table dept (deptno decimal(2) not null constraint dept_pk primary key,"+
                                    "dname varchar(30), loc varchar(30))");
                                    }
                                    }
                                    catch( Exception e){}
                                    }
                                    finally
                                    {

                                    if( conn != null)
                                    conn.close();
                                    }

                                    }
                                    1 2 Previous Next