我想允许用户在主项目中添加/刷新/更新/删除模块,而无需重新启动或重新部署.用户将能够编写自己的模块并将其添加到主项目中.
技术上,一个模块将是一个可以"热启动"的JAR,可能包含:
因此,当用户添加模块时,应用程序必须按照意图注册控制器,服务,ejbs和映射资源.当他删除时,应用程序卸载它们.
说起来容易.实际上似乎要困难得多.
目前,我使用Servlet 3.0和web-fragment.xml完成了它.主要问题是我每次更新模块时都必须重新部署.我需要避免这种情况.
我阅读了一些关于OSGi的文档,但我不明白我如何将它与我的项目链接,也不知道它如何按需加载/卸载.
有人可以引导我找到解决方案或想法吗?
我用的是什么:
谢谢.
编辑:
我现在可以说这是可能的.这是我将要做的方式:
添加模块:
删除模块:
对于每个,Spring必须扫描另一个文件夹而不是
domains/domain1/project/WEB-INF/classes
domains/domain1/project/WEB-INF/lib
domains/domain1/lib/classes
Run Code Online (Sandbox Code Playgroud)
这实际上是我目前的问题.
技术上,我发现PathMatchingResourcePatternResolver并ClassPathScanningCandidateComponentProvider参与其中.现在我需要告诉他们扫描特定的文件夹/类.
其余的,我已经做了一些测试,它应该按预期工作.
有一点是不可能的:罐子里的ejbs.
当我做了一些可用的事情时,我会发布一些消息来源.
我有一个像这样的持久性模型:
@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中放置一个抽象方法,并在查询中使用它,但也不工作.
请问你能帮帮我吗 ?
谢谢,
我目前正在使用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
我的问题是:有人有解决此问题的方法吗?
开发时真的很烦人......
我想使用 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 依赖项中,但实际上并没有起作用。
有人可以帮助我吗?
谢谢,
烟
我的目标是合并/缩小所有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) 我想在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中有可能吗?