EJB"

From Documentation
m
m (remove empty version history (via JWB))
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
{{ZKDevelopersReferencePageHeader}}
 
{{ZKDevelopersReferencePageHeader}}
  
Enterprise JavaBeans (EJB) technology is the server-side component architecture for Java EE. Here we described to use them in a ZUML document.
+
__TOC__
 +
 
 +
Enterprise JavaBeans (EJB) technology is the server-side component architecture for Java EE. Here we describe how to use it in a ZUML document.
  
 
Here we use [http://jboss.org JBoss] as the example. The configuration of the server might vary from one server to another, but the ZUML document is the same.
 
Here we use [http://jboss.org JBoss] as the example. The configuration of the server might vary from one server to another, but the ZUML document is the same.
 +
 +
Notice that if you would like to access EJB in Java (such as in [[ZK Developer's Reference/MVC/Controller/Composer|a composer]] or in [[ZK Developer's Reference/UI Composing/Richlet|a richlet]]), you could skip this section (since you could use the approach described in any EJB guide).
  
 
= Use JndiVariableResolver to Resolve EJB in EL Expressions=
 
= Use JndiVariableResolver to Resolve EJB in EL Expressions=
Line 35: Line 39:
 
# java:comp
 
# java:comp
 
# java:
 
# java:
# Variable could be found as a session beans with the <tt>prepend</tt> argument (arg0).
+
# Variable could be found as a session beans with the <code>prepend</code> argument (arg0).
# The key-value pairs which is defined in the <tt>mapping</tt> argument (arg1)
+
# The key-value pairs which is defined in the <code>mapping</code> argument (arg1)
  
 
= Example: Retrieve Session Beans =
 
= Example: Retrieve Session Beans =
  
The session beans are bound to the <tt>java:comp/env</tt> configured by <tt>jboss-web.xml</tt> and <tt>web.xml</tt>. For example, suppose we have them as follows:
+
The session beans are bound to the <code>java:comp/env</code> configured by <code>jboss-web.xml</code> and <code>web.xml</code>. For example, suppose we have them as follows:
  
<tt>'''jboss-web.xml'''</tt>:
+
<code>'''jboss-web.xml'''</code>:
  
 
<source lang="xml">
 
<source lang="xml">
Line 53: Line 57:
 
</source>
 
</source>
  
<tt>'''web.xml'''</tt>:
+
<code>'''web.xml'''</code>:
  
 
<source lang="xml">
 
<source lang="xml">
Line 66: Line 70:
 
Then, we could access them as follows.
 
Then, we could access them as follows.
  
<source lang="xml" high="7">
+
<source lang="xml" highlight="7">
 
<?variable-resolver class="org.zkoss.zkplus.jndi.JndiVariableResolver" ?>
 
<?variable-resolver class="org.zkoss.zkplus.jndi.JndiVariableResolver" ?>
 
<listbox width="600px">
 
<listbox width="600px">
Line 88: Line 92:
 
</source>
 
</source>
  
=Version History=
+
=Example: Retrieve EntityManagerFactory=
{{LastUpdated}}
+
Persistence units are not bound into JNDI by default, so we have to define JBoss specific properties in <code>persistence.xml</code> to bind them into JNDI. For example,
{| border='1px' | width="100%"
+
 
! Version !! Date !! Content
+
<source lang="xml">
|-
+
</persistence-unit>
| &nbsp;
+
    <properties>
| &nbsp;
+
        <property name="jboss.entity.manager.factory.jndi.name" value="java:comp/entityManagerFactory"/>
| &nbsp;
+
    </properties>
|}
+
</persistence-unit>
 +
</source>
 +
 
 +
Then, we could retrieve the entity manager factory by use of <javadoc>org.zkoss.zkplus.jndi.JndiVariableResolver</javadoc>.
 +
 
 +
= Source Code =
 +
You can get all source code mentioned in this section at [https://github.com/zkoss/zkbooks/tree/master/developersreference/integration.ejb github]
 +
 
 +
 
  
 
{{ZKDevelopersReferencePageFooter}}
 
{{ZKDevelopersReferencePageFooter}}

Latest revision as of 04:34, 5 February 2024

Enterprise JavaBeans (EJB) technology is the server-side component architecture for Java EE. Here we describe how to use it in a ZUML document.

Here we use JBoss as the example. The configuration of the server might vary from one server to another, but the ZUML document is the same.

Notice that if you would like to access EJB in Java (such as in a composer or in a richlet), you could skip this section (since you could use the approach described in any EJB guide).

Use JndiVariableResolver to Resolve EJB in EL Expressions

Referencing an EJB in an EL expression is straightforward: specifying JndiVariableResolver in the variable-resolver directive. For example,

<?variable-resolver class="org.zkoss.zkplus.jndi.JndiVariableResolver" ?>
<window>
...
</window>

Depending your configuration, you might have to pass extra information about JNDI to it such as:

<?variable-resolver class="org.zkoss.zkplus.jndi.JndiVariableResolver"
  arg0="ZkEJB3Demo"
  arg1="mail=java:comp/env/mailing,sec=java:comp/security/module" ?>
<!--
    arg0: prepend - the prepended part of JDNDI name
    arg1: mapping - the key-value pairs for JNDI names and the corresponding variable names
-->
<window>
...
</window>

JndiVariableResolver will resolve variables in the following order:

  1. java:comp/env
  2. java:comp
  3. java:
  4. Variable could be found as a session beans with the prepend argument (arg0).
  5. The key-value pairs which is defined in the mapping argument (arg1)

Example: Retrieve Session Beans

The session beans are bound to the java:comp/env configured by jboss-web.xml and web.xml. For example, suppose we have them as follows:

jboss-web.xml:

<ejb-local-ref>
    <ejb-ref-name>personLocalBean</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local>demo.PersonBeanLocal</local>
    <local-jndi-name>ZkEJB3Demo/PersonBean/local</local-jndi-name>
</ejb-local-ref>

web.xml:

<ejb-local-ref>
    <ejb-ref-name>personLocalBean</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home>demo.PersonBeanLocal</local-home>
    <local>demo.PersonBeanLocal</local>
</ejb-local-ref>

Then, we could access them as follows.

<?variable-resolver class="org.zkoss.zkplus.jndi.JndiVariableResolver" ?>
<listbox width="600px">
    <listhead sizable="true">
        <listheader label="name" sort="auto"/>
        <listheader label="email" sort="auto"/>
    </listhead>
    <listitem forEach="${personLocalBean.allPersons}"> <!-- resolve personLocalBean from JNDI -->
        <listcell label="${each.name}"/>
        <listcell label="${each.email}"/>
    </listitem>
</listbox>

The variables provided by a variable resolver is also available to the Java code in zscript. For example,

<zscript>
personLocalBean.createDemoData();
</zscript>

Example: Retrieve EntityManagerFactory

Persistence units are not bound into JNDI by default, so we have to define JBoss specific properties in persistence.xml to bind them into JNDI. For example,

</persistence-unit>
    <properties>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:comp/entityManagerFactory"/>
    </properties>
</persistence-unit>

Then, we could retrieve the entity manager factory by use of JndiVariableResolver.

Source Code

You can get all source code mentioned in this section at github




Last Update : 2024/02/05

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.