> > I have a doubt whether it is possible (and easy :) to
> > fetch data from EJB (connected to a DB) and produce
> > HTML pages from both XML/XSL documents and these data.
>
> Despite Michael Homeijer interesting answers, there were not
> many responses, and it seems to me there are never a lot when
> it comes to EJB and Cocoon. As I am also interested, is
> really nobody out there who knows much more about it...?
> 
> Are there any resources available focusing on EJB and Cocoon?

Don't know about resources, but I also don't really see what the issue is?
In our case we use JBoss with Tomcat and Cocoon.  We define the EJB
resources through JBoss and don't worry about them in Cocoon.  We then
package up the Cocoon WAR with our EJB JAR into a EAR and deploy it under
JBoss.  With the proper JNDI definitions in JBoss all is done; your Cocoon
classes see the EJBs and away you go.  It took me perhaps a week of fiddling
to get this going, but the magic trick is to make sure you've got all the
classes in the proper places for the particular combination of Tomcat,
JBoss, JDK and Cocoon.  

Following is a summary of various messages I've found that I used to create
some basic instructions for our developers on how to get the whole thing up
and running.  Some of this is out of date, since new binaries are now
available that did not exist when I wrote this and life is now a bit
simpler.

How to deploy Cocoon on JBoss and Tomcat
----------------------------------------

1. Deploy tomcat/jboss. Versions 4.0/2.4.3 are apparently known to work. We
use 4.0.4 and 2.4.4. 
   Note that according to the Cocoon2 homepage certain beta versions of
Tomcat dows not work with Cocoon2.

   To deploy Tomcat 4.0.4 use the integrated 2.4.4/4.0.1 Tomcat/Jboss then
copy a Tomcat 4.0.4 install over the
   "catalina" directory structure in the Jboss/Tomcat install. If you do
this, I'd rename the base directory to
   help keep things straight as to what is installed.

2. Add environment variable CATALINA_OPTS=-Xdebug -Xnoagent
-Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7070.
   This is to be able to debug java run in Tomcat. For Netbeans 3.2.1 for
programming/debugging (remember to add port 7070 to debugging environment).

3. Delete in "[your path]/JBoss-2.4.3_Tomcat-4.0/jboss/lib" following:
      -crimson.jar
      -jaxp.jar
      -xml.jar
      (xml.jar is not present in latest versions of JBoss.)

  If Tomcat 3.x is used the following files must be also be deleted: from
[your path]/JBoss-xxx_Tomcat-3.x/tomcat/lib:
   -parser.jar
   -jaxp.jar


4. new run.bat file in [your path]/JBoss-2.4.3_Tomcat-4.0/jboss/bin to:
   @echo off
   @if not "%ECHO%" == "" echo %ECHO%
   @if "%OS%" == "Windows_NT" setlocal

   set JBOSS_CLASSPATH=%JBOSS_CLASSPATH%;run.jar

   REM Add all login modules for JAAS-based security
   REM and all libraries that are used by them here

   REM need one of the two following lines for xerces support
   set JBOSS_CLASSPATH=%JBOSS_CLASSPATH%;../lib/xerces.jar
   REM set JBOSS_CLASSPATH=$JBOSS_CLASSPATH:../lib/xml-apis.jar

   REM Add the XML parser jars and set the JAXP factory names
   REM Crimson parser JAXP setup(default)
   REM set JBOSS_CLASSPATH=%JBOSS_CLASSPATH%;../lib/crimson.jar
   REM set
JAXP=-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.crimson.jaxp.Docu
men tBuilderFactoryImpl
   REM set JAXP=%JAXP%
-Djavax.xml.parsers.SAXParserFactory=org.apache.crimson.jaxp.SAXParserFactor
yIm pl

   echo JBOSS_CLASSPATH=%JBOSS_CLASSPATH%
   java %JAXP% -classpath "%JBOSS_CLASSPATH%" org.jboss.Main %1 %2 %3 %4 %5
%6 %7 %8 %9

   pause

5. If you want to be able to debug JBoss/Tomcat/Cocoon2 replace the last
line (before pause) with:

      java -Xint -Xdebug -Xnoagent -classpath "%JBOSS_CLASSPATH%"
-Xrunjdwp:transport=dt_socket,server=y,address=12999,suspend=n
org.jboss.Main %1 %2 %3 %4 %5 %6 %7 %8 %9

   If you use Netbeans 3.2.1 for programming/debugging remember to add port
12999 to debugging environment.

6. copy xerces.jar to [your path]/JBoss-2.4.3_Tomcat-4.0/jboss/lib. We used
versions 1.4.3.
   Download xerces binary and use .jar file in the downloaded xerces_xxx.zip
   The Apache site suggests that you should copy xml-apis.jar from
cocoon/lib/core/ to jboss/lib.
   However, I did not have to do this.  If you think you need xml-apis.jar
you may also want to uncomment the
   line in run.bat that refers to it and comment the line that uses xerces.
Only one of these should be needed...

7. add environment variable TOMCAT_HOME=[your
path]/JBoss-2.4.3_Tomcat-4.0/catalina/
   (if a Tomcat 3.x version is used "catalina" must be substituted with
"tomcat").
   This is for use with Cocoon ant file: build.bat.


8. Test that JBoss/Tomcat starts up and responds on port 8080/jboss
   Contrary to some documentation the test application still works fine.


Cocoon and Java 1.4 configuration
---------------------------------

Cocoon requires more recent versions of the Xerces and Xalan libraries than
those shipped with j2se 1.4.
To override bundled libraries, follow these steps:

1. Create %JAVA_HOME%\jre\lib\endorsed directory.

2. Copy xerces-XXX.jar, xalan-XXX.jar, and the xml-apis.jar from the
.\lib\core\ to the %JAVA_HOME%\jre\lib\endorsed\ directory.

Due to changes in JDBC between JDK 1.3 and JDK 1.4, it is not possible to
use Cocoon built on JDK 1.3 with JDK 1.4 when it comes to database
connections.
Make sure you have a 1.4 compatible Cocoon build, or if you have the Cocoon
source build it yourself with 1.4.


How to change Tomcat's Server port from 8080 to 80 using the
JBoss-2.4.4-Tomcat-4.0.1 integrated package
----------------------------------------------------------------------------
----------------------------

JBoss will NOT read the server.xml of Catalina (tomcat4).

To change port, edit $JBOSSHOME/conf/Catalina/jboss.jcml and look for the
mbean configuration:

   <mbean code="org.jboss.web.catalina.EmbeddedCatalinaServiceSX"
name="DefaultDo
         main:service=EmbeddedTomcat"/>

then change it as follows:

   <mbean code="org.jboss.web.catalina.EmbeddedCatalinaServiceSX"
name="DefaultDo
         main:service=EmbeddedTomcat">
      <attribute name="Port">80</attribute>
   </mbean>

restart JBoss (with Tomcat/Catalina).


Instructions for Oracle 8.1.7 and JBoss 2.4.0
---------------------------------------------

Using these instructions, you can use CMP beans or connect to Oracle via:

   InitialContext context = new InitialContext();
   DataSource ds = (DataSource) context.lookup("java:/ctdb");

1. Copy oracle's classes12.zip (this is available from Oracle technet,and
has the jdbc driver) to $JBOSS_DIST/lib/ext.

2. Note that jboss.properties does NOT need to be modified (as indicated in
the jboss.properties file).

3. Modify $JBOSS_DIST/conf/tomcat/jboss.jcml: Uncomment the XidClassName
attribute shown below:

   <!-- ====================================================================
-->
   <!-- Transactions -->
   <!-- ====================================================================
-->
   <mbean code="org.jboss.tm.TransactionManagerService"
name="DefaultDomain:service=TransactionManager">
      <attribute name="TransactionTimeout">300</attribute>

      <!-- Use this attribute if you need to use a specific Xid
implementation -->
      <attribute name="XidClassName">oracle.jdbc.xa.OracleXid</attribute>

   </mbean>

4. Also in jboss.jcml: add the Oracle driver to the JDBC drivers (this
driver is in classes12.zip):

   <!-- ====================================================================
-->
   <!-- JDBC -->
   <!-- ====================================================================
-->

   <mbean code="org.jboss.jdbc.JdbcProvider"
name="DefaultDomain:service=JdbcProvider">
      <attribute
name="Drivers">org.hsql.jdbcDriver,org.enhydra.instantdb.jdbc.idbDriver,orac
le.jdbc.driver.OracleDriver</attribute>
   </mbean>


5. Also in jboss.jcml in the JDBC section, define what the oracle datasource
name is (say OracleDB), and the connection URL.
   In the code below, replace jdbc:oracle:thin:@<host>:<port>:<sid> with the
appropriate string for your installation.
   Such as jdbc:oracle:thin:@192.168.1.111:1521:testdb

   <mbean code="org.jboss.jdbc.XADataSourceLoader"
name="DefaultDomain:service=XADataSource,name=datasourcename">
      <attribute name="PoolName">DefaultDS</attribute>
      <attribute
name="DataSourceClass">org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl</a
ttribute>
      <attribute name="URL">jdbc:oracle:thin:@<host>:<port>:<sid></attri
bute>
      <attribute name="JDBCUser">username</attribute>   <!-- set correct
username here -->
      <attribute name="Password">password</attribute>      <!-- set correct
password here -->
   </mbean>

   or alternatively, this may be necessary:

   <mbean code="org.jboss.jdbc.XADataSourceLoader"
name="DefaultDomain:service=XADataSource,name=datasourcename">
      <attribute name="PoolName">poolname</attribute>   <!-- as needed -->
      <attribute
name="DataSourceClass">org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl</attr
ibute>
      <attribute name="Properties"></attribute>
      <attribute
name="URL">jdbc:oracle:thin:@sjmemctd2:1521:ctdev2</attribute>
      <attribute name="GCMinIdleTime">1200000</attribute>
      <attribute name="JDBCUser">username</attribute>   <!-- set correct
user name here -->      
      <attribute name="MaxSize">10</attribute>
      <attribute name="Password">password</attribute>       <!-- set correct
password here -->
      <attribute name="GCEnabled">false</attribute>
      <attribute name="InvalidateOnError">true</attribute>
      <attribute name="TimestampUsed">false</attribute>
      <attribute name="Blocking">true</attribute>           <!-- may cause
exception if set false -->
      <attribute name="GCInterval">120000</attribute>
      <attribute name="IdleTimeout">1800000</attribute>
      <attribute name="IdleTimeoutEnabled">false</attribute>
      <attribute name="LoggingEnabled">true</attribute>
      <attribute name="MaxIdleTimeoutPercent">1.0</attribute>
      <attribute name="MinSize">0</attribute>
   </mbean>


6. Modify $JBOSS_DIST/conf/tomcat/standardjaws.xml to use the proper
datasource via the <datasource> element, and to use Oracle8 jdbc-sql type
mappings.
   (This is for container managed persistance.)  Make sure the datasource
name matches whatever you defined for the datasource name in step 5.

   <jaws>
      <datasource>java:/datasourcename</datasource
         .
         .
         .

---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <[EMAIL PROTECTED]>
For additional commands, e-mail:   <[EMAIL PROTECTED]>

Reply via email to