Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将EJB从2.1更改为3.0_Java_Jakarta Ee_Ejb_Weblogic_Ejb 3.0 - Fatal编程技术网

Java 将EJB从2.1更改为3.0

Java 将EJB从2.1更改为3.0,java,jakarta-ee,ejb,weblogic,ejb-3.0,Java,Jakarta Ee,Ejb,Weblogic,Ejb 3.0,我有一个现有的Web应用程序(Servlet),可以远程访问当前写入EJB2.1规范的EJB(EJBHome,EJBObject,SessionBean,所有配置都在EJB jar.xml中)。servlet通过JNDI查找访问EJB,JNDI名称在weblogic EJB jar.xml中指定 我想将EJB更新为EJB3.0,这将(希望)使添加到API更容易 我的问题是,我需要对现有servlet代码进行最少的更改。换句话说,我仍然需要: 使用简单的全局JNDI名称访问EJB(它存储在数据库中

我有一个现有的Web应用程序(Servlet),可以远程访问当前写入EJB2.1规范的EJB(
EJBHome
EJBObject
SessionBean
,所有配置都在
EJB jar.xml
中)。servlet通过JNDI查找访问EJB,JNDI名称在
weblogic EJB jar.xml
中指定

我想将EJB更新为EJB3.0,这将(希望)使添加到API更容易

我的问题是,我需要对现有servlet代码进行最少的更改。换句话说,我仍然需要:

  • 使用简单的全局JNDI名称访问EJB(它存储在数据库中,servlet可以动态更改它查找的名称),然后
  • 能够使用2.1样式:

    String jndiName = getJndiName();    // e.g. "BeanV2.0"
    BeanHome home = (BeanHome) PortableRemoteObject.narrow(
            jndiContext.lookup(jndiName), BeanHome.class);
    BeanRemote remote = home.create();
    remote.doBusiness();               // call business method
    
  • 我尝试了一个精简版本,应用了
    @RemoteHome
    ,但在部署过程中不断出现错误

    我正在Weblogic上部署(用于开发/生产),主要是10.3.5(11gR1),并且仅限于EJB3.0。我正在使用Eclipse(与OracleWebLogicPack一起)进行开发


    谢谢。

    我建议您首先了解EJB2.1和EJB3.x之间的架构差异(请参阅)

    由于删除了EJB3.x中的
    Home
    Deployment Descriptor
    ,您将根据bean实现和客户端调用对代码进行一些主要/次要的更改

    请参考本例,了解如何从客户机(在您的示例中是Servlet)访问EJB3.x

    /**
     * Servlet implementation class SampleServlet
     */
    public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public SampleServlet() {
        super();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
                Context ctx=getInitialContext();
                String jndiName=getJndiName();  // eg. java:global/BeanProject/Bean!demo.BeanRemote
                BeanRemote beanRemote = (BeanRemote)ctx.lookup(jndiName);
                remote.doBusiness();
    
        } catch(Exception exception) {
            System.out.println(exception.getMessage());
        }
    }
    
    private static Context getInitialContext() throws Exception
    {
        Properties properties=new Properties();
        properties.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
        properties.put("java.naming.provider.url","remote://localhost:4447");
    
        return new InitialContext(properties);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    
    }
    

    希望这有帮助

    我建议您首先了解EJB2.1和EJB3.x之间的架构差异(请参阅)

    由于删除了EJB3.x中的
    Home
    Deployment Descriptor
    ,您将根据bean实现和客户端调用对代码进行一些主要/次要的更改

    请参考本例,了解如何从客户机(在您的示例中是Servlet)访问EJB3.x

    /**
     * Servlet implementation class SampleServlet
     */
    public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public SampleServlet() {
        super();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
                Context ctx=getInitialContext();
                String jndiName=getJndiName();  // eg. java:global/BeanProject/Bean!demo.BeanRemote
                BeanRemote beanRemote = (BeanRemote)ctx.lookup(jndiName);
                remote.doBusiness();
    
        } catch(Exception exception) {
            System.out.println(exception.getMessage());
        }
    }
    
    private static Context getInitialContext() throws Exception
    {
        Properties properties=new Properties();
        properties.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
        properties.put("java.naming.provider.url","remote://localhost:4447");
    
        return new InitialContext(properties);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    
    }
    

    希望这有帮助

    我建议您首先了解EJB2.1和EJB3.x之间的架构差异(请参阅)

    由于删除了EJB3.x中的
    Home
    Deployment Descriptor
    ,您将根据bean实现和客户端调用对代码进行一些主要/次要的更改

    请参考本例,了解如何从客户机(在您的示例中是Servlet)访问EJB3.x

    /**
     * Servlet implementation class SampleServlet
     */
    public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public SampleServlet() {
        super();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
                Context ctx=getInitialContext();
                String jndiName=getJndiName();  // eg. java:global/BeanProject/Bean!demo.BeanRemote
                BeanRemote beanRemote = (BeanRemote)ctx.lookup(jndiName);
                remote.doBusiness();
    
        } catch(Exception exception) {
            System.out.println(exception.getMessage());
        }
    }
    
    private static Context getInitialContext() throws Exception
    {
        Properties properties=new Properties();
        properties.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
        properties.put("java.naming.provider.url","remote://localhost:4447");
    
        return new InitialContext(properties);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    
    }
    

    希望这有帮助

    我建议您首先了解EJB2.1和EJB3.x之间的架构差异(请参阅)

    由于删除了EJB3.x中的
    Home
    Deployment Descriptor
    ,您将根据bean实现和客户端调用对代码进行一些主要/次要的更改

    请参考本例,了解如何从客户机(在您的示例中是Servlet)访问EJB3.x

    /**
     * Servlet implementation class SampleServlet
     */
    public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public SampleServlet() {
        super();
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
                Context ctx=getInitialContext();
                String jndiName=getJndiName();  // eg. java:global/BeanProject/Bean!demo.BeanRemote
                BeanRemote beanRemote = (BeanRemote)ctx.lookup(jndiName);
                remote.doBusiness();
    
        } catch(Exception exception) {
            System.out.println(exception.getMessage());
        }
    }
    
    private static Context getInitialContext() throws Exception
    {
        Properties properties=new Properties();
        properties.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory");
        properties.put("java.naming.provider.url","remote://localhost:4447");
    
        return new InitialContext(properties);
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    
    }
    


    希望这有帮助

    通过此链接,更改很少,但取决于您的代码设计@阿维纳什:我已经看到了这个链接。文章说,DeMichiel在EJB3.0上的2005 JavaOne2005演示中展示了一个示例。不幸的是,我将该演示文稿的所有链接都指向developers.sun.com,它将转发到Oracle Java主页:-(.在Oracle网站上搜索这篇文章给了我一些博客条目,所有这些条目都指向旧的Sun网站。有什么线索可以找到这篇文章吗?通过这个链接,变化很小,但取决于你的代码设计。@Avinash K.P:我已经看到了这个链接。文章说DeMichiel在2005 Java One 2005 P中给出了一个例子EJB3.0上的演示文稿。不幸的是,我将指向该演示文稿的所有链接都指向developers.sun.com,它将转发到Oracle Java主页:-(.在Oracle网站上搜索这篇文章给了我一些博客条目,所有这些条目都指向旧的Sun网站。有什么线索可以找到这篇文章吗?通过这个链接,变化很小,但取决于你的代码设计。@Avinash K.P:我已经看到了这个链接。文章说DeMichiel在2005 Java One 2005 P中给出了一个例子EJB3.0上的演示文稿。不幸的是,我将指向该演示文稿的所有链接都指向developers.sun.com,它将转发到Oracle Java主页:-(.在Oracle网站上搜索这篇文章给了我一些博客条目,所有这些条目都指向旧的Sun网站。有什么线索可以找到这篇文章吗?通过这个链接,变化很小,但取决于你的代码设计。@Avinash K.P:我已经看到了这个链接。文章说DeMichiel在2005 Java One 2005 P中给出了一个例子对EJB3.0的不满。不幸的是,我将所有指向developers.sun.com的链接都链接到了developers.sun.com,它会转发到Oracle Java主页:(。在Oracle网站上搜索文章会给我提供博客条目,所有这些条目都指向旧的sun网站。这些天在哪里可以找到那篇文章?谢谢,@Adheep。我通读了(差不多)整个EJB3.0(和3.1)规范,并同时实现了2.1和3.0bean,所以我理解其中的区别。我知道访问EJB的新(3.0)方法;我正在尝试以不需要对客户端进行任何更改的方式重写EJB,至少不需要立即进行更改。(我可能希望在将来缓慢地更新客户端,但我无法在可用的时间范围内完成所有更新。)@梅纳赫姆,是的,我可以理解你的问题,但我相信你现在已经明白,如果不在客户端进行更改,你就无法迁移到EJB3.x。但是我有一个建议,你可以在2.1中实现一个通用的代理ejb,它唯一的工作就是调用一个3.x ejb并将响应返回给客户端,实际上是@Adheep,3.0规范(简化)确实提到了这样做的方法,建议使用
    @RemoteHome
    注释主界面。但是,我找不到任何有效的示例。jboss有一个EJB3教程,其中包括一个示例,但我无法将其部署到Weblogic上。谢谢,@Adheep。我(几乎)通读了整个EJB3.0(和3.1)sp