WAR Web应用程序重新部署依赖项

时间:2015-04-30 10:13:38

标签: java maven java-ee deployment glassfish

我是Java的新手。在部署Web应用程序时遇到一些麻烦。

我有一个EJB项目,我在Glassfish(4.1)上部署。 我还有第二个JSF WEB应用程序,我部署到同一台服务器。 虽然我考虑将它部署到一个单独的服务器,但它创建了自己的InitialContext,以此类推,以便访问EJB。

Web应用程序依赖于EJB项目。依赖项在Web应用程序的pom中声明。 在部署Web应用程序时,它还会出于某种原因尝试从其他项目部署EJB。 这会因为javax.naming.NameAlreadyBoundException之类的错误而失败,因为EJB已经在此服务器上单独部署。

如何解决这个问题,因此不会尝试部署来自WEB应用程序的EJB依赖项?

更新:解决方案需要重构,因此不会依赖EJB。

            Original        

   Project A                 WEB app
 ________________         ____________
| + EJBs         |<------| WEB stuff  |
| + Domain cl.   |        ------------
| + Remote intf. |
 ----------------

===========================================
            Refactored

  _______        ____________
 |  EJBs |----->| Domain cl. |
  -------        ------------
     |                  ^
     |                  |
     |                  |
     v                  |   WEB app
  ______________       ____________
 | Remote intf. | <---| Web stuff  |
  --------------       ------------

1 个答案:

答案 0 :(得分:2)

您可以为scope provided提供<dependency> <groupId>group.id</groupId> <artifactId>artifact.some.id</artifactId> <version>1.0</version> <type>ear</type> <scope>provided</scope> </dependency> 依赖项:

class CreateSages < ActiveRecord::Migration
  def change
    create_table :sages do |t|
      t.string :Name
      t.string :Email
      t.string :Address
      t.integer :Number
      t.timestamps
    end
  end
end

这意味着在运行时,依赖项将由容器提供。

见maven doc:

  

这很像compile,但表示您希望JDK或容器在运行时提供依赖项。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。