紹介

同じ Ear の中に含まれていない他の Jar にある bean を参照することは、ひとつの Ear に含まれる場合ほど単純ではありません。目的達成には(私の知る限り)3つの方法があります。

参照される bean を持つ Jar

Java のコード

@Stateless(name="JmsDispatcherGate")
public class JmsDispatcherGateImpl implements DispatcherGateLocal, DispatcherGateRemote {
@Local
public interface DispatcherGateLocal {
@Remote
public interface DispatcherGateRemote {

Geronimo 固有の XML

<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1" xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0" xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
  <sys:environment>
    <sys:moduleId>
      <sys:groupId>my.app.dispatcher</sys:groupId>
      <sys:artifactId>Dispatcher</sys:artifactId>
      <sys:version>1.0</sys:version>
      <sys:type>jar</sys:type>
    </sys:moduleId>
  </sys:environment>
</openejb-jar>

@EJB(mappedName="...") + openejb-jar.xml による参照

package my.app.services;

@Stateless(name = "Sender")
public class SenderImpl {

	@EJB(mappedName="Dispatcher/JmsDispatcherGate")
	private DispatcherGateRemote dispatcherGate = null;
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
             xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2"
             xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0"
             xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
             xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
  <sys:environment>
    <sys:moduleId>
      <sys:groupId>my.app.services</sys:groupId>
      <sys:artifactId>Services</sys:artifactId>
      <sys:version>1.0</sys:version>
      <sys:type>jar</sys:type>
    </sys:moduleId>
    <!-- only dependency is required -->
    <sys:dependencies>
      <sys:dependency>
        <sys:groupId>my.app.dispatcher</sys:groupId>
        <sys:artifactId>Dispatcher</sys:artifactId>
        <sys:version>1.0</sys:version>
        <sys:type>jar</sys:type>
      </sys:dependency>
    </sys:dependencies>
  </sys:environment>

</openejb-jar>

@EJB(name="") + openejb-jar.xml による参照

package my.app.services;

@Stateless(name = "Sender")
public class SenderImpl {

	@EJB(name="dispatcher")
	private DispatcherGateRemote dispatcherGate = null;
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
             xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2"
             xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0"
             xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
             xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
  <sys:environment>
    <sys:moduleId>
      <sys:groupId>my.app.services</sys:groupId>
      <sys:artifactId>Services</sys:artifactId>
      <sys:version>1.0</sys:version>
      <sys:type>jar</sys:type>
    </sys:moduleId>
    <sys:dependencies>
      <sys:dependency>
        <sys:groupId>my.app.dispatcher</sys:groupId>
        <sys:artifactId>Dispatcher</sys:artifactId>
        <sys:version>1.0</sys:version>
        <sys:type>jar</sys:type>
      </sys:dependency>
    </sys:dependencies>
  </sys:environment>
  <enterprise-beans>
    <session>
      <ejb-name>Sender</ejb-name>
      <ejb-ref>
        <!-- @EJB(name="dispatcher") DispatcherGateRemote dispatcherGateRemote; -->
        <ref-name>dispatcher</ref-name>
        <nam:pattern xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1">
          <nam:artifactId>Dispatcher</nam:artifactId>
          <nam:name>JmsDispatcherGate</nam:name>
        </nam:pattern>
      </ejb-ref>
    </session>
  </enterprise-beans>

</openejb-jar>

@EJB(name なし) + openejb-jar.xml による参照

package my.app.services;

@Stateless(name = "Sender")
public class SenderImpl {

	@EJB
	private DispatcherGateRemote dispatcherGate = null;
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
             xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2"
             xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0"
             xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
             xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
  <sys:environment>
    <sys:moduleId>
      <sys:groupId>my.app.services</sys:groupId>
      <sys:artifactId>Services</sys:artifactId>
      <sys:version>1.0</sys:version>
      <sys:type>jar</sys:type>
    </sys:moduleId>
    <sys:dependencies>
      <sys:dependency>
        <sys:groupId>my.app.dispatcher</sys:groupId>
        <sys:artifactId>Dispatcher</sys:artifactId>
        <sys:version>1.0</sys:version>
        <sys:type>jar</sys:type>
      </sys:dependency>
    </sys:dependencies>
  </sys:environment>
  <enterprise-beans>
    <session>
      <ejb-name>Sender</ejb-name>
      <ejb-ref>
        <!-- @EJB DispatcherGateRemote dispatcherGateRemote; -->
        <ref-name>my.app.services.SenderImpl/dispatcherGate</ref-name>
        <nam:pattern xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1">
          <nam:artifactId>Dispatcher</nam:artifactId>
          <nam:name>JmsDispatcherGate</nam:name>
        </nam:pattern>
      </ejb-ref>
    </session>
  </enterprise-beans>
</openejb-jar>
  • No labels