This actually looks more problematic than it first appears. The EJB
control (and others) rely on some of the lifecycle methods like
onAcquire and onRelease to get and release their resources.
So unfortunately I don't know of a quick answer to that problem
outside of a control container, it will take some digging. If others
have tips on how to accomplish this or where to look that would be
helpful.
-Chris
On 7/27/06, Ricci, Massimiliano (HPS C&I, HP-Italy)
<[EMAIL PROTECTED]> wrote:
Hi Chris,
I'm retyped the code using programmatic and declarative mechanism to instance
the control.
Unfortunately calling the two method (welcomeDeclarative, welcomeProgrammatic)
I'm getting in both case the same exception:
org.apache.beehive.controls.api.ControlException: Control initialization
failure[Contextual service
org.apache.beehive.controls.api.context.ResourceContext is not available]
Do you have any advice to solve this (two) problems (declarative (if is
possible) and programmatic)?
This is my client class:
package controls;
import org.apache.beehive.controls.api.bean.Control;
import org.apache.beehive.controls.api.bean.Controls;
import org.apache.beehive.controls.api.context.ControlThreadContext;
public class Prova {
@Control
private ProvaSessioBeanCtrl provaSessioBeanCtrl;
public Prova() throws ClassNotFoundException {
try {
Controls.initializeClient(null, this, null);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public String welcomeProgrammatic(String name) {
String ritorno = "bubububu";
try {
ProvaSessioBeanCtrlBean provaSessioBeanCtrl =
(ProvaSessioBeanCtrlBean) Controls
.instantiate(ProvaSessioBeanCtrlBean.class, null,
ControlThreadContext.getContext(),
"provaSessioBeanCtrl");
ritorno = provaSessioBeanCtrl.welcomeName(name);
} catch (Exception ex) {
//cnfe.printStackTrace();
ritorno = "Exception by Programmatic: " + ex.toString();
}
return ritorno;
}
public String welcomeDeclarative(String name) {
String ritorno = "bububub";
try {
ritorno = provaSessioBeanCtrl.welcomeName(name);
} catch (Exception cnfe) {
//cnfe.printStackTrace();
ritorno = "Exception by Declarative: " +
cnfe.toString();
}
return ritorno;
}
}
> -----Original Message-----
> From: Chris Hogue [mailto:[EMAIL PROTECTED]
> Sent: mercoledì 26 luglio 2006 16.23
> To: Beehive Users
> Subject: Re: EJB Control doesn't work on java class
>
> Hi Max,
>
> I'm not sure you can use @Control instantiation in a regular
> Java class. I don't believe there's anything that triggers
> the instantiation. When you run in a page flow or another
> control those have a "control container" that handles this.
>
> Have you tried programmatic instantiation as described here?
>
> http://beehive.apache.org/docs/1.0.1/controls/programming.html
> #Programmatic+Instantiation
>
>
> -Chris
>
>
> On 7/26/06, Ricci, Massimiliano (HPS C&I, HP-Italy)
> <[EMAIL PROTECTED]> wrote:
> > Hi folks,
> >
> > I'm trying to use Beehive EJB control in my project.
> > I've done two tests.
> > In the first one I've created a Session EJB
> ("ProvaSessionBean") using
> > IBM Application Server Toolkit (AST), with just one method (String
> > welcomeName (String name)), and imported (the jar file) it on BEA
> > Workshop 9.2.0 for Weblogic Platform. I've created a new
> "Dynamic Web
> > Project" using Beehive facets (Controls & NetUI). By the
> wizard I've
> > created an EJB Control (filling the field "JNDI Name" with
> the value
> > in META-INF\ibm-ejb-jar-bnd.xmi
> ("ejb/ejbs/ProvaSessionBeanHome") and
> > from META-INF\ejb-jar.xml for Home/Business Interface
> > ("ejbs.ProvaSessionBean" and "ejbs.ProvaSessionBeanHome")).
> >
> > In Controller class I've instanced the EJB Control by annotation
> > (@Control) and call the EJB method in the Controller method. I've
> > exported the ear file and deployed it on IBM WebSphere Application
> > Server 6.1 In this case all work correctly.
> >
> > Then I've tried to use the EJB Control in a normal Java class.
> > I've imported the EJB (jar) in my project, and created a
> "Dynamic Web
> > Project" not using Beehive technology (in particular Beehive NetUI).
> > I've imported jar to use EJB Control (beehive-controls.jar,
> > beehive-ejb-control.jar) and created EJB Control
> > (ProvaSessioBeanCtrl.java) following the same step described above.
> > Then I've created a (simple) Java class (Prova.java) to
> instance the
> > control (using annotation @Control) and use EJB method, and
> a jsp page
> > where I called this java class.
> > I've exported the ear file and deployed it on IBM WebSphere
> > Application Server 6.1.
> > When I've tested the application a "java.lang.NullPointerException"
> > was generated because the EJB Control in java class not was
> instanced!
> > I've checked that every class by APT was created (Prova.class,
> > Prova.controls.properties, ProvaClientInitializer.class,
> > ProvaSessioBeanCtrl.class, ProvaSessioBeanCtrlBean.class,
> > ProvaSessioBeanCtrlBean.class.manifest,
> > ProvaSessioBeanCtrlBeanBeanInfo.class) and all seems correct.
> >
> > Have anybody some idea because EJB Control doesn't work on
> java class?
> > Is it possibile use Beehive EJB Control (or Beehive Control in
> > general) in a Java class instead in a PageFlow?
> >
> > Thanks in advance,
> > Max
> >
>