kazanaki
kazanaki

Reputation: 8054

Hows does Seam injection work in Ejb3

We are using

I have looked at

However I still do not understand how to inject an EJB3 bean into a JSF backing bean. It seems to me that I have to (correct me if I am wrong)

  1. Annotate with @Name my backing bean
  2. Annotate with @Name my EJB3 bean
  3. Use the @In annotation in the backing bean
  4. Put an empty seam.properties file in the WAR that contains the backing bean
  5. Put an empty seam.properties file in the JAR that contains the EJB
  6. Set up a Seam interceptor in ejb-jar.xml of the EJB

Don't I need to setup some JNDI URL somewhere? How exactly does Seam will find the EJB? The interceptor is enough?

Also this means that I have to add a seam dependency in my EJB archive (because of the @Name annotation). So the web layer (Seam) "spills" into my business logic (EJB). Is this the recommended approach?

Am I missing something here?

Answer: Apparently you can set the JNDI pattern in

  1. The EJB itself with the @JndiName annotation or
  2. The web.xml file or
  3. The components.xml file or
  4. The seam.properties file as Nathan suggested (This is what I did)

Upvotes: 4

Views: 2563

Answers (3)

Arbi
Arbi

Reputation: 11

Most of these answers are available in the Seam hotel booking example. Your configuration may be different because you are using WebLogic rather than JBoss.

Upvotes: 1

Arthur Ronald
Arthur Ronald

Reputation: 33785

My answer is a compilation about you want

See Enabling WebLogic 10.3.2 (11g) (both answers) And Enabling @Stateless @In-@Out-jection

And see here what Seam reference documentation says how you should deploy your Seam application when using Weblogic

Upvotes: 1

Nathan Hughes
Nathan Hughes

Reputation: 96394

Three things:

1) There is no backing bean separate from the EJB session bean anymore.

2) There is a JNDI url, the pattern is set in seam.properties (the example for JBoss in Java Persistence with Hibernate looks like

org.jboss.seam.core.init.jndiPattern=caveatEmptor/#{ejbName}/local

Seam extends the expression language evaluator with a version that knows about its new scopes and knows to where to look for the EJBs.

3) Seam isn't a web framework, it is more like an application stack that makes JSF, EJB3 and Hibernate all play better together, so it shouldn't hurt that you have Seam annotations in your EJBs.

Upvotes: 3

Related Questions