【问题标题】:Tutorial about Writing a JNDI Service Provider [closed]关于编写 JNDI 服务提供者的教程 [关闭]
【发布时间】:2010-11-24 12:59:23
【问题描述】:

是否有关于编写 JNDI 服务提供者并逐步从另一个项目访问对象和方法的教程。 Building a service provider 有一些资料,但实现起来并不容易。

谢谢。

【问题讨论】:

    标签: java service jndi provider


    【解决方案1】:

    我按照在线 JNDI 教程来帮助我解决我需要的问题。它看起来有点旧(并且是为 JDK 1.4.2 编写的)但仍然适用。 Sun/Oracle JNDI Tutorial.

    【讨论】:

    • 谢谢你,克里斯,我阅读了本教程,但在本教程中我不清楚我需要什么。我想创建两个项目。第一个具有 servlet 并充当客户端,第二个连接到数据库并向客户端提供数据。所以第一个使用 JNDI 从第二个获取对象。但我的问题是“这个配置是如何准备的”,本教程中有这个问题的答案吗?也许我必须声明第三个项目作为这两个项目之间的接口。您还有其他建议吗?还是我必须更详细地阅读本教程?
    • 通过阅读本教程,您可能会注意到可以通过 JNDI 访问许多不同类型的对象。遇到的下一个挑战(如果您还没有)是一些对象可以直接访问,而其他对象可以通过引用访问(取决于您是否在容器中)。这是一个问题。您的客户端是否在一个容器中运行,而您的数据库访问权限是否在另一个容器中?我假设不是。接下来,如果您使用 DB 访问,为什么不直接使用实体或会话 Bean?这些您可以通过 JNDI 访问并且很容易在您的容器中注册。这将是最简单的。
    【解决方案2】:

    现在我解决了 InitialContext 类的注释和全局使用问题。 无状态注解和 ejb-jar xml 文件以及访问全局 jndi 地址的密钥以供使用。

    访问代码:

    this.jndiAddress="ejb/service/IMyInterface";
    Context context = new InitialContext();
    IMyInterface object = (IMyInterface) context.lookup(this.jndiAddress);
    object.doSomething();
    

    服务代码;

    IMyInterface.java:

    public interface IMyInterface {
    
        void doSomething();
    
    }
    

    MyClass.java:

    @Remote(IMyInterface.class)
    @Stateless(mappedName="ejb/service/IMyInterface")
    public class MyClass implements IMyInterface {
    
        @EJB
        private IMyUserDao userDao;
    
        @Override
        public void doSomething() {
            User user = userDao.get(1);
            System.out.println(user.getName());
        }
    
    }
    

    ejb-jar.xml;

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">
        <display-name>Service</display-name>
        <enterprise-beans>
            <session>
                <ejb-name>MyClass</ejb-name>
                <ejb-class>package.MyClass</ejb-class>
            </session>
            <session>
                <ejb-name>UserDao</ejb-name>
                <ejb-class>package.dao.UserDao</ejb-class>
            </session>
        </enterprise-beans>
    </ejb-jar>
    

    【讨论】:

      【解决方案3】:

      FWIW,如果有人想在 Tomcat 中拥有自定义 JNDI 资源,请查看他们的 JNDI tutorial

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        相关资源
        最近更新 更多