小编Lud*_*ume的帖子

基于模块化Spring的应用程序

我想允许用户在主项目中添加/刷新/更新/删除模块,而无需重新启动或重新部署.用户将能够编写自己的模块并将其添加到主项目中.

技术上,一个模块将是一个可以"热启动"的JAR,可能包含:

  • 弹簧控制器
  • 服务,ejbs ......
  • 资源(jsps,css,图像,javascripts ......)

因此,当用户添加模块时,应用程序必须按照意图注册控制器,服务,ejbs和映射资源.当他删除时,应用程序卸载它们.

说起来容易.实际上似乎要困难得多.

目前,我使用Servlet 3.0和web-fragment.xml完成​​了它.主要问题是我每次更新模块时都必须重新部署.我需要避免这种情况.

我阅读了一些关于OSGi的文档,但我不明白我如何将它与我的项目链接,也不知道它如何按需加载/卸载.

有人可以引导我找到解决方案或想法吗?

我用的是什么:

  • Glassfish 3.1.2
  • Spring MVC 3.1.3
  • Spring Security 3.1.3

谢谢.


编辑:

我现在可以说这是可能的.这是我将要做的方式:

添加模块:

  1. 上传module.jar
  2. 处理文件,在模块文件夹中展开
  3. 关闭Spring应用程序上下文
  4. 在自定义类加载器中加载JAR,其中父级是WebappClassLoader
  5. 复制主项目中的资源(也许有可能找到替代方案,我希望,但目前,这应该工作)
  6. 刷新Spring应用程序上下文

删除模块:

  1. 关闭Spring应用程序上下文
  2. 取消绑定自定义类加载器并将其转到GC
  3. 删除资源
  4. 如果保留,则从模块文件夹+ jar中删除文件
  5. 刷新Spring应用程序上下文

对于每个,Spring必须扫描另一个文件夹而不是

domains/domain1/project/WEB-INF/classes
domains/domain1/project/WEB-INF/lib
domains/domain1/lib/classes
Run Code Online (Sandbox Code Playgroud)

这实际上是我目前的问题.

技术上,我发现PathMatchingResourcePatternResolverClassPathScanningCandidateComponentProvider参与其中.现在我需要告诉他们扫描特定的文件夹/类.

其余的,我已经做了一些测试,它应该按预期工作.

有一点是不可能的:罐子里的ejbs.

当我做了一些可用的事情时,我会发布一些消息来源.

java spring jsp spring-mvc

10
推荐指数
1
解决办法
3078
查看次数

JPA查询抽象类+子类字段条件

我有一个像这样的持久性模型:

@Entity
public abstract class Employee {
    @Id
    protected Integer employeeId;
    ...
}
@Entity
public class FullTimeEmployee extends Employee {
    protected Integer salary;
    ...
}
@Entity
public class PartTimeEmployee extends Employee {
    protected Float hourlyWage;
}
Run Code Online (Sandbox Code Playgroud)

我想查询具有某些子类条件的Employees,例如:salary> 1000.

我尝试了这个,但没有工作.

SELECT e
FROM Employee e
WHERE e.salary > 1000;

SELECT e
FROM Employee e
WHERE (TYPE(e) = FullTimeEmployee AND e.salary > 1000)
OR TYPE(e) = PartTimeEmployee;
Run Code Online (Sandbox Code Playgroud)

我还尝试在Employee中放置一个抽象方法,并在查询中使用它,但也不工作.

请问你能帮帮我吗 ?

谢谢,

inheritance jpa abstract

6
推荐指数
1
解决办法
5674
查看次数

Spring/Glassfish 3.1.2陈旧文件

我目前正在使用Spring Web MVC和Spring Security开发应用程序.

我可以在Glassfish 3.1.2上部署它,但是当我想在修复bug之后重新部署时,我收到此错误:

WARNING: Exception while locating sub archive: XXX.war
WARNING: DPL8031: Ignoring XXX_war/ because the containing archive C:\dev\apps\glassfish3\glassfish\domains\domain1\applications\XXX recorded it as a pre-existing stale file
Run Code Online (Sandbox Code Playgroud)

.glassfishStaleFiles包含:

XXX_war/
XXX_war/WEB-INF/
XXX_war/WEB-INF/lib/
XXX_war/WEB-INF/lib/spring-web-3.2.2.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)

事实上,spring-web-3.2.2.RELEASE.jar仍然存在,当我尝试删除它时,我收到一条消息,说它仍然被JVM使用.

我找到了这个链接:https: //www.java.net//forum/topic/glassfish/glassfish/stale-files-when-undeploying-web-app-glassfish-3

我的问题是:有人有解决此问题的方法吗?

开发时真的很烦人......

java spring glassfish java-ee

5
推荐指数
2
解决办法
3103
查看次数

使用 Maven 在 EAR 中包含库

我想使用 maven 在我的 EAR 项目的 lib 文件夹中包含 jar/war 的库。

目前我的耳朵是这样的:

lib
lib/<entities>.jar
lib/<ejb-client>.jar
<ejb-impl>.jar
<web-app-project>.war
Run Code Online (Sandbox Code Playgroud)

每个 jar/war 都有 Maven 依赖项,这些依赖项在提供的范围内声明。

为什么提供范围?我正在使用 Glassfish 3.1.2 并且在将库放入/WEB-INF/lib. 我通过在 ear/lib 中复制库来解决这个问题(请参阅Spring / Glassfish 3.1.2 stale files)。

我想要做的是告诉 maven 他必须将这些库放在耳朵的 lib 文件夹中。

我试图将所有项目都放在耳朵的 maven 依赖项中,但实际上并没有起作用。

有人可以帮助我吗?

谢谢,

java eclipse maven

4
推荐指数
1
解决办法
7728
查看次数

Spring MVC:返回CSS

我的目标是合并/缩小所有css文件并将结果作为String返回.

这是我的Spring测试方法:

@RequestMapping(value = "/stylesheet.css", method = RequestMethod.GET, produces = "text/css")
@ResponseBody
public void css(HttpServletResponse response) {
    File path = new File(servletContext.getRealPath("/WEB-INF/includes/css/"));

    File[] files = path.listFiles(...);

    for (File file : files) {
        InputStream is = new FileInputStream(file);
        IOUtils.copy(is, response.getOutputStream());
        response.flushBuffer();

        is.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于Chrome,Firefox和Safari,但不适用于IE和Opera.

在检查员中进行一些检查后,URL https://host/project/stylesheet.css将在每个浏览器中加载.我可以看到内容但似乎没有被认出来text/css.

此外,即使有produces = "text/css",我也无法content-type在所有浏览器中看到http标头.

IE中的错误日志:

CSS ignored because of mime type incompatibility
Run Code Online (Sandbox Code Playgroud)

有谁知道如何正确地做到这一点?

工作代码:

@RequestMapping(value = "/stylesheet.css", method = RequestMethod.GET)
public ResponseEntity<Void> css(HttpServletResponse response) {
    response.setContentType("text/css");

    File path …
Run Code Online (Sandbox Code Playgroud)

css java spring spring-mvc

4
推荐指数
2
解决办法
2442
查看次数

在MySQL中增加字符串

我想在MySQL中增加一个字符串值.它将在查询中用于获取第一个可用值.

我尝试CONV(...)使用36基座,但并不涵盖所有情况.根据某些内部参数,字符串可以具有不同的结构.

可能的结构:

  pattern                   |    sample    |    incremented
----------------------------|--------------|-------------------
 ([0-9]+)                   |        1239  |           1240
 ([A-Z]+)                   |        ABCD  |           ABCE
 ([0-9]+)([A-Z]+)           |       1234A  |          1234B
 ([A-Z]+)([0-9]+)           |       ABCD1  |          ABCD2
 ([A-Z]+)-([0-9]+)-([A-Z]+) | ABCD-1239-Z  |    ABCD-1240-A
 etc.                       |              |
Run Code Online (Sandbox Code Playgroud)

在MySQL中有可能吗?

mysql

2
推荐指数
1
解决办法
1082
查看次数

标签 统计

java ×4

spring ×3

spring-mvc ×2

abstract ×1

css ×1

eclipse ×1

glassfish ×1

inheritance ×1

java-ee ×1

jpa ×1

jsp ×1

maven ×1

mysql ×1