开发者

deploy web project from Eclipse using JRebel

I'm trying to deploy a multi-module Maven project from Eclipse to a local Tomcat using JRebel. The project has the following structure:

root [packaging: pom]
|
|--- domain [packaging: jar
|
|--- manager [packaging: jar]
|
|--- web [packaging: war]

I've created src/main/resources/rebel.xml in each of the 3 child modules. I can deploy the web project to Tomcat (without using JRebel) from within Eclipse without an开发者_C百科y problems.

However, if I change the deployment to use JRebel, I get the following error:

SEVERE: Exception sending context initialized event to listener instance 
of class com.web.listeners.WebAppListener
java.lang.IllegalArgumentException: Unknown entity: com.model.Role
....
....
Caused by: org.hibernate.MappingException: Unknown entity: com.model.Role

Role is a persistent (JPA/Hibernate) class from the domain project and it appears to be the reference to it in WebAppListener that is triggering the error:

public class WebAppListener implements ServletContextListener, HttpSessionListener, 
        HttpSessionAttributeListener {

    private RoleManager roleManager;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        BeanFactory beanFactory = WebApplicationContextUtils.
                    getRequiredWebApplicationContext(sce.getServletContext());
        this.roleManager = beanFactory.getBean(RoleManager.class);

        saveIfAbsent("USER", "Normal User");
    }

    private void saveIfAbsent(String roleName, String roleDescription) {

        if (roleManager.getRole(roleName) == null) {
            Role role = new Role();
            role.setName(roleName);
            role.setDescription(roleDescription);
            roleManager.saveRole(role);
        }
    }
}

It looks like the domain classes are not loaded when this code is executed, any idea how to fix this?


What is the contents of your rebel files? They should look like

<classpath>
    <dir name="/absolute/path/to/projectname/target/classes"></dir>
</classpath>

If you're using maven, you can also take a look at a related topic: Getting JRebel to work with 'mvn tomcat:run'

Note: if rebel.xml also contains a reference to src/main/resources, it sometimes confuses some frameworks and you should try removing it from all rebel.xml files if errors occur. For example, the following conf is quite common, but may not always work:

<classpath>
    <dir name="/absolute/path/to/projectname/target/classes"></dir>
    <dir name="/absolute/path/to/projectname/src/main/resources"></dir>
</classpath>


I fixed the problem by removing

<dir name="/absolute/path/to/projectname/src/main/resources"></dir>

from the rebel.xml file in the domain project as described here

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜