我已经在OS X上使用Java很多年了,而且最近苹果公司在默认情况下停止使用Java时我会让操作系统为我安装它(Apple当然是多种多样的).
所以现在我正在使用OS X 10.8,我需要安装Java 7,所以我只是以DMG形式获得了Oracle的Update 15并运行了安装程序.它更新了我的/ usr/bin/java(及相关文件)以指向:
/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
Run Code Online (Sandbox Code Playgroud)
将其追溯到'/System/Library/Frameworks/JavaVM.framework/Versions'所有内容都指向'Current'或'CurrentJDK',前者是指向'A'的链接(这是Oracle的Java 7,我可以告诉,不知道为什么它是'A'),后者是'/System/Library/Java/JavaVirtualMachines/1.6.0.jdk'中Apple的Java 6的链接.
现在这真的令人困惑,但这还不是我的问题.看来这里安装了一个Java 7:
/System/Library/Frameworks/JavaVM.framework/Versions/A
Run Code Online (Sandbox Code Playgroud)
但是这里还安装了一个Java 7:
/Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk
Run Code Online (Sandbox Code Playgroud)
在两者中查找'java'并打印出版本会产生相同的版本和构建(java版本"1.7.0_15"),但是,当对文件进行散列时它们是不同的.
那么这是否意味着Oracle在两个不同的地方安装了Java 7?如果是这样,为什么?我该使用哪个?为什么有些东西仍然指向Java 6(CurrentJDK).
我查看了甲骨文的网站,但没有任何东西可以清除.
我正在使用这样的代码创建一个简单的URL请求:
URL url = new URL(webpage);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
Run Code Online (Sandbox Code Playgroud)
但是在最后一行,我得到了"重定向太多次错误".如果我的"网页"var是google.com,那么它可以正常工作,但是当我尝试使用我的servlet的URL时,它就失败了.我似乎可以通过以下方式调整重定向后的次数(默认为20):
System.setProperty("http.maxRedirects", "100");
Run Code Online (Sandbox Code Playgroud)
但是当我把它调到100时,它肯定需要更长的时间来抛出错误所以我知道它正在尝试.但是,我的servlet的URL在(任何)浏览器中工作正常,并使用firebug中的"persist"选项,它似乎只重定向一次.
关于我的servlet的更多信息...它在tomcat中运行,并使用'mod-proxy-ajp'在apache前面运行.另外值得注意的是,它使用的是表单身份验证,因此您输入的任何URL都应该将您重定向到登录页面.正如我所说,这在所有浏览器中都能正常工作,但由于某些原因,重定向不适用于Java 6中的URLConnection.
感谢阅读...想法?
我有使用WatchService监听目录的工作代码,并响应我指定的事件.这很好,并且已经在linux和mac上进行了测试(尽管在后者上很明显使用了轮询).
但是,当我在生产中部署它时,结果是被监视的目录是NFS安装.由于WatchService在linux上运行时使用了inotify,因此从未触发任何事件,因为NFS挂载不会触发inotify事件(或类似的东西,这里有更多信息,这解释了我的问题:Java WatchService在观看映射驱动器时不生成事件) .
由于我的代码已经编写,我宁愿强制WatchService使用轮询实现而不是inotify实现.有没有办法做到这一点?
我通过查找sun.nio.fs.PollingWatchService源代码并直接创建对象(而不是使用FileSystems.getDefault(..newWatchService())来尝试此操作,但是当使用Path注册服务时,我得到了以下异常:java.nio .file.ProviderMismatchException.
那么,有什么想法吗?由于我已经使用WatchService和WatchKey API实现了代码,因此强制轮询比使用自定义或第三方轮询器重写所有内容要容易得多.谢谢!
我昨天了解到,多年来我一直错误地使用具有并发性的集合.
每当我创建一个需要由多个线程访问的集合时,我将其包装在其中一个Collections.synchronized*方法中.然后,每当改变集合时,我也将它包装在一个synchronized块中(我不知道为什么我这样做,我一定以为我在某处读过它).
但是,在更仔细地阅读API之后,似乎在迭代集合时需要synchronized块.从API文档(用于Map):
当迭代任何集合视图时,用户必须手动同步返回的地图:
这是一个小例子:
List<O> list = Collections.synchronizedList(new ArrayList<O>());
...
synchronized(list) {
for(O o: list) { ... }
}
Run Code Online (Sandbox Code Playgroud)
所以,鉴于此,我有两个问题:
为什么这甚至是必要的?我能想到的唯一解释是他们使用的是默认迭代器而不是托管线程安全迭代器,但他们可以创建一个线程安全的迭代器并修复这个混乱,对吧?
更重要的是,这是完成了什么?通过将迭代放在同步块中,您可以防止多个线程同时进行迭代.但是另一个线程可以在迭代时改变列表,那么synchronized块如何帮助那里呢?不会在其他地方改变列表,不管它是否同步?我错过了什么?
谢谢您的帮助!
我有一个ldap服务器,我用它来验证tomcat Web应用程序中的用户.我正在使用JNDIRealm,它在上下文文件中配置,这很好用.
我还需要在ldap中搜索用户信息.我已经想出了如何使用"jndi方法"做到这一点,并且我通过使用哈希表创建自己的jndi上下文使其在tomcat之外正常工作.但是,我不想在代码中配置jndi属性,而是想在Realm配置旁边的上下文文件中创建一个JNDI Rsource.
我想我会做这样的事情:
<Resource
name="ldap"
auth="Container"
type="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"
java.naming.provider.url="ldap://localhost:389"
java.naming.security.authentication="simple"
java.naming.security.principal="uid=rjcarr,dc=example"
java.naming.security.credentials="abc123"
/>
Run Code Online (Sandbox Code Playgroud)
但是tomcat告诉我资源无法创建或者当我尝试用这样的东西初始化时:
Context initctx = new InitialContext();
DirContext ctx = (DirContext) initctx.lookup("java:comp/env/ldap");
Run Code Online (Sandbox Code Playgroud)
Tomcat告诉我"无法创建资源实例".我还在我的web.xml文件中添加了正确的resource-ref,所以我认为这不是问题所在.
由于LDAP与JNDI方法一起使用,我假设它应该能够配置为资源,对吧?我错过了什么?
这将是一个有点长和具体,所以请耐心等待.我理解XSLT是如何工作的,但我不知道执行操作的所有元素.您可以提供的任何帮助将不胜感激.
假设我有一本用XML编写的737s试用手册.但是,有3种类型的737(400,600和800),虽然90%的手册对于所有三种类型都是相同的,但是只有每种类型的特定部分.一些飞行员只会学习1或2(或有时是所有3)喷气机,所以我想省略与它们无关的部分.以下是我设置XML的方法:
<manual>
<section>A: This is relevant for every type</section>
<section t600="no" t800="no">B: This is relevant only for the 737-400</section>
<section t800="no">C: This is relevant for 737-400 and 737-600</section>
<section t400="no">D: This is relevant for 737-600 and 737-800</section>
</manual>
Run Code Online (Sandbox Code Playgroud)
我希望能够以某种方式指定我只对737-800感兴趣,并得到这样的手册:
<manual>
<section>A: This is relevant for every type</section>
<section>D: This is relevant for 737-600 and 737-800</section>
</manual>
Run Code Online (Sandbox Code Playgroud)
或者对于对两架喷气机感兴趣的不同飞行员,比如737-400和737-600,手册看起来像这样:
<manual>
<section>A: This is relevant for every type</section>
<section>B: This is relevant only for the 737-400</section>
<section>C: This is relevant for 737-400 …Run Code Online (Sandbox Code Playgroud) 我依靠数据库告诉我是否存在唯一性违规,所以我想知道我得到的异常何时是某种约束违规.看起来这正是我需要的:java.sql.SQLNonTransientException
但它是1.6的新功能,我不确定我的数据库驱动程序是否足够新.我使用了很多DBMS并拥有许多客户端,因此依赖于驱动程序是最新的很困难.
除了搜索"约束"的异常消息之外,是否有通用的方法来检查这个pre-java 1.6?
我有一张桌子,在同一行中有一堆相同的图像。图片的高度为21px,但表格的单元格的渲染高度为25px(在Chrome,Safari和Firefox中)。
表格中没有其他内容,据我所知,没有边距,边框或填充。那么为什么我的桌子比需要的高呢?
这是一个例子:
这是表格的一个简单示例:
<table>
<tbody>
<tr>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
<td class="datetime"></td>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
<td><img src="http://i.imgur.com/b2f5t2B.png"></td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
额外的问题:是否有一种方法可以在不使用表(也没有使用浮点数)的情况下重新创建此布局?
我已经进行了几个月的工作,但是今天我重新开机,但出现故障。抱歉,这有点详细和具体,但是我迫切需要帮助。
我有apache-2.2和两个tomcat-6服务器(仅从两个单独的文件夹运行)。我没有任何http连接器,但是我在每个服务器的端口8009和8010上运行了一个ajp连接器。启动时,两个tomcats都报告该连接器正在运行,并且似乎没有任何问题:
INFO: JK: ajp13 listening on /0.0.0.0:8009
...
INFO: JK: ajp13 listening on /0.0.0.0:8010
Run Code Online (Sandbox Code Playgroud)
我有理由确定我的工作人员和apache配置设置正确。我可以很好地到达8009上的连接器,一点问题都没有,但是当我尝试8010时apache会给我503。检查日志(mod_jk.log)它说:
jk_open_socket::jk_connect.c (594): connect to 127.0.0.1:8010 failed (errno=13)
ajp_connect_to_endpoint::jk_ajp_common.c (922): Failed opening socket to (127.0.0.1:8010) (errno=13)
ajp_send_request::jk_ajp_common.c (1507): (eis) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=13)
Run Code Online (Sandbox Code Playgroud)
但是我不明白的是,如果我对该端口执行简单的telnet并发送GET:
# telnet 127.0.0.1 8010
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
GET
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
命中了正确的tomcat(预期错误):
Oct 25, 2011 6:17:10 PM org.apache.jk.common.MsgAjp processHeader …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用VirtualBox进行一些本地RDC测试.主机是OSX.8,VM是ubuntu,VirtualBox是4.1.22版.
VM启动正常,没有任何问题.我将其关闭并从"显示"选项的"远程显示"部分选择"启用服务器"并重新启动,然后再次启动.请注意,端口是默认的,身份验证为"null".
我启动Microsoft的RDC(v2.1.0)并输入'localhost'并获取:由于网络问题,您已从基于Windows的计算机断开连接.
我尝试127.0.0.1并得到相同的错误.然后我输入我的(主机)计算机的IP并得到相同的错误.我知道环回地址避免了防火墙,但无论如何我关闭了它并得到了同样的错误.
无论我是使用NAT网络还是桥接,我都会得到同样的错误.我究竟做错了什么?
我应该注意,这是一个虚拟安装的VirtualBox,我没有添加任何扩展或访客添加或类似的东西.
似乎我做得很对.我错过了什么?谢谢您的帮助!
我正在尝试在tomcat中设置两个领域,并且由于某种原因它不会让我.我想使用标准的UserDatabaseRealm(conf/tomcat-users.xml)来执行管理工作(比如部署webapps),但我想要一个自定义域来为特定的webapp进行身份验证.
所以,我尝试将其放在我的webapp上下文中:
<Context>
<GlobalNamingResources>
<Resource name="CustomDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="/usr/java/apache-tomcat-6.0.35/conf/tomcat-users.xml"
/>
</GlobalNamingResources>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="CustomDatabase"
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
这只是server.xml中的一个副本,其中包含一些更改:
该名称从UserDatabase更改为CustomDatabase.
路径名是绝对路径名(和我用于主域的路径名相同).
我总是得到同样的错误:
LifecycleException: No UserDatabase component found under key CustomDatabase
Run Code Online (Sandbox Code Playgroud)
我不知道它告诉我什么.它在谈论什么组成部分?
除了上面的上下文,我还尝试了其他一些东西,但它总是会出现同样的错误:
我尝试使用GlobalNamingResources标记包装资源以及是否存在相同的错误.
我已经尝试将Resource的auth属性更改为Container和Application并获得相同的错误.
我错过了什么?谷歌的所有帮助主要是人们弄乱他们的主要领域(我的很好)不试图配置第二个领域.
java ×7
tomcat ×3
ajp ×1
apache ×1
collections ×1
concurrency ×1
constraints ×1
css ×1
exception ×1
html ×1
html-table ×1
jdbc ×1
jdbcrealm ×1
jndi ×1
ldap ×1
macos ×1
nio ×1
oracle ×1
polling ×1
redirect ×1
servlets ×1
url ×1
virtualbox ×1
xml ×1
xslt ×1